Browse Source

Internal refactoring and cleanup.

master
Stanislav Usenkov 10 years ago
parent
commit
bcb56d0ba2
  1. 3
      src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java
  2. 2
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java
  3. 81
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java
  4. 3
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java
  5. 5
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java
  6. 7
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  7. 20
      src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java
  8. 7
      src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java
  9. 9
      src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java
  10. 6
      src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java
  11. 7
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java
  12. 11
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java
  13. 13
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java
  14. 2
      src/main/java/ru/simsonic/rscPermissions/InternalCache/AsyncPlayerInfo.java
  15. 14
      src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java
  16. 1
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java
  17. 10
      src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java
  18. 9
      src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java

3
src/main/java/ru/simsonic/rscPermissions/Backends/Backend.java

@ -6,9 +6,6 @@ import ru.simsonic.rscPermissions.InternalCache.AbstractPermissionsCache;
public interface Backend
{
public abstract boolean canRead();
public abstract boolean canWrite();
public abstract void fetchIntoCache(AbstractPermissionsCache cache);
public abstract RowEntity[] fetchEntities();
public abstract RowPermission[] fetchPermissions();

2
src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java

@ -14,7 +14,7 @@ public class BackendJson
{
private final static String localEntitiesFile = "entities.json";
private final static String localPermissionsFile = "permissions.json";
private final static String localInheritanceFile = "inheritance.json";
private final static String localInheritanceFile = "inheritance.json";
public RowEntity[] fetchEntities()
{
final Gson gson = new Gson();

81
src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java

@ -14,84 +14,33 @@ import ru.simsonic.rscUtilityLibrary.ConnectionMySQL;
public class BackendMySQL extends ConnectionMySQL implements Backend
{
protected final BukkitPluginMain plugin;
protected static enum WorkMode { read, write, none, }
protected WorkMode RememberWork;
protected final BukkitPluginMain rscp;
public BackendMySQL(BukkitPluginMain plugin)
{
this.plugin = plugin;
this.rscp = plugin;
}
public synchronized void Initialize(String name, String database, String username, String password, String workmode, String prefixes)
public synchronized void Initialize(String database, String username, String password, String prefixes)
{
super.Initialize(name, database, username, password, prefixes);
switch(workmode.toLowerCase())
{
case "fullaccess":
RememberWork = WorkMode.write;
break;
case "readonly":
RememberWork = WorkMode.read;
break;
case "none":
default:
RememberWork = WorkMode.none;
break;
}
}
@Override
public synchronized boolean canRead()
{
return (RememberWork != WorkMode.none) ? (isConnected() ? true : Connect()) : false;
}
@Override
public synchronized boolean canWrite()
{
return (RememberWork == WorkMode.write) ? (isConnected() ? true : Connect()) : false;
super.Initialize("rscp:MySQL", database, username, password, prefixes);
}
@Override
public synchronized boolean Connect()
{
if(RememberWork == WorkMode.none)
return false;
if(super.Connect())
{
executeUpdateT("Initialize_main_v1");
cleanupTables();
return true;
}
return false;
}
@Override
public synchronized ResultSet executeQuery(String query)
{
if(canRead() == false)
return null;
return super.executeQuery(query);
}
@Override
public synchronized boolean executeUpdate(String query)
{
if(canWrite() == false)
return false;
return super.executeUpdate(query);
}
private void cleanupTables()
{
executeUpdateT("Cleanup_tables");
return super.Connect()
&& executeUpdateT("Initialize_main_v1")
&& executeUpdateT("Cleanup_tables");
}
@Override
public synchronized void fetchIntoCache(AbstractPermissionsCache cache)
{
cleanupTables();
executeUpdateT("Cleanup_tables");
BukkitPluginMain.consoleLog.log(Level.INFO,
"[rscp] Fetched {0}e, {1}p, {2}i, from \"{4}\".",
new Object[]
"[rscp] Fetched {0} entities, {1} permissions and {2} inheritances",
new Integer[]
{
Integer.toString(cache.ImportEntities(fetchEntities())),
Integer.toString(cache.ImportPermissions(fetchPermissions())),
Integer.toString(cache.ImportInheritance(fetchInheritance())),
RememberName,
cache.ImportEntities(fetchEntities()),
cache.ImportPermissions(fetchPermissions()),
cache.ImportInheritance(fetchInheritance())
});
}
@Override
@ -123,7 +72,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
{
final ArrayList<RowPermission> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;");
final String serverId = plugin.getServer().getServerId();
final String serverId = rscp.getServer().getServerId();
try
{
while(rs.next())
@ -155,7 +104,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
{
final ArrayList<RowInheritance> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;");
final String serverId = plugin.getServer().getServerId();
final String serverId = rscp.getServer().getServerId();
try
{
while(rs.next())

3
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java

@ -6,6 +6,7 @@ import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.BrandNewCache;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.InternalCache.ResolutionResult;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
public class BukkitPermissions extends RestartableThread
@ -43,7 +44,7 @@ public class BukkitPermissions extends RestartableThread
{
for(Player current = updateQueue.take(); current != null; current = updateQueue.take())
{
final BrandNewCache.ResolutionResult result = rscp.cache2.resolvePlayer(current);
final ResolutionResult result = rscp.cache2.resolvePlayer(current);
prefixes.put(current, result.prefix);
suffixes.put(current, result.suffix);
persistentPermissions.put(current, result.permissions);

5
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java

@ -161,10 +161,7 @@ public class BukkitPluginConfiguration implements Settings
for(HashMap<String, String> server : serverlist)
{
ConnectionHelper conn = new ConnectionHelper(plugin, connPrev);
conn.Initialize(
server.get("nodename"), server.get("database"),
server.get("username"), server.get("password"),
server.get("workmode"), server.get("prefixes"));
conn.Initialize(server.get("database"), server.get("username"), server.get("password"), server.get("prefixes"));
connPrev = conn;
}
return connPrev;

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

@ -127,11 +127,6 @@ public final class BukkitPluginMain extends JavaPlugin
public static void main(String args[])
{
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/");
// TEST SECTION STARTS BELOW
BukkitPluginMain mpc = new BukkitPluginMain();
ConnectionHelper ch = new ConnectionHelper(mpc, null);
ch.Initialize("Test", "voxile.ru:3306/servers-shared", "server-primary", "zcHzCBFZtTv28JfG", "rscp_");
ch.Connect();
System.out.println("https://github.com/SimSonic/rscPermissions/");
}
}

20
src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java

@ -41,7 +41,7 @@ public class ConnectionHelper extends BackendMySQL
final ConnectionMySQL connection = findConnectedNode();
if(connection == null)
return;
fetchIntoCache(plugin.cache2);
fetchIntoCache(rscp.cache2);
// Update permissions for online players
try
{
@ -50,19 +50,19 @@ public class ConnectionHelper extends BackendMySQL
@Override
public synchronized void run()
{
plugin.permissionManager.recalculateOnlinePlayers();
rscp.permissionManager.recalculateOnlinePlayers();
notify();
}
};
synchronized(syncTask)
{
plugin.getServer().getScheduler().runTask(plugin, syncTask);
rscp.getServer().getScheduler().runTask(rscp, syncTask);
syncTask.wait();
}
} catch(InterruptedException ex) {
BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in FetchTables(): {0}", ex);
}
// plugin.cache.calculateStartupPermissions();
// rscp.cache.calculateStartupPermissions();
}
};
result.start();
@ -77,10 +77,10 @@ public class ConnectionHelper extends BackendMySQL
{
setName("InsertExampleRows");
final BackendMySQL backend = findConnectedNode();
if(backend == null || !backend.canWrite())
if(backend == null)
return;
backend.insertExampleRows();
plugin.getServer().getScheduler().runTask(plugin, new Runnable()
rscp.getServer().getScheduler().runTask(rscp, new Runnable()
{
@Override
public void run()
@ -104,17 +104,17 @@ public class ConnectionHelper extends BackendMySQL
{
setName("MigrateFromPExSQL");
final BackendMySQL backend = findConnectedNode();
if(backend == null || !backend.canWrite())
if(backend == null)
return;
backend.executeUpdate(loadResourceSQLT("Migrate_from_PermissionsEx"));
threadFetchTablesData().join();
plugin.getServer().getScheduler().runTask(plugin, new BukkitRunnable()
rscp.getServer().getScheduler().runTask(rscp, new BukkitRunnable()
{
@Override
public void run()
{
plugin.formattedMessage(sender, "Migration from PermissionsEx (MySQL backend) done!");
plugin.formattedMessage(sender, "Check the latest database row for new data.");
rscp.formattedMessage(sender, "Migration from PermissionsEx (MySQL backend) done!");
rscp.formattedMessage(sender, "Check the latest database row for new data.");
}
});
} catch(InterruptedException ex) {

7
src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java

@ -4,11 +4,6 @@ import java.util.regex.Pattern;
public abstract class AbstractRow
{
public int id = 0;
public static enum Table
{
entities, permissions, inheritance, unknown;
}
public abstract Table getTable();
private static final Pattern patternUUID = Pattern.compile(
"<uuid>" + "(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})" + "</uuid>");
private static boolean isCorrectUUID(String entityName)
@ -17,4 +12,4 @@ public abstract class AbstractRow
return false;
return patternUUID.matcher("<uuid>" + entityName.toLowerCase() + "</uuid>").find();
}
}
}

9
src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java

@ -1,9 +0,0 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.sql.Timestamp;
public abstract class ConditionalRow extends AbstractRow
{
public Destination destination;
public int expirience;
public Timestamp lifetime;
}

6
src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java

@ -2,7 +2,9 @@ package ru.simsonic.rscPermissions.DataTypes;
public enum EntityType
{
group(0), player(1), unknown(-1);
group(0),
player(1),
unknown(-1);
private final int value;
private EntityType(int value)
{
@ -15,4 +17,4 @@ public enum EntityType
return constant;
return unknown;
}
}
}

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

@ -8,9 +8,4 @@ public class RowEntity extends AbstractRow
public String prefix;
public String suffix;
public Timestamp lifetime;
@Override
public Table getTable()
{
return Table.entities;
}
}
}

11
src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java

@ -1,15 +1,19 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.sql.Timestamp;
import java.util.Arrays;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class RowInheritance extends ConditionalRow implements Comparable<RowInheritance>
public class RowInheritance extends AbstractRow implements Comparable<RowInheritance>
{
public String entity;
public String parent;
public String instance;
public EntityType childType;
public int priority;
public Destination destination;
public int expirience;
public Timestamp lifetime;
public void deriveInstance()
{
if(parent != null)
@ -25,11 +29,6 @@ public class RowInheritance extends ConditionalRow implements Comparable<RowInhe
instance = null;
}
@Override
public Table getTable()
{
return Table.inheritance;
}
@Override
public int compareTo(RowInheritance t)
{
return (priority != t.priority) ? priority - t.priority : parent.compareTo(t.parent);

13
src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java

@ -1,14 +1,13 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.sql.Timestamp;
public class RowPermission extends ConditionalRow
public class RowPermission extends AbstractRow
{
public String entity;
public EntityType entityType;
public String permission;
public boolean value;
@Override
public Table getTable()
{
return Table.permissions;
}
}
public Destination destination;
public int expirience;
public Timestamp lifetime;
}

2
src/main/java/ru/simsonic/rscPermissions/InternalCache/AsyncPlayerInfo.java

@ -94,4 +94,4 @@ public class AsyncPlayerInfo
return (row.destination.isLocationApplicable(location, regions, leaf.instance) && row.expirience <= expirience);
return false;
}
}
}

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

@ -44,20 +44,6 @@ public class BrandNewCache implements AbstractPermissionsCache
return (other.node != null && node != null) ? other.node.compareTo(node) : 0;
}
}
public static class ResolutionParams
{
public String[] applicableIdentifiers;
public String[] destRegions;
public String destWorld;
public String destServerId;
public int expirience;
}
public static class ResolutionResult
{
public String prefix;
public String suffix;
public RowPermission[] permissions;
}
final HashMap<String, InheritanceLeaf> entityTrees = new HashMap<>();
// Права по сущностям
final HashMap<String, RowPermission[]> groupPermissions = new HashMap<>();

1
src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java

@ -1,6 +1,5 @@
package ru.simsonic.rscPermissions.InternalCache;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import ru.simsonic.rscPermissions.DataTypes.RowEntity;

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

@ -0,0 +1,10 @@
package ru.simsonic.rscPermissions.InternalCache;
public class ResolutionParams
{
public String[] applicableIdentifiers;
public String[] destRegions;
public String destWorld;
public String destServerId;
public int expirience;
}

9
src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java

@ -0,0 +1,9 @@
package ru.simsonic.rscPermissions.InternalCache;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
public class ResolutionResult
{
public String prefix;
public String suffix;
public RowPermission[] permissions;
}
Loading…
Cancel
Save