From 145d7e77194f2ffb872f50f351339fd1272d549c Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Fri, 5 Aug 2016 14:32:06 +0700 Subject: [PATCH] Work continuation. --- .../simsonic/rscPermissions/API/Settings.java | 1 + .../rscPermissions/BridgeForBukkitAPI.java | 54 ++++++++++++------- .../rscPermissions/Bukkit/BukkitFetching.java | 10 ++-- .../Bukkit/BukkitPermissionManager.java | 2 +- .../Bukkit/Commands/BukkitCommands.java | 17 +++--- .../Bukkit/Commands/CommandFetch.java | 23 -------- .../Bukkit/Commands/CommandReload.java | 23 +++++++- .../Bukkit/Commands/CommandUpdate.java | 27 ---------- .../rscPermissions/BukkitPluginMain.java | 43 ++++++++------- .../Engine/Backends/DatabaseEditor.java | 3 +- .../rscPermissions/Engine/Phrases.java | 1 + src/main/resources/languages/english.yml | 1 + src/main/resources/languages/russian.yml | 1 + 13 files changed, 94 insertions(+), 112 deletions(-) delete mode 100644 src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java delete mode 100644 src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUpdate.java diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java index 5746ad3..3945525 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java @@ -8,6 +8,7 @@ public interface Settings { public static final String UPDATER_URL = "http://simsonic.github.io/rscPermissions/latest.json"; public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}"; + public static final String DEBUG_PREFIX = CHAT_PREFIX + "{_WH}[DEBUG]{_LS} "; public static final String UPDATE_CMD = "/rscp update do"; public static final String PREFIX_PHOLDER = "%"; diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java index 0226bd7..2798bd1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java @@ -14,7 +14,7 @@ import ru.simsonic.rscPermissions.Bukkit.VaultPermission; import ru.simsonic.rscPermissions.Bukkit.WorldEditPermissions; import ru.simsonic.rscPermissions.Engine.Phrases; -public class BridgeForBukkitAPI +public final class BridgeForBukkitAPI { private static BridgeForBukkitAPI instance; public static BridgeForBukkitAPI getInstance() @@ -26,22 +26,26 @@ public class BridgeForBukkitAPI private final VaultChat vaultChat; protected BridgeForBukkitAPI(BukkitPluginMain plugin) { - BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this; - this.rscp = plugin; + instance = BridgeForBukkitAPI.this; + this.rscp = plugin; this.vaultPermission = new VaultPermission(this); this.vaultChat = new VaultChat(this, vaultPermission); } - public JavaPlugin getPlugin() - { - return this.rscp; - } - public Permission getPermission() + public void onEnable() { - return this.vaultPermission; + setupVault(); + rscp.getServer().getScheduler().runTask(rscp, new Runnable() + { + @Override + public void run() + { + setupWEPIF(); + } + }); } - public Chat getChat() + public JavaPlugin getPlugin() { - return this.vaultChat; + return this.rscp; } public String getName() { @@ -51,7 +55,15 @@ public class BridgeForBukkitAPI { return rscp.isEnabled(); } - protected void setupVault() + public Permission getPermission() + { + return this.vaultPermission; + } + public Chat getChat() + { + return this.vaultChat; + } + private void setupVault() { final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("Vault"); @@ -69,7 +81,7 @@ public class BridgeForBukkitAPI } else console.sendMessage(Phrases.INTEGRATION_V_N.toPlayer()); } - protected void setupWEPIF() + private void setupWEPIF() { final ConsoleCommandSender console = rscp.getServer().getConsoleSender(); final Plugin plugin = rscp.getServer().getPluginManager().getPlugin("WorldEdit"); @@ -89,7 +101,8 @@ public class BridgeForBukkitAPI { if(rscp.permissionManager.isConsoleDebugging()) { - final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX).append("[DEBUG] {_LS}").append(info); + final StringBuilder sb = new StringBuilder(Settings.DEBUG_PREFIX) + .append(info); rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); } } @@ -97,17 +110,18 @@ public class BridgeForBukkitAPI { if(rscp.permissionManager.isConsoleDebugging()) { - final StringBuilder sb = new StringBuilder(Settings.CHAT_PREFIX); - sb.append("[DEBUG] An API method was invoked from the path:").append(System.lineSeparator()); - for(StackTraceElement ste : Thread.currentThread().getStackTrace()) + final StringBuilder sb = new StringBuilder(Settings.DEBUG_PREFIX) + .append("An API method was invoked from the path:") + .append(System.lineSeparator()); + for(StackTraceElement element : Thread.currentThread().getStackTrace()) { - final String className = ste.getClassName(); + final String className = element.getClassName(); if(!className.equals(BridgeForBukkitAPI.class.getName()) && !className.equals(Thread.class.getName()) ) - sb.append(Settings.CHAT_PREFIX).append("[DEBUG] ") + sb.append(Settings.DEBUG_PREFIX) .append(className.startsWith(BukkitPluginMain.class.getPackage().getName()) ? "{_LG}" : "{_LS}") - .append(ste.toString()) + .append(element.toString()) .append(System.lineSeparator()); } rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString())); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java index efb709b..831f691 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java @@ -4,8 +4,6 @@ import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import ru.simsonic.rscCommonsLibrary.RestartableThread; -import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; -import ru.simsonic.rscPermissions.API.Settings; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; import ru.simsonic.rscPermissions.Engine.Phrases; @@ -29,6 +27,7 @@ public class BukkitFetching extends RestartableThread BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache only."); return; } + // Download rows from DB and put them into local cache final DatabaseContents contents = remoteToLocal(); rscp.connection.disconnect(); if(contents != null) @@ -66,21 +65,20 @@ public class BukkitFetching extends RestartableThread public void run() { for(CommandSender debugger : debuggers) - debugger.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX - + "Database has been fetched in " + queryTime + " milliseconds.")); + debugger.sendMessage(Phrases.DEBUG_FETCH_TIME.toPlayer() + .replace("{:MS}", Long.toString(queryTime))); } }); } else BukkitPluginMain.consoleLog.warning("[rscp] Cannot load data from database."); } - public synchronized DatabaseContents remoteToLocal() + private synchronized DatabaseContents remoteToLocal() { final DatabaseContents contents = rscp.connection.retrieveContents(); if(contents != null) { rscp.localStorage.cleanup(); rscp.localStorage.saveContents(contents); - // contents.filterServerId(rscp.getServer().getServerId()); } return contents; } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index d1901d9..86e4f58 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java @@ -37,7 +37,7 @@ public class BukkitPermissionManager extends RestartableThread { resolutions.clear(); updateQueue.addAll(Tools.getOnlinePlayers()); - rscp.scheduleAutoUpdate(); + rscp.rescheduleAutoUpdate(); } public void recalculatePlayer(Player player) { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java index e3cc37d..24bdea9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -9,7 +9,6 @@ import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools; import ru.simsonic.rscPermissions.API.Settings; -import ru.simsonic.rscPermissions.Bukkit.BukkitFetching; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.Engine.Phrases; @@ -18,19 +17,15 @@ public class BukkitCommands private final BukkitPluginMain rscp; private final CommandEntity cmdEntity; private final CommandLock cmdLock; - private final CommandFetch cmdFetch; private final CommandDebug cmdDebug; private final CommandReload cmdReload; - private final CommandUpdate cmdUpdate; public BukkitCommands(final BukkitPluginMain plugin) { this.rscp = plugin; cmdEntity = new CommandEntity(rscp); cmdLock = new CommandLock (rscp); - cmdFetch = new CommandFetch (rscp); cmdDebug = new CommandDebug (rscp); cmdReload = new CommandReload(rscp); - cmdUpdate = new CommandUpdate(rscp); } @Deprecated public Thread threadMigrateFromPExSQL(final CommandSender sender) @@ -155,16 +150,16 @@ public class BukkitCommands cmdLock.executeUnlock(sender); return; case "fetch": - cmdFetch.execute(sender); - return; - case "debug": - cmdDebug.execute(sender, args); + cmdReload.executeFetch(sender); return; case "reload": - cmdReload.execute(sender); + cmdReload.executeReload(sender); return; case "update": - cmdUpdate.execute(sender, args); + cmdReload.executeUpdate(sender, args); + return; + case "debug": + cmdDebug.execute(sender, args); return; case "examplerows": /* DEPRECATED: rscp examplerows */ diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java deleted file mode 100644 index fa2255d..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandFetch.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.simsonic.rscPermissions.Bukkit.Commands; - -import org.bukkit.command.CommandSender; -import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; -import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscPermissions.Engine.Phrases; - -public class CommandFetch -{ - private final BukkitPluginMain rscp; - CommandFetch(BukkitPluginMain plugin) - { - this.rscp = plugin; - } - public void execute(CommandSender sender) throws CommandAnswerException - { - if(sender.hasPermission("rscp.admin.reload")) - { - rscp.fetching.startDeamon(); - throw new CommandAnswerException(Phrases.FETCHED_ANSWER.toString()); - } - } -} diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandReload.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandReload.java index aac8b5a..6e75eb5 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandReload.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandReload.java @@ -1,6 +1,7 @@ package ru.simsonic.rscPermissions.Bukkit.Commands; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.Engine.Phrases; @@ -12,7 +13,15 @@ public class CommandReload { this.rscp = plugin; } - public void execute(CommandSender sender) throws CommandAnswerException + public void executeFetch(CommandSender sender) throws CommandAnswerException + { + if(sender.hasPermission("rscp.admin.reload")) + { + rscp.fetchNowAndReschedule(); + throw new CommandAnswerException(Phrases.FETCHED_ANSWER.toString()); + } + } + public void executeReload(CommandSender sender) throws CommandAnswerException { if(sender.hasPermission("rscp.admin.reload")) { @@ -21,4 +30,16 @@ public class CommandReload throw new CommandAnswerException(Phrases.PLUGIN_RELOADED.toString()); } } + public void executeUpdate(CommandSender sender, String args[]) throws CommandAnswerException + { + if(sender.hasPermission("rscp.admin")) + { + if(args.length > 1 && "do".equals(args[1])) + { + rscp.updating.doUpdate(sender instanceof Player ? (Player)sender : null); + } else { + rscp.updating.checkUpdate(sender instanceof Player ? (Player)sender : null); + } + } + } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUpdate.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUpdate.java deleted file mode 100644 index 17fffc5..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUpdate.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.simsonic.rscPermissions.Bukkit.Commands; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; -import ru.simsonic.rscPermissions.BukkitPluginMain; - -public class CommandUpdate -{ - private final BukkitPluginMain rscp; - CommandUpdate(BukkitPluginMain plugin) - { - this.rscp = plugin; - } - public void execute(CommandSender sender, String args[]) throws CommandAnswerException - { - if(sender.hasPermission("rscp.admin")) - { - if(args.length > 1 && "do".equals(args[1])) - { - rscp.updating.doUpdate(sender instanceof Player ? (Player)sender : null); - } else { - rscp.updating.checkUpdate(sender instanceof Player ? (Player)sender : null); - } - } - } -} diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index 073061f..40f3879 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java @@ -92,15 +92,7 @@ public final class BukkitPluginMain extends JavaPlugin getServer().getPluginManager().registerEvents(listener, this); regionObserver.registerListeners(); // Integrate Vault and WEPIF - rscpAPIs.setupVault(); - getServer().getScheduler().runTask(this, new Runnable() - { - @Override - public void run() - { - rscpAPIs.setupWEPIF(); - } - }); + rscpAPIs.onEnable(); // WorldGuard, Residence and other possible region list providers regionProviders.integrate(); // Start all needed parallel threads as daemons @@ -108,12 +100,12 @@ public final class BukkitPluginMain extends JavaPlugin regionObserver.startDeamon(); // Connect to database and initiate data fetching connection.initialize(settings.getConnectionParams()); - if(settings.getAutoReloadDelayTicks() > 0) - fetching.startDeamon(); - // Done + fetchNowAndReschedule(); + // Check for update and notify admins for(Player online : Tools.getOnlinePlayers()) if(online.hasPermission("rscm.admin")) updating.onAdminJoin(online, false); + // Done consoleLog.info(Phrases.PLUGIN_ENABLED.toString()); } @Override @@ -135,22 +127,29 @@ public final class BukkitPluginMain extends JavaPlugin consoleLog.info(Phrases.PLUGIN_DISABLED.toString()); } private int nAutoUpdaterTaskId = -1; - public void scheduleAutoUpdate() + public void rescheduleAutoUpdate() { final BukkitScheduler scheduler = getServer().getScheduler(); if(nAutoUpdaterTaskId != -1) scheduler.cancelTask(nAutoUpdaterTaskId); final int delay = settings.getAutoReloadDelayTicks(); - nAutoUpdaterTaskId = delay > 0 - ? scheduler.scheduleSyncDelayedTask(this, new Runnable() + if(delay > 0) + { + nAutoUpdaterTaskId = scheduler.scheduleSyncDelayedTask(this, new Runnable() + { + @Override + public void run() { - @Override - public void run() - { - fetching.startDeamon(); - } - }, delay) - : -1; + fetching.startDeamon(); + } + }, delay); + } else + nAutoUpdaterTaskId = -1; + } + public void fetchNowAndReschedule() + { + fetching.startDeamon(); + rescheduleAutoUpdate(); } @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java index 97fcc00..2fdfece 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java @@ -5,7 +5,6 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.Map; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; -import ru.simsonic.rscPermissions.API.EntityType; import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowInheritance; import ru.simsonic.rscPermissions.API.RowPermission; @@ -81,6 +80,7 @@ public class DatabaseEditor extends BackendDatabase row.expirience != 0 ? row.expirience : null, /* FIX LIFETIME */ null); } + /* private DatabaseContents prepareChanges() { // START TRANSACTION AND LOCK TABLE @@ -101,6 +101,7 @@ public class DatabaseEditor extends BackendDatabase // CALL PLUGIN TO APPLY ALL THIS CHANGES plugin.fetching.run(); } + */ private RowPermission restorePermissionsAfterDelete(DatabaseContents contents, RowPermission remove) { final LinkedList sameIDs = new LinkedList<>(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java index d2b49fd..3c1b7fe 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Phrases.java @@ -33,6 +33,7 @@ public enum Phrases INTEGRATION_R_N ("integration.residence-no"), DEBUG_ON ("debug.enable"), DEBUG_OFF ("debug.disable"), + DEBUG_FETCH_TIME ("debug.fetch-time"), DEBUG_INGAME_1 ("debug.ingame-1"), DEBUG_INGAME_2 ("debug.ingame-2"), FETCHED_ANSWER ("database.command-answer"), diff --git a/src/main/resources/languages/english.yml b/src/main/resources/languages/english.yml index 6593487..953ea53 100644 --- a/src/main/resources/languages/english.yml +++ b/src/main/resources/languages/english.yml @@ -21,6 +21,7 @@ integration: debug: enable: "You will see a lot of debugging information now." disable: "Debugging information is now hidden for you." + fetch-time: "Database has been fetched in {:MS} milliseconds." ingame-1: "{_WH}[DEBUG]{_R}{_LS} Your parent groups: {_LG}{:PARENTS}{_LS}." ingame-2: "{_WH}[DEBUG]{_R}{_LS} Now you have total {_LG}{:PERMISSIONS}{_LS} permissions." database: diff --git a/src/main/resources/languages/russian.yml b/src/main/resources/languages/russian.yml index 44ac0f8..70c190e 100644 --- a/src/main/resources/languages/russian.yml +++ b/src/main/resources/languages/russian.yml @@ -21,6 +21,7 @@ integration: debug: enable: "Теперь Вы будете видеть отладочную информацию." disable: "Отладочная информация теперь скрыта от Вас." + fetch-time: "База данных была перечитана за {:MS} миллисекунд." ingame-1: "{_WH}[DEBUG]{_R}{_LS} Группы, в которые Вы входите: {_LG}{:PARENTS}{_LS}." ingame-2: "{_WH}[DEBUG]{_R}{_LS} Всего у Вас {_LG}{:PERMISSIONS}{_LS} прав." database: