Browse Source

Day finalization commit.

master
Stanislav 11 years ago
parent
commit
c2f05dc2ec
  1. 1
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java
  2. 43
      src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java
  3. 2
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java
  4. 10
      src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java
  5. 6
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java
  6. 3
      src/main/java/ru/simsonic/rscPermissions/Settings.java
  7. 8
      src/main/resources/sqlt/Cleanup_tables.sqlt
  8. 8
      src/main/resources/sqlt/Initialize_main_v1.sqlt

1
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.entityType = EntityType.byValue(rs.getInt("entity_type"));
row.prefix = rs.getString("prefix"); row.prefix = rs.getString("prefix");
row.suffix = rs.getString("suffix"); row.suffix = rs.getString("suffix");
row.lifetime = rs.getTimestamp("lifetime");
result.add(row); result.add(row);
} }
rs.close(); rs.close();

43
src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java

@ -44,20 +44,20 @@ public class Destination
} }
private boolean IsWorldApplicable(World world, String instantiator) 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; return true;
final String instantiated = (instantiator != null && !"".equals(instantiator)) ? final String instantiated = (instantiator != null && !instantiator.isEmpty())
this.world.replaceAll(Settings.instantiatorRegExp, instantiator) : ? this.world.replace(Settings.instantiator, instantiator)
this.world; : this.world;
return wildcardTesting(world.getName(), instantiated); return wildcardTesting(world.getName(), instantiated);
} }
private boolean IsRegionApplicable(Set<String> regions, String instantiator) private boolean IsRegionApplicable(Set<String> regions, String instantiator)
{ {
if(this.region == null || "".equals(this.region) || "*".equals(this.region)) if(this.region == null || "".equals(this.region) || "*".equals(this.region))
return true; return true;
final String instantiated = (instantiator != null && !"".equals(instantiator)) ? final String instantiated = (instantiator != null && !"".equals(instantiator))
this.region.replaceAll(Settings.instantiatorRegExp, instantiator) : ? this.region.replace(Settings.instantiator, instantiator)
this.region; : this.region;
for(String regionId : regions) for(String regionId : regions)
if(wildcardTesting(regionId, instantiated)) if(wildcardTesting(regionId, instantiated))
return true; return true;
@ -73,32 +73,31 @@ public class Destination
"<wildcard>" + testing.toLowerCase() + "</wildcard>", "<wildcard>" + testing.toLowerCase() + "</wildcard>",
"<wildcard>" + pattern.toLowerCase() + "</wildcard>"); "<wildcard>" + pattern.toLowerCase() + "</wildcard>");
} }
private static final String destinationSplitting = "\\s*[;,\\r\\n]+\\s*";
public static Destination[] ParseDestinations(String destinations) public static Destination[] ParseDestinations(String destinations)
{ {
if(destinations == null) if(destinations == null || destinations.isEmpty())
return new Destination[] { new Destination() }; return new Destination[] { new Destination() };
if(destinations.isEmpty()) final String[] destinationsList = destinations.split(destinationSplitting);
return new Destination[] { new Destination() };
final String[] destinationsList = destinations.split("\\s*(?:;|,|\\r|\\n)+\\s*");
final ArrayList<Destination> result = new ArrayList(destinationsList.length); final ArrayList<Destination> result = new ArrayList(destinationsList.length);
for(int nDestination = 0; nDestination < destinationsList.length; nDestination += 1) for(String inList : destinationsList)
if(destinationsList[nDestination].isEmpty() == false) if(inList != null && !inList.isEmpty())
result.add(ParseDestination(destinationsList[nDestination])); result.add(ParseDestination(inList));
return result.toArray(new Destination[result.size()]); return result.toArray(new Destination[result.size()]);
} }
private static final Pattern patternDestination = Pattern.compile( private static final Pattern patternDestination = Pattern.compile(
"<destination>" + "(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?" + "</destination>"); "^(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?$");
private static Destination ParseDestination(String destination) private static Destination ParseDestination(String destination)
{ {
Matcher match = patternDestination.matcher("<destination>" + destination + "</destination>"); final Matcher match = patternDestination.matcher(destination);
if(match.find()) if(match.find())
{ {
final String group1 = match.group(1); final String groupR = match.group(1);
final String group2 = match.group(2); final String groupW = match.group(2);
final String group3 = match.group(3); final String groupS = match.group(3);
final String region = (group1 == null || "".equals(group1)) ? "*" : group1; final String region = (groupR == null || "".equals(groupR)) ? "*" : groupR;
final String world = (group2 == null || "".equals(group2)) ? "*" : group2; final String world = (groupW == null || "".equals(groupW)) ? "*" : groupW;
final String serverId = (group3 == null || "".equals(group3)) ? "*" : group3; 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();

2
src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions.DataTypes; package ru.simsonic.rscPermissions.DataTypes;
import java.sql.Timestamp;
public class RowEntity extends AbstractRow public class RowEntity extends AbstractRow
{ {
@ -6,6 +7,7 @@ public class RowEntity extends AbstractRow
public EntityType entityType; public EntityType entityType;
public String prefix; public String prefix;
public String suffix; public String suffix;
public Timestamp lifetime;
@Override @Override
public Table getTable() public Table getTable()
{ {

10
src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java

@ -136,7 +136,7 @@ public class BrandNewCache implements AbstractPermissionsCache
params.destRegions = new String[] {}; params.destRegions = new String[] {};
params.destWorld = player.getLocation().getWorld().getName(); params.destWorld = player.getLocation().getWorld().getName();
params.destServerId = plugin.getServer().getServerId(); params.destServerId = plugin.getServer().getServerId();
// TO DO resolvePlayer(params);
} }
public void resolvePlayer(String player) public void resolvePlayer(String player)
{ {
@ -145,16 +145,16 @@ public class BrandNewCache implements AbstractPermissionsCache
params.destRegions = new String[] {}; params.destRegions = new String[] {};
params.destWorld = ""; params.destWorld = "";
params.destServerId = plugin.getServer().getServerId(); params.destServerId = plugin.getServer().getServerId();
// TO DO resolvePlayer(params);
} }
private void resolvePlayer(ResolutionParams params) private void resolvePlayer(ResolutionParams params)
{ {
final ArrayList<InheritanceLeaf> leafs = new ArrayList<>(); final ArrayList<InheritanceLeaf> applicableBranches = new ArrayList<>();
for(String identifier : params.applicableIdentifiers) for(String identifier : params.applicableIdentifiers)
for(String tree : entityTrees.keySet()) for(String tree : entityTrees.keySet())
if(tree.equals(identifier)) if(tree.equals(identifier))
leafs.add(entityTrees.get(tree)); applicableBranches.add(entityTrees.get(tree));
Collections.sort(leafs); Collections.sort(applicableBranches);
final InheritanceLeaf root = new InheritanceLeaf(); final InheritanceLeaf root = new InheritanceLeaf();
} }
public void recoursion(ResolutionParams params, InheritanceLeaf branch) public void recoursion(ResolutionParams params, InheritanceLeaf branch)

6
src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheTree.java

@ -100,7 +100,7 @@ public class LocalCacheTree extends LocalCacheData
String permission = row.permission; String permission = row.permission;
// Additional processing // Additional processing
if(permission.contains(Settings.instantiator) && (leaf.instance != null)) 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); permissions.put(permission, row.value);
} }
RowEntity entity = entities_g.get(leaf.group.toLowerCase()); RowEntity entity = entities_g.get(leaf.group.toLowerCase());
@ -110,8 +110,8 @@ public class LocalCacheTree extends LocalCacheData
prefix = entity.prefix.replace("%", prefix); prefix = entity.prefix.replace("%", prefix);
if(entity.suffix != null && !"".equals(entity.suffix)) if(entity.suffix != null && !"".equals(entity.suffix))
suffix = entity.suffix.replace("%", suffix); suffix = entity.suffix.replace("%", suffix);
prefix = prefix.replaceAll(Settings.instantiatorRegExp, leaf.instance); prefix = prefix.replace(Settings.instantiator, leaf.instance);
suffix = suffix.replaceAll(Settings.instantiatorRegExp, leaf.instance); suffix = suffix.replace(Settings.instantiator, leaf.instance);
} }
} }
// User permissions // User permissions

3
src/main/java/ru/simsonic/rscPermissions/Settings.java

@ -21,10 +21,9 @@ public class Settings
private int nAutoReloadDelayTicks = 20 * 900; private int nAutoReloadDelayTicks = 20 * 900;
private int nRegionFinderGranularity = 1000; private int nRegionFinderGranularity = 1000;
public final int CurrentVersion = 3; public final int CurrentVersion = 3;
public static final String instantiator = "?";
public static final String separator = "."; public static final String separator = ".";
public static final String separatorRegExp = "\\."; public static final String separatorRegExp = "\\.";
public static final String instantiator = "?";
public static final String instantiatorRegExp = "\\?";
public Settings(final MainPluginClass plugin) public Settings(final MainPluginClass plugin)
{ {
this.plugin = plugin; this.plugin = plugin;

8
src/main/resources/sqlt/Cleanup_tables.sqlt

@ -1,9 +1,9 @@
DELETE FROM DELETE FROM
`{DATABASE}`.`{PREFIX}entities` `{DATABASE}`.`{PREFIX}entities`
WHERE WHERE
(`prefix` = '' OR `prefix` IS NULL) ((`prefix` = '' OR `prefix` IS NULL) AND (`suffix` = '' OR `suffix` IS NULL))
AND OR
(`suffix` = '' OR `suffix` IS NULL); `lifetime` < CURRENT_TIMESTAMP;
DELETE FROM DELETE FROM
`{DATABASE}`.`{PREFIX}permissions` `{DATABASE}`.`{PREFIX}permissions`
@ -18,4 +18,4 @@ WHERE
DELETE FROM DELETE FROM
`{DATABASE}`.`{PREFIX}ladders` `{DATABASE}`.`{PREFIX}ladders`
WHERE WHERE
`climber_type` = b'1' AND `rank` = 0; `climber_type` = b'1' AND `rank` = 0;

8
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, `entity_type` TINYINT(1) NOT NULL,
`prefix` VARCHAR(48) DEFAULT NULL, `prefix` VARCHAR(48) DEFAULT NULL,
`suffix` VARCHAR(48) DEFAULT NULL, `suffix` VARCHAR(48) DEFAULT NULL,
`lifetime` TIMESTAMP NULL DEFAULT NULL,
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`)
@ -61,7 +62,7 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}servers` (
UNIQUE KEY `serverid_UNIQUE` (`serverid`) UNIQUE KEY `serverid_UNIQUE` (`serverid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; ) 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` ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}entities`
COLLATE 'utf8_general_ci'; COLLATE 'utf8_general_ci';
@ -86,4 +87,7 @@ ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}ladders`
COLLATE 'utf8_general_ci'; COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers` ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers`
COLLATE 'utf8_general_ci'; COLLATE 'utf8_general_ci';
ALTER TABLE `{DATABASE}`.`{PREFIX}entities`
ADD COLUMN `lifetime` TIMESTAMP NULL DEFAULT NULL AFTER `suffix`;

Loading…
Cancel
Save