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. 18
      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 RowPermission permissions[];
public RowInheritance inheritance[];
public void normalize()
public DatabaseContents normalize()
{
if(entities == null)
entities = new RowEntity[] {};
@ -83,5 +83,25 @@ public class DatabaseContents
entities = le.toArray(new RowEntity[le.size()]);
permissions = lp.toArray(new RowPermission[lp.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();
rscp.fileCache.cleanup();
rscp.fileCache.saveContents(contents);
contents.filterServerId(rscp.getServer().getServerId());
rscp.internalCache.fill(contents);
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
internalCache.setDefaultGroup(settings.getDefaultGroup());
final DatabaseContents contents = fileCache.retrieveContents();
contents.filterServerId(getServer().getServerId());
internalCache.fill(contents);
consoleLog.log(Level.INFO,
"[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_");
if(remoteDb.connect())
{
System.out.println("Retrieving permissions from database into json files.");
final DatabaseContents contents = remoteDb.retrieveContents();
contents.normalize();
localJsn.cleanup();
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.");
}
}

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

@ -26,21 +26,23 @@ public class InternalCache
}
public static class InheritanceLeaf implements Comparable<InheritanceLeaf>
{
public RowInheritance node;
public String instantiator;
public RowInheritance node;
public String instantiator;
public InheritanceLeaf[] subleafs;
public String prefix;
public String suffix;
public String prefix;
public String suffix;
@Override
public int compareTo(InheritanceLeaf other)
{
return (other.node != null && node != null) ? other.node.compareTo(node) : 0;
}
}
final HashMap<String, InheritanceLeaf> entityTrees = new HashMap<>();
// Права по сущностям
final HashMap<String, RowPermission[]> groupPermissions = new HashMap<>();
final HashMap<String, RowPermission[]> playerPermissions = new HashMap<>();
private final HashMap<String, InheritanceLeaf> entityTrees = new HashMap<>();
private final HashMap<String, RowPermission[]> groupPermissions = new HashMap<>();
private final HashMap<String, RowPermission[]> playerPermissions = new HashMap<>();
private void buildPermissions()
{
}
private void buildEntityTree()
{
final HashSet<String> entitiesWhichInherits = new HashSet<>();

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

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

Loading…
Cancel
Save