Browse Source

DatabaseContents filtering by serverId.

master
Stanislav Usenkov 10 years ago
parent
commit
7ff28ff757
  1. 22
      src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java
  2. 1
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
  3. 1
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  4. 8
      src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
  5. 10
      src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java
  6. 13
      src/main/java/ru/simsonic/rscPermissions/Phrases.java

22
src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java

@ -11,7 +11,7 @@ public class DatabaseContents
public RowEntity entities[]; public RowEntity entities[];
public RowPermission permissions[]; public RowPermission permissions[];
public RowInheritance inheritance[]; public RowInheritance inheritance[];
public void normalize() public DatabaseContents normalize()
{ {
if(entities == null) if(entities == null)
entities = new RowEntity[] {}; entities = new RowEntity[] {};
@ -83,5 +83,25 @@ public class DatabaseContents
entities = le.toArray(new RowEntity[le.size()]); entities = le.toArray(new RowEntity[le.size()]);
permissions = lp.toArray(new RowPermission[lp.size()]); permissions = lp.toArray(new RowPermission[lp.size()]);
inheritance = li.toArray(new RowInheritance[li.size()]); inheritance = li.toArray(new RowInheritance[li.size()]);
return this;
}
public DatabaseContents filterServerId(String serverId)
{
if(permissions == null)
permissions = new RowPermission[] {};
if(inheritance == null)
inheritance = new RowInheritance[] {};
final ArrayList<RowPermission> lp = new ArrayList<>();
final ArrayList<RowInheritance> li = new ArrayList<>();
// Permissions
for(RowPermission row : permissions)
if(row.destination.isServerIdApplicable(serverId))
lp.add(row);
for(RowInheritance row : inheritance)
if(row.destination.isServerIdApplicable(serverId))
li.add(row);
permissions = lp.toArray(new RowPermission[lp.size()]);
inheritance = li.toArray(new RowInheritance[li.size()]);
return this;
} }
} }

1
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java

@ -36,6 +36,7 @@ public class BukkitCommands
contents.normalize(); contents.normalize();
rscp.fileCache.cleanup(); rscp.fileCache.cleanup();
rscp.fileCache.saveContents(contents); rscp.fileCache.saveContents(contents);
contents.filterServerId(rscp.getServer().getServerId());
rscp.internalCache.fill(contents); rscp.internalCache.fill(contents);
final Runnable syncTask = new Runnable() final Runnable syncTask = new Runnable()
{ {

1
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -57,6 +57,7 @@ public final class BukkitPluginMain extends JavaPlugin
// Restore temporary cached data from json files // Restore temporary cached data from json files
internalCache.setDefaultGroup(settings.getDefaultGroup()); internalCache.setDefaultGroup(settings.getDefaultGroup());
final DatabaseContents contents = fileCache.retrieveContents(); final DatabaseContents contents = fileCache.retrieveContents();
contents.filterServerId(getServer().getServerId());
internalCache.fill(contents); internalCache.fill(contents);
consoleLog.log(Level.INFO, consoleLog.log(Level.INFO,
"[rscp] Loaded {0} entity, {1} permission and {2} inheritance rows from local cache.", new Integer[] "[rscp] Loaded {0} entity, {1} permission and {2} inheritance rows from local cache.", new Integer[]

8
src/main/java/ru/simsonic/rscPermissions/IndependentMain.java

@ -24,11 +24,17 @@ public class IndependentMain
"rscp_"); "rscp_");
if(remoteDb.connect()) if(remoteDb.connect())
{ {
System.out.println("Retrieving permissions from database into json files.");
final DatabaseContents contents = remoteDb.retrieveContents(); final DatabaseContents contents = remoteDb.retrieveContents();
contents.normalize(); contents.normalize();
localJsn.cleanup(); localJsn.cleanup();
localJsn.saveContents(contents); localJsn.saveContents(contents);
} }
intCache.fill(localJsn.retrieveContents()); System.out.println("Loading permissions from json files.");
final DatabaseContents contents = localJsn.retrieveContents();
System.out.println("Filter and calculating permission tree.");
contents.filterServerId("localtest");
intCache.fill(contents);
System.out.println("Done.");
} }
} }

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

@ -37,10 +37,12 @@ public class InternalCache
return (other.node != null && node != null) ? other.node.compareTo(node) : 0; return (other.node != null && node != null) ? other.node.compareTo(node) : 0;
} }
} }
final HashMap<String, InheritanceLeaf> entityTrees = new HashMap<>(); private final HashMap<String, InheritanceLeaf> entityTrees = new HashMap<>();
// Права по сущностям private final HashMap<String, RowPermission[]> groupPermissions = new HashMap<>();
final HashMap<String, RowPermission[]> groupPermissions = new HashMap<>(); private final HashMap<String, RowPermission[]> playerPermissions = new HashMap<>();
final HashMap<String, RowPermission[]> playerPermissions = new HashMap<>(); private void buildPermissions()
{
}
private void buildEntityTree() private void buildEntityTree()
{ {
final HashSet<String> entitiesWhichInherits = new HashSet<>(); final HashSet<String> entitiesWhichInherits = new HashSet<>();

13
src/main/java/ru/simsonic/rscPermissions/Phrases.java

@ -1,8 +1,10 @@
package ru.simsonic.rscPermissions; package ru.simsonic.rscPermissions;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.util.logging.Level; import java.util.logging.Level;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
@ -12,7 +14,8 @@ public enum Phrases
PLUGIN_DISABLED ("generic.disabled"), PLUGIN_DISABLED ("generic.disabled"),
PLUGIN_METRICS ("generic.metrics"), PLUGIN_METRICS ("generic.metrics"),
PLUGIN_RELOADED ("generic.reloaded"), PLUGIN_RELOADED ("generic.reloaded"),
FETCHED ("generic.fetched"); FETCHED ("generic.fetched"),
;
private final String node; private final String node;
private String phrase; private String phrase;
private Phrases(String node) private Phrases(String node)
@ -38,11 +41,9 @@ public enum Phrases
final File langFile = new File(plugin.getDataFolder(), langName + ".yml"); final File langFile = new File(plugin.getDataFolder(), langName + ".yml");
if(!langFile.isFile()) if(!langFile.isFile())
{ {
final YamlConfiguration langConfig = YamlConfiguration.loadConfiguration(langFile); final FileChannel fileChannel = new FileOutputStream(langFile).getChannel();
final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml"); final InputStream langStream = BukkitPluginMain.class.getResourceAsStream("/languages/" + langName + ".yml");
YamlConfiguration langSource = YamlConfiguration.loadConfiguration(new InputStreamReader(langStream)); fileChannel.transferFrom(Channels.newChannel(langStream), 0, Long.MAX_VALUE);
langConfig.setDefaults(langSource);
langConfig.save(langFile);
} }
} catch(IOException ex) { } catch(IOException ex) {
BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}", langName); BukkitPluginMain.consoleLog.log(Level.WARNING, "Cannot extract language: {0}", langName);

Loading…
Cancel
Save