From bdfe5c278015014a5456e4e7b19579c69e5d7262 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Thu, 7 Jul 2016 13:29:58 +0600 Subject: [PATCH] Move some basic code out of InternalCache.java into InternalStorage.java --- .../rscPermissions/Engine/InternalCache.java | 153 +---------------- .../Engine/InternalStorage.java | 161 ++++++++++++++++++ 2 files changed, 164 insertions(+), 150 deletions(-) create mode 100644 src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index f42bc3c..0f6ab99 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -7,27 +7,18 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; -import java.util.Map.Entry; import java.util.Set; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscPermissions.API.EntityType; -import ru.simsonic.rscPermissions.API.PlayerType; import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowInheritance; import ru.simsonic.rscPermissions.API.RowPermission; import ru.simsonic.rscPermissions.API.Settings; -import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; -public class InternalCache +public class InternalCache extends InternalStorage { - private final HashMap entities_g = new HashMap<>(); - private final HashMap entities_u = new HashMap<>(); - private final RowInheritance defaultInheritance = new RowInheritance(); - private boolean alwaysInheritDefaultGroup = false; - private boolean groupsInheritParentPrefixes = true; - private RowEntity implicit_g; - private RowEntity implicit_u; - private boolean freshRemoteData; + private boolean alwaysInheritDefaultGroup = false; + private boolean groupsInheritParentPrefixes = true; public void setDefaultGroup(String defaultGroup, boolean alwaysInheritDefaultGroup, boolean groupsInheritParentPrefixes) { defaultInheritance.parent = defaultGroup; @@ -35,137 +26,6 @@ public class InternalCache this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup; this.groupsInheritParentPrefixes = groupsInheritParentPrefixes; } - public synchronized void fill(DatabaseContents contents) - { - clear(); - this.freshRemoteData = contents.cached; - importEntities (contents); - importPermissions(contents.permissions); - importInheritance(contents.inheritance); - implicit_g = entities_g.get(""); - implicit_u = entities_u.get(""); - } - public boolean isFreshData() - { - return freshRemoteData; - } - private void importEntities(DatabaseContents contents) - { - final HashSet names_u = new HashSet<>(); - final HashSet names_g = new HashSet<>(); - for(RowEntity row : contents.entities) - if(row.entityType == EntityType.GROUP) - { - names_g.add(row.entity); - entities_g.put(row.entity.toLowerCase(), row); - } else { - names_u.add(row.entity); - entities_u.put(row.entity, row); - } - for(RowPermission row : contents.permissions) - if(row.entityType == EntityType.GROUP) - names_g.add(row.entity); - else - names_u.add(row.entity); - for(RowInheritance row : contents.inheritance) - { - names_g.add(row.parent); - if(row.childType == EntityType.GROUP) - names_g.add(row.entity); - else - names_u.add(row.entity); - } - names_g.add(defaultInheritance.parent); - for(String name : names_g) - { - final String groupInternalName = name.toLowerCase(); - if(!entities_g.containsKey(groupInternalName)) - { - final RowEntity dummy = new RowEntity(); - dummy.entity = name; - dummy.entityType = EntityType.GROUP; - entities_g.put(groupInternalName, dummy); - } - } - for(String name : names_u) - if(!entities_u.containsKey(name)) - { - final RowEntity dummy = new RowEntity(); - dummy.entity = name; - dummy.entityType = EntityType.PLAYER; - entities_u.put(name, dummy); - } - for(RowEntity row : entities_u.values()) - row.playerType = PlayerType.scanPlayerEntity(row.entity); - } - private void importPermissions(RowPermission[] rows) - { - final ArrayList permissions_p2g = new ArrayList<>(); - final ArrayList permissions_p2u = new ArrayList<>(); - for(RowPermission row : rows) - if(row.entityType == EntityType.GROUP) - { - row.entityObject = entities_g.get(row.entity.toLowerCase()); - permissions_p2g.add(row); - } else { - row.entityObject = entities_u.get(row.entity); - permissions_p2u.add(row); - } - for(String entry : entities_g.keySet()) - { - final ArrayList permissions = new ArrayList<>(); - for(RowPermission row : permissions_p2g) - if(row.entity.toLowerCase().equals(entry)) - permissions.add(row); - entities_g.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]); - } - for(String entry : entities_u.keySet()) - { - final ArrayList permissions = new ArrayList<>(); - for(RowPermission row : permissions_p2u) - if(row.entity.equals(entry)) - permissions.add(row); - entities_u.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]); - } - } - private void importInheritance(RowInheritance[] rows) - { - final ArrayList inheritance_g2g = new ArrayList<>(); - final ArrayList inheritance_g2u = new ArrayList<>(); - for(RowInheritance row : rows) - if(row.childType == EntityType.GROUP) - { - row.entityChild = entities_g.get(row.entity.toLowerCase()); - row.entityParent = entities_g.get(row.parent.toLowerCase()); - inheritance_g2g.add(row); - } else { - row.entityChild = entities_u.get(row.entity); - row.entityParent = entities_g.get(row.parent.toLowerCase()); - inheritance_g2u.add(row); - } - for(Entry entry : entities_g.entrySet()) - { - final ArrayList inheritances = new ArrayList<>(); - final String name = entry.getKey(); - for(RowInheritance row : inheritance_g2g) - if(row.entity.toLowerCase().equals(name)) - inheritances.add(row); - Collections.sort(inheritances); - entry.getValue().inheritance = inheritances.toArray(new RowInheritance[inheritances.size()]); - } - for(Entry entry : entities_u.entrySet()) - { - final ArrayList inheritances = new ArrayList<>(); - final String name = entry.getKey(); - for(RowInheritance row : inheritance_g2u) - if(row.entity.equals(name)) - inheritances.add(row); - Collections.sort(inheritances); - entry.getValue().inheritance = inheritances.toArray(new RowInheritance[inheritances.size()]); - } - defaultInheritance.childType = EntityType.PLAYER; - defaultInheritance.entityParent = entities_g.get(defaultInheritance.parent.toLowerCase()); - } public synchronized ResolutionResult resolvePlayer(String player) { return resolvePlayer(new String[] { player }); @@ -336,11 +196,4 @@ public class InternalCache result.add(row.entity); return result; } - public synchronized void clear() - { - entities_g.clear(); - entities_u.clear(); - implicit_g = null; - implicit_u = null; - } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java new file mode 100644 index 0000000..7049bd3 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java @@ -0,0 +1,161 @@ +package ru.simsonic.rscPermissions.Engine; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import ru.simsonic.rscPermissions.API.EntityType; +import ru.simsonic.rscPermissions.API.PlayerType; +import ru.simsonic.rscPermissions.API.RowEntity; +import ru.simsonic.rscPermissions.API.RowInheritance; +import ru.simsonic.rscPermissions.API.RowPermission; +import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents; + +class InternalStorage +{ + protected final HashMap entities_g = new HashMap<>(); + protected final HashMap entities_u = new HashMap<>(); + protected final RowInheritance defaultInheritance = new RowInheritance(); + protected RowEntity implicit_g; + protected RowEntity implicit_u; + private boolean freshRemoteData; + public synchronized void fill(DatabaseContents contents) + { + clear(); + this.freshRemoteData = contents.cached; + importEntities (contents); + importPermissions(contents.permissions); + importInheritance(contents.inheritance); + implicit_g = entities_g.get(""); + implicit_u = entities_u.get(""); + } + public boolean isFreshData() + { + return freshRemoteData; + } + private void importEntities(DatabaseContents contents) + { + final HashSet names_u = new HashSet<>(); + final HashSet names_g = new HashSet<>(); + for(RowEntity row : contents.entities) + if(row.entityType == EntityType.GROUP) + { + names_g.add(row.entity); + entities_g.put(row.entity.toLowerCase(), row); + } else { + names_u.add(row.entity); + entities_u.put(row.entity, row); + } + for(RowPermission row : contents.permissions) + if(row.entityType == EntityType.GROUP) + names_g.add(row.entity); + else + names_u.add(row.entity); + for(RowInheritance row : contents.inheritance) + { + names_g.add(row.parent); + if(row.childType == EntityType.GROUP) + names_g.add(row.entity); + else + names_u.add(row.entity); + } + names_g.add(defaultInheritance.parent); + for(String name : names_g) + { + final String groupInternalName = name.toLowerCase(); + if(!entities_g.containsKey(groupInternalName)) + { + final RowEntity dummy = new RowEntity(); + dummy.entity = name; + dummy.entityType = EntityType.GROUP; + entities_g.put(groupInternalName, dummy); + } + } + for(String name : names_u) + if(!entities_u.containsKey(name)) + { + final RowEntity dummy = new RowEntity(); + dummy.entity = name; + dummy.entityType = EntityType.PLAYER; + entities_u.put(name, dummy); + } + for(RowEntity row : entities_u.values()) + row.playerType = PlayerType.scanPlayerEntity(row.entity); + } + private void importPermissions(RowPermission[] rows) + { + final ArrayList permissions_p2g = new ArrayList<>(); + final ArrayList permissions_p2u = new ArrayList<>(); + for(RowPermission row : rows) + if(row.entityType == EntityType.GROUP) + { + row.entityObject = entities_g.get(row.entity.toLowerCase()); + permissions_p2g.add(row); + } else { + row.entityObject = entities_u.get(row.entity); + permissions_p2u.add(row); + } + for(String entry : entities_g.keySet()) + { + final ArrayList permissions = new ArrayList<>(); + for(RowPermission row : permissions_p2g) + if(row.entity.toLowerCase().equals(entry)) + permissions.add(row); + entities_g.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]); + } + for(String entry : entities_u.keySet()) + { + final ArrayList permissions = new ArrayList<>(); + for(RowPermission row : permissions_p2u) + if(row.entity.equals(entry)) + permissions.add(row); + entities_u.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]); + } + } + private void importInheritance(RowInheritance[] rows) + { + final ArrayList inheritance_g2g = new ArrayList<>(); + final ArrayList inheritance_g2u = new ArrayList<>(); + for(RowInheritance row : rows) + if(row.childType == EntityType.GROUP) + { + row.entityChild = entities_g.get(row.entity.toLowerCase()); + row.entityParent = entities_g.get(row.parent.toLowerCase()); + inheritance_g2g.add(row); + } else { + row.entityChild = entities_u.get(row.entity); + row.entityParent = entities_g.get(row.parent.toLowerCase()); + inheritance_g2u.add(row); + } + for(Map.Entry entry : entities_g.entrySet()) + { + final ArrayList inheritances = new ArrayList<>(); + final String name = entry.getKey(); + for(RowInheritance row : inheritance_g2g) + if(row.entity.toLowerCase().equals(name)) + inheritances.add(row); + Collections.sort(inheritances); + entry.getValue().inheritance = inheritances.toArray(new RowInheritance[inheritances.size()]); + } + for(Map.Entry entry : entities_u.entrySet()) + { + final ArrayList inheritances = new ArrayList<>(); + final String name = entry.getKey(); + for(RowInheritance row : inheritance_g2u) + if(row.entity.equals(name)) + inheritances.add(row); + Collections.sort(inheritances); + entry.getValue().inheritance = inheritances.toArray(new RowInheritance[inheritances.size()]); + } + defaultInheritance.childType = EntityType.PLAYER; + defaultInheritance.entityParent = entities_g.get(defaultInheritance.parent.toLowerCase()); + } + public synchronized void clear() + { + entities_g.clear(); + entities_u.clear(); + implicit_g = null; + implicit_u = null; + } +}