From bcb56d0ba24737a94705a72d12c086ca2609192b Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Wed, 11 Feb 2015 13:55:56 +0600 Subject: [PATCH] Internal refactoring and cleanup. --- .../rscPermissions/Backends/Backend.java | 3 - .../rscPermissions/Backends/BackendJson.java | 2 +- .../rscPermissions/Backends/BackendMySQL.java | 81 ++++--------------- .../Bukkit/BukkitPermissions.java | 3 +- .../Bukkit/BukkitPluginConfiguration.java | 5 +- .../rscPermissions/BukkitPluginMain.java | 7 +- .../rscPermissions/ConnectionHelper.java | 20 ++--- .../rscPermissions/DataTypes/AbstractRow.java | 7 +- .../DataTypes/ConditionalRow.java | 9 --- .../rscPermissions/DataTypes/EntityType.java | 6 +- .../rscPermissions/DataTypes/RowEntity.java | 7 +- .../DataTypes/RowInheritance.java | 11 ++- .../DataTypes/RowPermission.java | 13 ++- .../InternalCache/AsyncPlayerInfo.java | 2 +- .../InternalCache/BrandNewCache.java | 14 ---- .../InternalCache/LocalCacheFunctions.java | 1 - .../InternalCache/ResolutionParams.java | 10 +++ .../InternalCache/ResolutionResult.java | 9 +++ 18 files changed, 67 insertions(+), 143 deletions(-) delete mode 100644 src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java create mode 100644 src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java create mode 100644 src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java b/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java index 5fdc5d3..064f682 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java @@ -6,9 +6,6 @@ import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache; public interface Backend { - public abstract boolean canRead(); - public abstract boolean canWrite(); - public abstract void fetchIntoCache(AbstractPermissionsCache cache); public abstract RowEntity[] fetchEntities(); public abstract RowPermission[] fetchPermissions(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java index ad676de..28c9701 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java @@ -14,7 +14,7 @@ public class BackendJson { private final static String localEntitiesFile = "entities.json"; private final static String localPermissionsFile = "permissions.json"; - private final static String localInheritanceFile = "inheritance.json"; + private final static String localInheritanceFile = "inheritance.json"; public RowEntity[] fetchEntities() { final Gson gson = new Gson(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java index 41b6b6e..80b61f4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java @@ -14,84 +14,33 @@ import ru.simsonic.rscUtilityLibrary.ConnectionMySQL; public class BackendMySQL extends ConnectionMySQL implements Backend { - protected final BukkitPluginMain plugin; - protected static enum WorkMode { read, write, none, } - protected WorkMode RememberWork; + protected final BukkitPluginMain rscp; public BackendMySQL(BukkitPluginMain plugin) { - this.plugin = plugin; + this.rscp = plugin; } - public synchronized void Initialize(String name, String database, String username, String password, String workmode, String prefixes) + public synchronized void Initialize(String database, String username, String password, String prefixes) { - super.Initialize(name, database, username, password, prefixes); - switch(workmode.toLowerCase()) - { - case "fullaccess": - RememberWork = WorkMode.write; - break; - case "readonly": - RememberWork = WorkMode.read; - break; - case "none": - default: - RememberWork = WorkMode.none; - break; - } - } - @Override - public synchronized boolean canRead() - { - return (RememberWork != WorkMode.none) ? (isConnected() ? true : Connect()) : false; - } - @Override - public synchronized boolean canWrite() - { - return (RememberWork == WorkMode.write) ? (isConnected() ? true : Connect()) : false; + super.Initialize("rscp:MySQL", database, username, password, prefixes); } @Override public synchronized boolean Connect() { - if(RememberWork == WorkMode.none) - return false; - if(super.Connect()) - { - - executeUpdateT("Initialize_main_v1"); - cleanupTables(); - return true; - } - return false; - } - @Override - public synchronized ResultSet executeQuery(String query) - { - if(canRead() == false) - return null; - return super.executeQuery(query); - } - @Override - public synchronized boolean executeUpdate(String query) - { - if(canWrite() == false) - return false; - return super.executeUpdate(query); - } - private void cleanupTables() - { - executeUpdateT("Cleanup_tables"); + return super.Connect() + && executeUpdateT("Initialize_main_v1") + && executeUpdateT("Cleanup_tables"); } @Override public synchronized void fetchIntoCache(AbstractPermissionsCache cache) { - cleanupTables(); + executeUpdateT("Cleanup_tables"); BukkitPluginMain.consoleLog.log(Level.INFO, - "[rscp] Fetched {0}e, {1}p, {2}i, from \"{4}\".", - new Object[] + "[rscp] Fetched {0} entities, {1} permissions and {2} inheritances", + new Integer[] { - Integer.toString(cache.ImportEntities(fetchEntities())), - Integer.toString(cache.ImportPermissions(fetchPermissions())), - Integer.toString(cache.ImportInheritance(fetchInheritance())), - RememberName, + cache.ImportEntities(fetchEntities()), + cache.ImportPermissions(fetchPermissions()), + cache.ImportInheritance(fetchInheritance()) }); } @Override @@ -123,7 +72,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend { final ArrayList result = new ArrayList<>(); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;"); - final String serverId = plugin.getServer().getServerId(); + final String serverId = rscp.getServer().getServerId(); try { while(rs.next()) @@ -155,7 +104,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend { final ArrayList result = new ArrayList<>(); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;"); - final String serverId = plugin.getServer().getServerId(); + final String serverId = rscp.getServer().getServerId(); try { while(rs.next()) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java index 939f7fe..f7c6edf 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java @@ -6,6 +6,7 @@ import org.bukkit.permissions.PermissionAttachment; import ru.simsonic.rscPermissions.DataTypes.RowPermission; import ru.simsonic.rscPermissions.InternalCache.BrandNewCache; import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.InternalCache.ResolutionResult; import ru.simsonic.rscUtilityLibrary.RestartableThread; public class BukkitPermissions extends RestartableThread @@ -43,7 +44,7 @@ public class BukkitPermissions extends RestartableThread { for(Player current = updateQueue.take(); current != null; current = updateQueue.take()) { - final BrandNewCache.ResolutionResult result = rscp.cache2.resolvePlayer(current); + final ResolutionResult result = rscp.cache2.resolvePlayer(current); prefixes.put(current, result.prefix); suffixes.put(current, result.suffix); persistentPermissions.put(current, result.permissions); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java index f7c1c3e..83056d6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java @@ -161,10 +161,7 @@ public class BukkitPluginConfiguration implements Settings for(HashMap server : serverlist) { ConnectionHelper conn = new ConnectionHelper(plugin, connPrev); - conn.Initialize( - server.get("nodename"), server.get("database"), - server.get("username"), server.get("password"), - server.get("workmode"), server.get("prefixes")); + conn.Initialize(server.get("database"), server.get("username"), server.get("password"), server.get("prefixes")); connPrev = conn; } return connPrev; diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 7b3b3c0..ad44894 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -127,11 +127,6 @@ public final class BukkitPluginMain extends JavaPlugin public static void main(String args[]) { System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); - System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/"); - // TEST SECTION STARTS BELOW - BukkitPluginMain mpc = new BukkitPluginMain(); - ConnectionHelper ch = new ConnectionHelper(mpc, null); - ch.Initialize("Test", "voxile.ru:3306/servers-shared", "server-primary", "zcHzCBFZtTv28JfG", "rscp_"); - ch.Connect(); + System.out.println("https://github.com/SimSonic/rscPermissions/"); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java index 84eae3e..dcbc687 100644 --- a/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java +++ b/src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java @@ -41,7 +41,7 @@ public class ConnectionHelper extends BackendMySQL final ConnectionMySQL connection = findConnectedNode(); if(connection == null) return; - fetchIntoCache(plugin.cache2); + fetchIntoCache(rscp.cache2); // Update permissions for online players try { @@ -50,19 +50,19 @@ public class ConnectionHelper extends BackendMySQL @Override public synchronized void run() { - plugin.permissionManager.recalculateOnlinePlayers(); + rscp.permissionManager.recalculateOnlinePlayers(); notify(); } }; synchronized(syncTask) { - plugin.getServer().getScheduler().runTask(plugin, syncTask); + rscp.getServer().getScheduler().runTask(rscp, syncTask); syncTask.wait(); } } catch(InterruptedException ex) { BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex); } - // plugin.cache.calculateStartupPermissions(); + // rscp.cache.calculateStartupPermissions(); } }; result.start(); @@ -77,10 +77,10 @@ public class ConnectionHelper extends BackendMySQL { setName("InsertExampleRows"); final BackendMySQL backend = findConnectedNode(); - if(backend == null || !backend.canWrite()) + if(backend == null) return; backend.insertExampleRows(); - plugin.getServer().getScheduler().runTask(plugin, new Runnable() + rscp.getServer().getScheduler().runTask(rscp, new Runnable() { @Override public void run() @@ -104,17 +104,17 @@ public class ConnectionHelper extends BackendMySQL { setName("MigrateFromPExSQL"); final BackendMySQL backend = findConnectedNode(); - if(backend == null || !backend.canWrite()) + if(backend == null) return; backend.executeUpdate(loadResourceSQLT("Migrate_from_PermissionsEx")); threadFetchTablesData().join(); - plugin.getServer().getScheduler().runTask(plugin, new BukkitRunnable() + rscp.getServer().getScheduler().runTask(rscp, new BukkitRunnable() { @Override public void run() { - plugin.formattedMessage(sender, "Migration from PermissionsEx (MySQL backend) done!"); - plugin.formattedMessage(sender, "Check the latest database row for new data."); + rscp.formattedMessage(sender, "Migration from PermissionsEx (MySQL backend) done!"); + rscp.formattedMessage(sender, "Check the latest database row for new data."); } }); } catch(InterruptedException ex) { diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java index b1cb3c2..3195934 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java @@ -4,11 +4,6 @@ import java.util.regex.Pattern; public abstract class AbstractRow { public int id = 0; - public static enum Table - { - entities, permissions, inheritance, unknown; - } - public abstract Table getTable(); private static final Pattern patternUUID = Pattern.compile( "" + "(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})" + ""); private static boolean isCorrectUUID(String entityName) @@ -17,4 +12,4 @@ public abstract class AbstractRow return false; return patternUUID.matcher("" + entityName.toLowerCase() + "").find(); } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java deleted file mode 100644 index 7ccd7d5..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.simsonic.rscPermissions.DataTypes; -import java.sql.Timestamp; - -public abstract class ConditionalRow extends AbstractRow -{ - public Destination destination; - public int expirience; - public Timestamp lifetime; -} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java index a888642..a88a320 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java @@ -2,7 +2,9 @@ package ru.simsonic.rscPermissions.DataTypes; public enum EntityType { - group(0), player(1), unknown(-1); + group(0), + player(1), + unknown(-1); private final int value; private EntityType(int value) { @@ -15,4 +17,4 @@ public enum EntityType return constant; return unknown; } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java index bee574d..8b953e6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java @@ -8,9 +8,4 @@ public class RowEntity extends AbstractRow public String prefix; public String suffix; public Timestamp lifetime; - @Override - public Table getTable() - { - return Table.entities; - } -} \ No newline at end of file +} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java index f1ab515..1e9e770 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java @@ -1,15 +1,19 @@ package ru.simsonic.rscPermissions.DataTypes; +import java.sql.Timestamp; import java.util.Arrays; import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes; -public class RowInheritance extends ConditionalRow implements Comparable +public class RowInheritance extends AbstractRow implements Comparable { public String entity; public String parent; public String instance; public EntityType childType; public int priority; + public Destination destination; + public int expirience; + public Timestamp lifetime; public void deriveInstance() { if(parent != null) @@ -25,11 +29,6 @@ public class RowInheritance extends ConditionalRow implements Comparable entityTrees = new HashMap<>(); // Права по сущностям final HashMap groupPermissions = new HashMap<>(); diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java index 44c111b..18203d9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java @@ -1,6 +1,5 @@ package ru.simsonic.rscPermissions.InternalCache; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.Set; import ru.simsonic.rscPermissions.DataTypes.RowEntity; diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java new file mode 100644 index 0000000..29f0582 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java @@ -0,0 +1,10 @@ +package ru.simsonic.rscPermissions.InternalCache; + +public class ResolutionParams +{ + public String[] applicableIdentifiers; + public String[] destRegions; + public String destWorld; + public String destServerId; + public int expirience; +} diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java new file mode 100644 index 0000000..b6b2b4f --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java @@ -0,0 +1,9 @@ +package ru.simsonic.rscPermissions.InternalCache; +import ru.simsonic.rscPermissions.DataTypes.RowPermission; + +public class ResolutionResult +{ + public String prefix; + public String suffix; + public RowPermission[] permissions; +}