From c2f05dc2ecd32b1b2e455ff750dceaed74f7d0cd Mon Sep 17 00:00:00 2001 From: Stanislav Date: Thu, 25 Sep 2014 19:06:19 +0700 Subject: [PATCH] Day finalization commit. --- .../rscPermissions/Backends/BackendMySQL.java | 1 + .../rscPermissions/DataTypes/Destination.java | 43 +++++++++---------- .../rscPermissions/DataTypes/RowEntity.java | 2 + .../InternalCache/BrandNewCache.java | 10 ++--- .../InternalCache/LocalCacheTree.java | 6 +-- .../ru/simsonic/rscPermissions/Settings.java | 3 +- src/main/resources/sqlt/Cleanup_tables.sqlt | 8 ++-- .../resources/sqlt/Initialize_main_v1.sqlt | 8 +++- 8 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java index d6db475..1e6f356 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java +++ b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java @@ -112,6 +112,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend row.entityType = EntityType.byValue(rs.getInt("entity_type")); row.prefix = rs.getString("prefix"); row.suffix = rs.getString("suffix"); + row.lifetime = rs.getTimestamp("lifetime"); result.add(row); } rs.close(); diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java index f65526e..4c61c2b 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java @@ -44,20 +44,20 @@ public class Destination } private boolean IsWorldApplicable(World world, String instantiator) { - if(this.world == null || "".equals(this.world) || "*".equals(this.world)) + if(this.world == null || this.world.isEmpty() || "*".equals(this.world)) return true; - final String instantiated = (instantiator != null && !"".equals(instantiator)) ? - this.world.replaceAll(Settings.instantiatorRegExp, instantiator) : - this.world; + final String instantiated = (instantiator != null && !instantiator.isEmpty()) + ? this.world.replace(Settings.instantiator, instantiator) + : this.world; return wildcardTesting(world.getName(), instantiated); } private boolean IsRegionApplicable(Set regions, String instantiator) { if(this.region == null || "".equals(this.region) || "*".equals(this.region)) return true; - final String instantiated = (instantiator != null && !"".equals(instantiator)) ? - this.region.replaceAll(Settings.instantiatorRegExp, instantiator) : - this.region; + final String instantiated = (instantiator != null && !"".equals(instantiator)) + ? this.region.replace(Settings.instantiator, instantiator) + : this.region; for(String regionId : regions) if(wildcardTesting(regionId, instantiated)) return true; @@ -73,32 +73,31 @@ public class Destination "" + testing.toLowerCase() + "", "" + pattern.toLowerCase() + ""); } + private static final String destinationSplitting = "\\s*[;,\\r\\n]+\\s*"; public static Destination[] ParseDestinations(String destinations) { - if(destinations == null) + if(destinations == null || destinations.isEmpty()) return new Destination[] { new Destination() }; - if(destinations.isEmpty()) - return new Destination[] { new Destination() }; - final String[] destinationsList = destinations.split("\\s*(?:;|,|\\r|\\n)+\\s*"); + final String[] destinationsList = destinations.split(destinationSplitting); final ArrayList result = new ArrayList(destinationsList.length); - for(int nDestination = 0; nDestination < destinationsList.length; nDestination += 1) - if(destinationsList[nDestination].isEmpty() == false) - result.add(ParseDestination(destinationsList[nDestination])); + for(String inList : destinationsList) + if(inList != null && !inList.isEmpty()) + result.add(ParseDestination(inList)); return result.toArray(new Destination[result.size()]); } private static final Pattern patternDestination = Pattern.compile( - "" + "(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?" + ""); + "^(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?$"); private static Destination ParseDestination(String destination) { - Matcher match = patternDestination.matcher("" + destination + ""); + final Matcher match = patternDestination.matcher(destination); if(match.find()) { - final String group1 = match.group(1); - final String group2 = match.group(2); - final String group3 = match.group(3); - final String region = (group1 == null || "".equals(group1)) ? "*" : group1; - final String world = (group2 == null || "".equals(group2)) ? "*" : group2; - final String serverId = (group3 == null || "".equals(group3)) ? "*" : group3; + final String groupR = match.group(1); + final String groupW = match.group(2); + final String groupS = match.group(3); + final String region = (groupR == null || "".equals(groupR)) ? "*" : groupR; + final String world = (groupW == null || "".equals(groupW)) ? "*" : groupW; + final String serverId = (groupS == null || "".equals(groupS)) ? "*" : groupS; return new Destination(region, world, serverId); } return new Destination(); diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java index 8a1eec2..bee574d 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java @@ -1,4 +1,5 @@ package ru.simsonic.rscPermissions.DataTypes; +import java.sql.Timestamp; public class RowEntity extends AbstractRow { @@ -6,6 +7,7 @@ public class RowEntity extends AbstractRow public EntityType entityType; public String prefix; public String suffix; + public Timestamp lifetime; @Override public Table getTable() { diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java index 6494d93..054b3b4 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java @@ -136,7 +136,7 @@ public class BrandNewCache implements AbstractPermissionsCache params.destRegions = new String[] {}; params.destWorld = player.getLocation().getWorld().getName(); params.destServerId = plugin.getServer().getServerId(); - // TO DO + resolvePlayer(params); } public void resolvePlayer(String player) { @@ -145,16 +145,16 @@ public class BrandNewCache implements AbstractPermissionsCache params.destRegions = new String[] {}; params.destWorld = ""; params.destServerId = plugin.getServer().getServerId(); - // TO DO + resolvePlayer(params); } private void resolvePlayer(ResolutionParams params) { - final ArrayList leafs = new ArrayList<>(); + final ArrayList applicableBranches = new ArrayList<>(); for(String identifier : params.applicableIdentifiers) for(String tree : entityTrees.keySet()) if(tree.equals(identifier)) - leafs.add(entityTrees.get(tree)); - Collections.sort(leafs); + applicableBranches.add(entityTrees.get(tree)); + Collections.sort(applicableBranches); final InheritanceLeaf root = new InheritanceLeaf(); } public void recoursion(ResolutionParams params, InheritanceLeaf branch) diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java index 20907c6..9cb1794 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java @@ -100,7 +100,7 @@ public class LocalCacheTree extends LocalCacheData String permission = row.permission; // Additional processing if(permission.contains(Settings.instantiator) && (leaf.instance != null)) - permission = permission.replaceAll(Settings.instantiatorRegExp, leaf.instance); + permission = permission.replace(Settings.instantiator, leaf.instance); permissions.put(permission, row.value); } RowEntity entity = entities_g.get(leaf.group.toLowerCase()); @@ -110,8 +110,8 @@ public class LocalCacheTree extends LocalCacheData prefix = entity.prefix.replace("%", prefix); if(entity.suffix != null && !"".equals(entity.suffix)) suffix = entity.suffix.replace("%", suffix); - prefix = prefix.replaceAll(Settings.instantiatorRegExp, leaf.instance); - suffix = suffix.replaceAll(Settings.instantiatorRegExp, leaf.instance); + prefix = prefix.replace(Settings.instantiator, leaf.instance); + suffix = suffix.replace(Settings.instantiator, leaf.instance); } } // User permissions diff --git a/src/main/java/ru/simsonic/rscPermissions/Settings.java b/src/main/java/ru/simsonic/rscPermissions/Settings.java index 86a986d..c6d9f8c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/Settings.java @@ -21,10 +21,9 @@ public class Settings private int nAutoReloadDelayTicks = 20 * 900; private int nRegionFinderGranularity = 1000; public final int CurrentVersion = 3; + public static final String instantiator = "?"; public static final String separator = "."; public static final String separatorRegExp = "\\."; - public static final String instantiator = "?"; - public static final String instantiatorRegExp = "\\?"; public Settings(final MainPluginClass plugin) { this.plugin = plugin; diff --git a/src/main/resources/sqlt/Cleanup_tables.sqlt b/src/main/resources/sqlt/Cleanup_tables.sqlt index 7e0319f..fe1d417 100644 --- a/src/main/resources/sqlt/Cleanup_tables.sqlt +++ b/src/main/resources/sqlt/Cleanup_tables.sqlt @@ -1,9 +1,9 @@ DELETE FROM `{DATABASE}`.`{PREFIX}entities` WHERE - (`prefix` = '' OR `prefix` IS NULL) - AND - (`suffix` = '' OR `suffix` IS NULL); + ((`prefix` = '' OR `prefix` IS NULL) AND (`suffix` = '' OR `suffix` IS NULL)) + OR + `lifetime` < CURRENT_TIMESTAMP; DELETE FROM `{DATABASE}`.`{PREFIX}permissions` @@ -18,4 +18,4 @@ WHERE DELETE FROM `{DATABASE}`.`{PREFIX}ladders` WHERE - `climber_type` = b'1' AND `rank` = 0; \ No newline at end of file + `climber_type` = b'1' AND `rank` = 0; diff --git a/src/main/resources/sqlt/Initialize_main_v1.sqlt b/src/main/resources/sqlt/Initialize_main_v1.sqlt index 4cbe55e..68c328e 100644 --- a/src/main/resources/sqlt/Initialize_main_v1.sqlt +++ b/src/main/resources/sqlt/Initialize_main_v1.sqlt @@ -4,6 +4,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}entities` ( `entity_type` TINYINT(1) NOT NULL, `prefix` VARCHAR(48) DEFAULT NULL, `suffix` VARCHAR(48) DEFAULT NULL, + `lifetime` TIMESTAMP NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `entity_UNIQUE` (`entity`, `entity_type`) @@ -61,7 +62,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}servers` ( UNIQUE KEY `serverid_UNIQUE` (`serverid`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; -/* Merged updates 0.1a -> 0.5.9b -> 0.6b -> 0.7.5 */ +/* Merged updates 0.1a -> 0.5.9b -> 0.6b -> 0.8.15b */ ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}entities` COLLATE 'utf8_general_ci'; @@ -86,4 +87,7 @@ ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}ladders` COLLATE 'utf8_general_ci'; ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers` - COLLATE 'utf8_general_ci'; \ No newline at end of file + COLLATE 'utf8_general_ci'; + +ALTER TABLE `{DATABASE}`.`{PREFIX}entities` + ADD COLUMN `lifetime` TIMESTAMP NULL DEFAULT NULL AFTER `suffix`;