Browse Source

Changelog:

* Destination::toString().
* BukkitUtilities.java
* Local cache files are renamed to be closer [in alphabetic order].
* Deployment creates schema.
* A bit better example entities.
master
Stanislav Usenkov 9 years ago
parent
commit
05e21b047d
  1. 15
      src/main/java/ru/simsonic/rscPermissions/API/Destination.java
  2. 7
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  3. 8
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java
  4. 3
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java
  5. 23
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
  6. 24
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java
  7. 21
      src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
  8. 9
      src/main/resources/sqlt/Deployment.sqlt
  9. 13
      src/main/resources/sqlt/ExampleContents.sqlt

15
src/main/java/ru/simsonic/rscPermissions/API/Destination.java

@ -69,21 +69,26 @@ public class Destination
"<wildcard>" + testing.toLowerCase() + "</wildcard>", "<wildcard>" + testing.toLowerCase() + "</wildcard>",
"<wildcard>" + pattern.toLowerCase() + "</wildcard>"); "<wildcard>" + pattern.toLowerCase() + "</wildcard>");
} }
private static final Pattern destinationPattern = Pattern.compile( private static final Pattern DESTINATION_PATTERN = Pattern.compile(
"(?:([\\w\\-\\_\\*\\?]*):)?([\\w\\-\\_\\*\\?]*)?(?:@([\\w\\-\\_\\*\\?]*))?"); "(?:([\\w\\-\\_\\*\\?]*):)?([\\w\\-\\_\\*\\?]*)?(?:@([\\w\\-\\_\\*\\?]*))?");
public static Destination parseDestination(String destination) public static Destination parseDestination(String destination)
{ {
final Matcher match = destinationPattern.matcher(destination); final Matcher match = DESTINATION_PATTERN.matcher(destination);
if(match.find()) if(match.find())
{ {
final String groupR = match.group(1); final String groupR = match.group(1);
final String groupW = match.group(2); final String groupW = match.group(2);
final String groupS = match.group(3); final String groupS = match.group(3);
final String region = (groupR == null || "".equals(groupR)) ? "*" : groupR; final String region = (groupR == null || "".equals(groupR) ? "*" : groupR);
final String world = (groupW == null || "".equals(groupW)) ? "*" : groupW; final String world = (groupW == null || "".equals(groupW) ? "*" : groupW);
final String serverId = (groupS == null || "".equals(groupS)) ? "*" : groupS; final String serverId = (groupS == null || "".equals(groupS) ? "*" : groupS);
return new Destination(region, world, serverId); return new Destination(region, world, serverId);
} }
return new Destination(); return new Destination();
} }
@Override
public String toString()
{
return String.format("%s:%s@%s", region, world, serverId);
}
} }

7
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java

@ -50,13 +50,6 @@ public class BridgeForBukkitAPI
{ {
return rscp.isEnabled(); return rscp.isEnabled();
} }
public Player findPlayer(String player)
{
for(Player online : Tools.getOnlinePlayers())
if(online.getName().equals(player))
return online;
return null;
}
protected void setupVault() protected void setupVault()
{ {
final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); final ConsoleCommandSender console = rscp.getServer().getConsoleSender();

8
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitUtilities.java

@ -4,9 +4,17 @@ import java.net.InetSocketAddress;
import java.util.ArrayList; import java.util.ArrayList;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
public class BukkitUtilities public class BukkitUtilities
{ {
public static Player findOnlinePlayer(String player)
{
for(Player online : Tools.getOnlinePlayers())
if(online.getName().equals(player))
return online;
return null;
}
public static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline) public static String[] getOfflinePlayerIdentifiers(OfflinePlayer offline)
{ {
final ArrayList<String> result = new ArrayList<>(); final ArrayList<String> result = new ArrayList<>();

3
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java

@ -5,6 +5,7 @@ import java.util.Collections;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseTransaction; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseTransaction;
import ru.simsonic.rscPermissions.Engine.Matchers; import ru.simsonic.rscPermissions.Engine.Matchers;
@ -28,7 +29,7 @@ public class CommandUser
{ {
if(args.length < 3) if(args.length < 3)
return; return;
final Player player = rscp.bridgeForBukkit.findPlayer(args[1]); final Player player = BukkitUtilities.findOnlinePlayer(args[1]);
if(player != null) if(player != null)
args[1] = player.getName(); args[1] = player.getName();
final ResolutionResult result = (player != null) final ResolutionResult result = (player != null)

23
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java

@ -148,14 +148,19 @@ public class BackendDatabase extends ConnectionMySQL
{ {
executeUpdate("ROLLBACK;"); executeUpdate("ROLLBACK;");
} }
public synchronized void modifyDatabase() public synchronized void removeEntityById(long id)
{ {
lockTableEntities(); setupQueryTemplate("{ID}", Long.toString(id));
// FETCH ALL DATA executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}entities` WHERE `id` = '{ID}';");
transactionStart(); }
// MAKE MODIFICATIONS public synchronized void removePermissionsById(long id)
transactionCommit(); {
unlockAllTables(); setupQueryTemplate("{ID}", Long.toString(id));
// FETCH ALL DATA AGAIN executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}permissions` WHERE `id` = '{ID}';");
}
public synchronized void removeInheritanceById(long id)
{
setupQueryTemplate("{ID}", Long.toString(id));
executeUpdateT("DELETE FROM `{DATABASE}`.`{PREFIX}inheritance` WHERE `id` = '{ID}';");
} }
} }

24
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendJson.java

@ -21,30 +21,30 @@ public class BackendJson
{ {
this.workingDir = workingDir; this.workingDir = workingDir;
} }
private final static String entitiesFile = "entities.json"; private final static String FILE_ENTITIES = "cached_entities.json";
private final static String permissionsFile = "permissions.json"; private final static String FILE_PERMISSIONS = "cached_permissions.json";
private final static String inheritanceFile = "inheritance.json"; private final static String FILE_INHERICATNCE = "cached_inheritance.json";
public synchronized DatabaseContents retrieveContents() public synchronized DatabaseContents retrieveContents()
{ {
final Gson gson = new Gson(); final Gson gson = new Gson();
final DatabaseContents result = new DatabaseContents(); final DatabaseContents result = new DatabaseContents();
// Entities // Entities
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream( try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(workingDir, entitiesFile)), Charset.forName("UTF-8")))) new File(workingDir, FILE_ENTITIES)), Charset.forName("UTF-8"))))
{ {
result.entities = gson.fromJson(jr, RowEntity[].class); result.entities = gson.fromJson(jr, RowEntity[].class);
} catch(IOException ex) { } catch(IOException ex) {
} }
// Permissions // Permissions
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream( try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(workingDir, permissionsFile)), Charset.forName("UTF-8")))) new File(workingDir, FILE_PERMISSIONS)), Charset.forName("UTF-8"))))
{ {
result.permissions = gson.fromJson(jr, RowPermission[].class); result.permissions = gson.fromJson(jr, RowPermission[].class);
} catch(IOException ex) { } catch(IOException ex) {
} }
// Inheritance // Inheritance
try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream( try(JsonReader jr = new JsonReader(new InputStreamReader(new FileInputStream(
new File(workingDir, inheritanceFile)), Charset.forName("UTF-8")))) new File(workingDir, FILE_INHERICATNCE)), Charset.forName("UTF-8"))))
{ {
result.inheritance = gson.fromJson(jr, RowInheritance[].class); result.inheritance = gson.fromJson(jr, RowInheritance[].class);
} catch(IOException ex) { } catch(IOException ex) {
@ -58,7 +58,7 @@ public class BackendJson
if(contents.entities == null) if(contents.entities == null)
contents.entities = new RowEntity[] {}; contents.entities = new RowEntity[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream( try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
new File(workingDir, entitiesFile)), Charset.forName("UTF-8")))) new File(workingDir, FILE_ENTITIES)), Charset.forName("UTF-8"))))
{ {
jw.setIndent("\t"); jw.setIndent("\t");
gson.toJson(contents.entities, RowEntity[].class, jw); gson.toJson(contents.entities, RowEntity[].class, jw);
@ -68,7 +68,7 @@ public class BackendJson
if(contents.permissions == null) if(contents.permissions == null)
contents.permissions = new RowPermission[] {}; contents.permissions = new RowPermission[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream( try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
new File(workingDir, permissionsFile)), Charset.forName("UTF-8")))) new File(workingDir, FILE_PERMISSIONS)), Charset.forName("UTF-8"))))
{ {
jw.setIndent("\t"); jw.setIndent("\t");
gson.toJson(contents.permissions, RowPermission[].class, jw); gson.toJson(contents.permissions, RowPermission[].class, jw);
@ -78,7 +78,7 @@ public class BackendJson
if(contents.inheritance == null) if(contents.inheritance == null)
contents.inheritance = new RowInheritance[] {}; contents.inheritance = new RowInheritance[] {};
try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream( try(JsonWriter jw = new JsonWriter(new OutputStreamWriter(new FileOutputStream(
new File(workingDir, inheritanceFile)), Charset.forName("UTF-8")))) new File(workingDir, FILE_INHERICATNCE)), Charset.forName("UTF-8"))))
{ {
jw.setIndent("\t"); jw.setIndent("\t");
gson.toJson(contents.inheritance, RowInheritance[].class, jw); gson.toJson(contents.inheritance, RowInheritance[].class, jw);
@ -87,8 +87,8 @@ public class BackendJson
} }
public synchronized void cleanup() public synchronized void cleanup()
{ {
new File(workingDir, entitiesFile).delete(); new File(workingDir, FILE_ENTITIES).delete();
new File(workingDir, permissionsFile).delete(); new File(workingDir, FILE_PERMISSIONS).delete();
new File(workingDir, inheritanceFile).delete(); new File(workingDir, FILE_INHERICATNCE).delete();
} }
} }

21
src/main/java/ru/simsonic/rscPermissions/IndependentMain.java

@ -12,23 +12,28 @@ import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class IndependentMain public class IndependentMain
{ {
private static final BackendJson localJsn = new BackendJson(new File("../")); private static final BackendJson localJsn = new BackendJson(new File("../"));
private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal()); private static final BackendDatabase database = new BackendDatabase(Logger.getGlobal());
private static final InternalCache intCache = new InternalCache(); private static final InternalCache intCache = new InternalCache();
@SuppressWarnings({"DeadBranch", "UnusedAssignment"}) @SuppressWarnings({"DeadBranch", "UnusedAssignment"})
public static void main(String args[]) public static void main(String args[])
{ {
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("https://github.com/SimSonic/rscPermissions/"); System.out.println("https://github.com/SimSonic/rscPermissions/");
// TESTING HERE // OK, IT'S SECURE FROM YOU :)
remoteDb.initialize(null, database.initialize(null,
"", // DATABASE "SCOUT:3306/rscp_testing", // DATABASE
"", // USERNAME "rscp_testing", // USERNAME
"", // PASSWORD "rscp_testing", // PASSWORD
"rscp_"); "rscp_");
if(remoteDb.connect()) if(database.connect())
{ {
System.out.println("Retrieving permissions from database into json files."); System.out.println("Retrieving permissions from database into json files.");
final DatabaseContents contents = remoteDb.retrieveContents(); DatabaseContents contents = database.retrieveContents();
if(contents.isEmpty())
{
database.insertExampleRows();
contents = database.retrieveContents();
}
contents.normalize(); contents.normalize();
localJsn.cleanup(); localJsn.cleanup();
localJsn.saveContents(contents); localJsn.saveContents(contents);

9
src/main/resources/sqlt/Deployment.sqlt

@ -1,3 +1,6 @@
CREATE DATABASE IF NOT EXISTS `{DATABASE}`
DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` ( CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`entity` VARCHAR(64) NOT NULL, `entity` VARCHAR(64) NOT NULL,
@ -8,7 +11,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `entity_UNIQUE` (`entity`, `entity_type`) UNIQUE KEY `entity_UNIQUE` (`entity`, `entity_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; ) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` ( CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
@ -22,7 +25,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}permissions` (
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `permission_UNIQUE` (`entity`, `entity_type`, `permission`, `destination`, `expirience`) UNIQUE KEY `permission_UNIQUE` (`entity`, `entity_type`, `permission`, `destination`, `expirience`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; ) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` ( CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
@ -36,4 +39,4 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
PRIMARY KEY (`id`, `entity`), PRIMARY KEY (`id`, `entity`),
UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `inheritance_UNIQUE` (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`) UNIQUE KEY `inheritance_UNIQUE` (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; ) ENGINE = 'InnoDB' AUTO_INCREMENT = 1 DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE = 'utf8_general_ci';

13
src/main/resources/sqlt/ExampleContents.sqlt

@ -2,11 +2,14 @@ INSERT IGNORE INTO
`{DATABASE}`.`{PREFIX}entities` `{DATABASE}`.`{PREFIX}entities`
(`entity`, `entity_type`, `prefix`, `suffix`) (`entity`, `entity_type`, `prefix`, `suffix`)
VALUES VALUES
('Default', b'0', '§r', '§r'), ('Administrators', b'0', '§r§c[Admin]§6', '§r'),
('Donators', b'0', '§r§6[Premium]§e', '§r'), ('Moderators', b'0', '§r§b[Moder]§6', '§r'),
('Builders', b'0', '§r§5[Builder]§d', '§r'), ('Builders', b'0', '§r§5[Build]§d', '§r'),
('Moderators', b'0', '§r§b[Moderator]§6', '§r'), ('Helpers' , b'0', '§r§5[Help]§d', '§r'),
('Administrators', b'0', '§r§c[Administrator]§6', '§r'); ('VIP', b'0', '§r§8[V]§f', '§r'),
('Premium', b'0', '§r§6[P]§e', '§r'),
('Default', b'0', '§r', '§r'),
('Guests', b'0', '§r§0[G]§8', '§r');
INSERT IGNORE INTO INSERT IGNORE INTO
`{DATABASE}`.`{PREFIX}permissions` `{DATABASE}`.`{PREFIX}permissions`

Loading…
Cancel
Save