From a835e5f90e27de8a6f6b3a8560f3aec6fc65075b Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Fri, 5 Aug 2016 19:50:12 +0700 Subject: [PATCH] Upgrade for use rscCommonsLibrary v2.2.2. --- pom.xml | 4 +- .../rscPermissions/Bukkit/BukkitFetching.java | 19 +- .../Bukkit/Commands/ArgumentUtilities.java | 16 +- .../Bukkit/Commands/BukkitCommands.java | 9 +- .../Bukkit/Commands/CommandEntity.java | 8 +- .../Engine/Backends/BackendDatabase.java | 194 +++++++++++++----- 6 files changed, 169 insertions(+), 81 deletions(-) diff --git a/pom.xml b/pom.xml index 5297322..de21997 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.10.7b + 0.10.8b-SNAPSHOT jar rscPermissions @@ -83,7 +83,7 @@ ru.simsonic rscCommonsLibrary - 2.2.0 + 2.2.2 compile diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java index 831f691..86ca3de 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitFetching.java @@ -1,5 +1,6 @@ package ru.simsonic.rscPermissions.Bukkit; +import java.sql.SQLException; import java.util.Set; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -21,12 +22,18 @@ public class BukkitFetching extends RestartableThread final long queryStartTime = System.currentTimeMillis(); Thread.currentThread().setName("rscp:DatabaseFetchingThread"); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); - if(rscp.connection.isConnected() == false) - if(rscp.connection.connect() == false) - { - BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache only."); - return; - } + try + { + if(rscp.connection.isConnected() == false) + if(rscp.connection.connect() == false) + { + BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache only."); + return; + } + } catch(SQLException ex) { + BukkitPluginMain.consoleLog.warning(ex.toString()); + return; + } // Download rows from DB and put them into local cache final DatabaseContents contents = remoteToLocal(); rscp.connection.disconnect(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java index c2817d7..a7c7d9d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java @@ -6,28 +6,26 @@ import ru.simsonic.rscPermissions.API.Destination; public class ArgumentUtilities { - public static class CommandParams + public static class OptionalParams { public Integer expirience; public Destination destination; public Integer lifetime; } - public static CommandParams parseCommandParams(String[] args) throws CommandAnswerException + public static OptionalParams parseCommandParams(String[] args) throws CommandAnswerException { // /rscp [params] - final CommandParams result = new CommandParams(); + final OptionalParams result = new OptionalParams(); for(int index = 0; index < args.length && args[index] != null; index += 1) { final boolean isLastArg = (index == args.length - 1); + if(isLastArg) + throw new CommandAnswerException("RequiresOneMoreArg"); switch(args[index].toLowerCase()) { - case "": - break; case "e": case "exp": case "expirience": - if(isLastArg) - throw new CommandAnswerException("RequiresOneMoreArg"); try { index += 1; @@ -41,8 +39,6 @@ public class ArgumentUtilities case "d": case "dest": case "destination": - if(isLastArg) - throw new CommandAnswerException("RequiresOneMoreArg"); index += 1; if(args[index] == null || "".equals(args[index])) throw new CommandAnswerException("NotEnoughArguments: args #" + index); @@ -50,8 +46,6 @@ public class ArgumentUtilities break; case "l": case "lifetime": - if(isLastArg) - throw new CommandAnswerException("RequiresOneMoreArg"); index += 1; result.lifetime = TimeIntervalParser.parseTimeInterval(args[index]); if(result.lifetime < 0) 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 24bdea9..eeb3d4b 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java @@ -1,5 +1,6 @@ package ru.simsonic.rscPermissions.Bukkit.Commands; +import java.sql.SQLException; import java.util.ArrayList; import java.util.logging.Level; import org.bukkit.command.CommandSender; @@ -38,7 +39,13 @@ public class BukkitCommands try { setName("rscp:MigrateFromPermissionsEx-SQL"); - rscp.connection.executeUpdateT("Migrate_from_PermissionsEx"); + try + { + rscp.connection.executeUpdateT("Migrate_from_PermissionsEx"); + } catch(SQLException ex) { + BukkitPluginMain.consoleLog.warning(ex.toString()); + return; + } rscp.fetching.join(); rscp.getServer().getScheduler().runTask(rscp, new Runnable() { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java index 4abc49c..1d8afc9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java @@ -15,7 +15,7 @@ import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowInheritance; import ru.simsonic.rscPermissions.API.RowPermission; import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities; -import ru.simsonic.rscPermissions.Bukkit.Commands.ArgumentUtilities.CommandParams; +import ru.simsonic.rscPermissions.Bukkit.Commands.ArgumentUtilities.OptionalParams; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.Engine.Matchers; import ru.simsonic.rscPermissions.Engine.ResolutionResult; @@ -170,7 +170,7 @@ public class CommandEntity throw new CommandAnswerException("FEW ARGUMENTS"); final String target = args[2]; args = Arrays.copyOfRange(args, 3, args.length); - final CommandParams optional = ArgumentUtilities.parseCommandParams(args); + final OptionalParams optional = ArgumentUtilities.parseCommandParams(args); switch(subcommand) { case "addgroup": @@ -400,7 +400,7 @@ public class CommandEntity answer.add("{_R}\"" + result.getSuffix() + "{_R}\""); throw new CommandAnswerException(answer); } - private void addGroup(RowEntity entity, String parent, CommandParams optional) throws CommandAnswerException + private void addGroup(RowEntity entity, String parent, OptionalParams optional) throws CommandAnswerException { final String[] splitted = RowInheritance.splitIntoNameAndInstance(parent); final RowEntity existing = rscp.internalCache.findGroupEntity(splitted[0]); @@ -417,7 +417,7 @@ public class CommandEntity rscp.fetchNowAndReschedule(); throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); } - private void addPermission(RowEntity entity, String permission, CommandParams optional) throws CommandAnswerException + private void addPermission(RowEntity entity, String permission, OptionalParams optional) throws CommandAnswerException { // final ArrayList answer = new ArrayList<>(); final RowPermission row = new RowPermission(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java index e1d2220..60b056d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java @@ -15,23 +15,41 @@ import ru.simsonic.rscPermissions.API.RowPermission; public class BackendDatabase extends ConnectionMySQL { + private final Logger consoleLog; public BackendDatabase(Logger logger) { - super(logger); + this.consoleLog = logger; } @Override public synchronized boolean connect() { - return super.connect() && executeUpdateT("Deployment"); + try + { + return super.connect() && executeUpdateT("Deployment"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } + return false; } public synchronized void insertExampleRows() { - executeUpdateT("ExampleContents"); + try + { + executeUpdateT("ExampleContents"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized DatabaseContents retrieveContents() { - executeUpdateT("Cleanup"); final DatabaseContents result = new DatabaseContents(); + try + { + executeUpdateT("Cleanup"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + return result; + } result.entities = fetchEntities(); result.permissions = fetchPermissions(); result.inheritance = fetchInheritance(); @@ -41,8 +59,7 @@ public class BackendDatabase extends ConnectionMySQL private RowEntity[] fetchEntities() { final ArrayList result = new ArrayList<>(); - final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}entities`;"); - try + try(final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}entities`;")) { while(rs.next()) { @@ -57,15 +74,14 @@ public class BackendDatabase extends ConnectionMySQL } rs.close(); } catch(SQLException ex) { - logger.log(Level.WARNING, "[rscp] Exception in rs2e(): {0}", ex); + consoleLog.warning(ex.toString()); } return result.toArray(new RowEntity[result.size()]); } private RowPermission[] fetchPermissions() { final ArrayList result = new ArrayList<>(); - final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;"); - try + try(final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;")) { while(rs.next()) { @@ -82,15 +98,14 @@ public class BackendDatabase extends ConnectionMySQL } rs.close(); } catch(SQLException ex) { - logger.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex); + consoleLog.warning(ex.toString()); } return result.toArray(new RowPermission[result.size()]); } private RowInheritance[] fetchInheritance() { final ArrayList result = new ArrayList<>(); - final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;"); - try + try(final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;")) { while(rs.next()) { @@ -107,76 +122,136 @@ public class BackendDatabase extends ConnectionMySQL } rs.close(); } catch(SQLException ex) { - logger.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex); + consoleLog.warning(ex.toString()); } return result.toArray(new RowInheritance[result.size()]); } public synchronized void lockTableEntities() { - executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}entities`;"); + try + { + executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}entities`;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void lockTablePermissions() { - executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}permissions`;"); + try + { + executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}permissions`;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void lockTableInheritance() { - executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}inheritance`;"); + try + { + executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}inheritance`;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void unlockAllTables() { - executeUpdate("UNLOCK TABLES;"); + try + { + executeUpdate("UNLOCK TABLES;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void transactionStart() { - executeUpdate("START TRANSACTION;"); + try + { + executeUpdate("START TRANSACTION;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void transactionCommit() { - executeUpdate("COMMIT;"); + try + { + executeUpdate("COMMIT;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void transactionCancel() { - executeUpdate("ROLLBACK;"); + try + { + executeUpdate("ROLLBACK;"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void updateEntityPrefix(String entity, EntityType type, String prefix) { - if("".equals(entity)) - return; - if("".equals(prefix) || "\"\"".equals(prefix)) - prefix = null; - setupQueryTemplate("{ENTITY}", entity); - setupQueryTemplate("{ENTITY_TYPE}", String.valueOf(type.getValue())); - setupQueryTemplate("{TEXT_TYPE}", "prefix"); - setupQueryTemplate("{TEXT}", (prefix != null) ? "'" + prefix + "'" : "NULL"); - executeUpdateT("UpdateEntity"); + try + { + if("".equals(entity)) + return; + if("".equals(prefix) || "\"\"".equals(prefix)) + prefix = null; + setupQueryTemplate("{ENTITY}", entity); + setupQueryTemplate("{ENTITY_TYPE}", String.valueOf(type.getValue())); + setupQueryTemplate("{TEXT_TYPE}", "prefix"); + setupQueryTemplate("{TEXT}", (prefix != null) ? "'" + prefix + "'" : "NULL"); + executeUpdateT("UpdateEntity"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void updateEntitySuffix(String entity, EntityType type, String suffix) { - if("".equals(entity)) - return; - if("".equals(suffix) || "\"\"".equals(suffix)) - suffix = null; - setupQueryTemplate("{ENTITY}", entity); - setupQueryTemplate("{ENTITY_TYPE}", String.valueOf(type.getValue())); - setupQueryTemplate("{TEXT_TYPE}", "suffix"); - setupQueryTemplate("{TEXT}", (suffix != null) ? "'" + suffix + "'" : "NULL"); - executeUpdateT("UpdateEntity"); + try + { + if("".equals(entity)) + return; + if("".equals(suffix) || "\"\"".equals(suffix)) + suffix = null; + setupQueryTemplate("{ENTITY}", entity); + setupQueryTemplate("{ENTITY_TYPE}", String.valueOf(type.getValue())); + setupQueryTemplate("{TEXT_TYPE}", "suffix"); + setupQueryTemplate("{TEXT}", (suffix != null) ? "'" + suffix + "'" : "NULL"); + executeUpdateT("UpdateEntity"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void removeEntityById(long id) { - setupQueryTemplate("{ID}", Long.toString(id)); - executeUpdate("DELETE FROM `{DATABASE}`.`{PREFIX}entities` WHERE `id` = '{ID}';"); + try + { + setupQueryTemplate("{ID}", Long.toString(id)); + executeUpdate("DELETE FROM `{DATABASE}`.`{PREFIX}entities` WHERE `id` = '{ID}';"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void removePermissionsById(long id) { - setupQueryTemplate("{ID}", Long.toString(id)); - executeUpdate("DELETE FROM `{DATABASE}`.`{PREFIX}permissions` WHERE `id` = '{ID}';"); + try + { + setupQueryTemplate("{ID}", Long.toString(id)); + executeUpdate("DELETE FROM `{DATABASE}`.`{PREFIX}permissions` WHERE `id` = '{ID}';"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void removeInheritanceById(long id) { - setupQueryTemplate("{ID}", Long.toString(id)); - executeUpdate("DELETE FROM `{DATABASE}`.`{PREFIX}inheritance` WHERE `id` = '{ID}';"); + try + { + setupQueryTemplate("{ID}", Long.toString(id)); + executeUpdate("DELETE FROM `{DATABASE}`.`{PREFIX}inheritance` WHERE `id` = '{ID}';"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); + } } public synchronized void insertEntity( Long id, @@ -259,20 +334,25 @@ public class BackendDatabase extends ConnectionMySQL } private void insertRow(Map fields) { - if(fields.isEmpty()) - return; - final StringBuilder sbf = new StringBuilder(); - final StringBuilder sbv = new StringBuilder(); - final String sep = ", "; - for(Map.Entry entry : fields.entrySet()) + try { - sbf.append("`").append(entry.getKey()).append("`").append(sep); - sbv.append(entry.getValue()).append(sep); + if(fields.isEmpty()) + return; + final StringBuilder sbf = new StringBuilder(); + final StringBuilder sbv = new StringBuilder(); + final String sep = ", "; + for(Map.Entry entry : fields.entrySet()) + { + sbf.append("`").append(entry.getKey()).append("`").append(sep); + sbv.append(entry.getValue()).append(sep); + } + sbf.setLength(sbf.length() - sep.length()); + sbv.setLength(sbv.length() - sep.length()); + setupQueryTemplate("{FIELDS}", sbf.toString()); + setupQueryTemplate("{VALUES}", sbv.toString()); + executeUpdate("INSERT INTO `{DATABASE}`.`{PREFIX}{TABLE}` ({FIELDS}) VALUES ({VALUES});"); + } catch(SQLException ex) { + consoleLog.warning(ex.toString()); } - sbf.setLength(sbf.length() - sep.length()); - sbv.setLength(sbv.length() - sep.length()); - setupQueryTemplate("{FIELDS}", sbf.toString()); - setupQueryTemplate("{VALUES}", sbv.toString()); - executeUpdate("INSERT INTO `{DATABASE}`.`{PREFIX}{TABLE}` ({FIELDS}) VALUES ({VALUES});"); } }