From bd89f3f5f1cdcc50806d2f629f583f4b57f8357c Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Fri, 13 Feb 2015 21:27:51 +0600 Subject: [PATCH] It's not working yet. Just end-of-day commit. --- .../InternalCache/InternalCache.java | 169 +++++++++--------- 1 file changed, 82 insertions(+), 87 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java index c812648..1d2f900 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java @@ -12,18 +12,18 @@ import ru.simsonic.rscPermissions.Backends.DatabaseContents; public class InternalCache { - private final HashMap entities_g = new HashMap<>(); - private final HashMap entities_u = new HashMap<>(); - private final ArrayList permissions_p2g = new ArrayList<>(); - private final ArrayList permissions_p2u = new ArrayList<>(); - private final ArrayList inheritance_g2g = new ArrayList<>(); - private final ArrayList inheritance_g2u = new ArrayList<>(); private final RowInheritance defaultInheritance = new RowInheritance(); public void setDefaultGroup(String defaultGroup) { defaultInheritance.parent = defaultGroup; defaultInheritance.deriveInstance(); } + private final HashMap entities_g = new HashMap<>(); + private final HashMap entities_u = new HashMap<>(); + private final ArrayList permissions_p2g = new ArrayList<>(); + private final ArrayList permissions_p2u = new ArrayList<>(); + private final ArrayList inheritance_g2g = new ArrayList<>(); + private final ArrayList inheritance_g2u = new ArrayList<>(); public static class InheritanceLeaf implements Comparable { public RowInheritance node; @@ -37,13 +37,84 @@ public class InternalCache return (other.node != null && node != null) ? other.node.compareTo(node) : 0; } } - private final HashMap entityTrees = new HashMap<>(); - private final HashMap groupPermissions = new HashMap<>(); - private final HashMap playerPermissions = new HashMap<>(); - private void buildPermissions() + private final HashMap entityTrees = new HashMap<>(); + private final HashMap permissionsTreesG = new HashMap<>(); + private final HashMap permissionsTreesU = new HashMap<>(); + private final HashMap inheritanceTreesG = new HashMap<>(); + private final HashMap inheritanceTreesU = new HashMap<>(); + public synchronized void fill(DatabaseContents contents) + { + clear(); + if(contents.entities != null) + importEntities(contents.entities); + if(contents.permissions != null) + importPermissions(contents.permissions); + if(contents.inheritance != null) + importInheritance(contents.inheritance); + buildInheritanceForest(); + } + public synchronized ResolutionResult resolvePlayer(String player, String serverId) + { + return resolvePlayer(new String[] { player }, serverId); + } + public synchronized ResolutionResult resolvePlayer(String[] player, String serverId) + { + final ResolutionParams params = new ResolutionParams(); + params.applicableIdentifiers = player; + params.destRegions = new String[] {}; + // params.destWorld = ""; + params.destServerId = serverId; + // params.expirience = 0; + return resolvePlayer(params); + } + public synchronized ResolutionResult resolvePlayer(ResolutionParams params) + { + final ArrayList applicableBranches = new ArrayList<>(); + // Grab all inheritance rows applicable to this player + for(String identifier : params.applicableIdentifiers) + for(String tree : entityTrees.keySet()) + if(tree.equals(identifier)) + applicableBranches.add(entityTrees.get(tree)); + Collections.sort(applicableBranches); + // Begin resolution + final ArrayList intermediateResults = new ArrayList<>(); + for(InheritanceLeaf branch : applicableBranches) + if(isInheritanceApplicable(params, branch.node, "")) + intermediateResults.add(resolveBranch(params, branch, "")); + final ResolutionResult result = processResultColumn(params, intermediateResults, ""); + intermediateResults.clear(); + return result; + } + private void importEntities(RowEntity[] rows) + { + for(RowEntity row : rows) + { + if(row.entityType == EntityType.group) + entities_g.put(row.entity.toLowerCase(), row); + else + entities_u.put(row.entity.toLowerCase(), row); + } + } + private void importPermissions(RowPermission[] rows) + { + for(RowPermission row : rows) + { + if(row.entityType == EntityType.group) + permissions_p2g.add(row); + else + permissions_p2u.add(row); + } + } + private void importInheritance(RowInheritance[] rows) { + for(RowInheritance row : rows) + if(row.childType == EntityType.group) + inheritance_g2g.add(row); + else + inheritance_g2u.add(row); } - private void buildEntityTree() + // FROM HERE I SHOULD MAKE IT WORKING + private void buildInheritanceForest() { final HashSet entitiesWhichInherits = new HashSet<>(); for(RowInheritance row : inheritance_g2u) @@ -81,38 +152,6 @@ public class InternalCache result.subleafs = subleafs.toArray(new InheritanceLeaf[subleafs.size()]); return result; } - public synchronized ResolutionResult resolvePlayer(String player, String serverId) - { - return resolvePlayer(new String[] { player }, serverId); - } - public synchronized ResolutionResult resolvePlayer(String[] player, String serverId) - { - final ResolutionParams params = new ResolutionParams(); - params.applicableIdentifiers = player; - params.destRegions = new String[] {}; - // params.destWorld = ""; - params.destServerId = serverId; - // params.expirience = 0; - return resolvePlayer(params); - } - public synchronized ResolutionResult resolvePlayer(ResolutionParams params) - { - final ArrayList applicableBranches = new ArrayList<>(); - // Grab all inheritance rows applicable to this player - for(String identifier : params.applicableIdentifiers) - for(String tree : entityTrees.keySet()) - if(tree.equals(identifier)) - applicableBranches.add(entityTrees.get(tree)); - Collections.sort(applicableBranches); - // Begin resolution - final ArrayList intermediateResults = new ArrayList<>(); - for(InheritanceLeaf branch : applicableBranches) - if(isInheritanceApplicable(params, branch.node, "")) - intermediateResults.add(resolveBranch(params, branch, "")); - final ResolutionResult result = processResultColumn(params, intermediateResults, ""); - intermediateResults.clear(); - return result; - } private ResolutionResult resolveBranch(ResolutionParams params, InheritanceLeaf branch, String instantiator) { final ArrayList intermediateResults = new ArrayList<>(); @@ -174,50 +213,6 @@ public class InternalCache ? row.destination.isRegionApplicable(params.destRegions, instantiator) : false; } - public synchronized void fill(DatabaseContents contents) - { - importEntities(contents.entities); - importPermissions(contents.permissions); - importInheritance(contents.inheritance); - buildEntityTree(); - } - private void importEntities(RowEntity[] rows) - { - entities_g.clear(); - entities_u.clear(); - if(rows != null) - for(RowEntity row : rows) - { - if(row.entityType == EntityType.group) - entities_g.put(row.entity.toLowerCase(), row); - else - entities_u.put(row.entity.toLowerCase(), row); - } - } - private void importPermissions(RowPermission[] rows) - { - permissions_p2g.clear(); - permissions_p2u.clear(); - if(rows != null) - for(RowPermission row : rows) - { - if(row.entityType == EntityType.group) - permissions_p2g.add(row); - else - permissions_p2u.add(row); - } - } - private void importInheritance(RowInheritance[] rows) - { - inheritance_g2g.clear(); - inheritance_g2u.clear(); - if(rows != null) - for(RowInheritance row : rows) - if(row.childType == EntityType.group) - inheritance_g2g.add(row); - else - inheritance_g2u.add(row); - } public synchronized void clear() { entities_g.clear();