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. 81
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendMySQL.java
  3. 3
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissions.java
  4. 5
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPluginConfiguration.java
  5. 7
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  6. 20
      src/main/java/ru/simsonic/rscPermissions/ConnectionHelper.java
  7. 5
      src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java
  8. 9
      src/main/java/ru/simsonic/rscPermissions/DataTypes/ConditionalRow.java
  9. 4
      src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java
  10. 5
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java
  11. 11
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java
  12. 11
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java
  13. 14
      src/main/java/ru/simsonic/rscPermissions/InternalCache/BrandNewCache.java
  14. 1
      src/main/java/ru/simsonic/rscPermissions/InternalCache/LocalCacheFunctions.java
  15. 10
      src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionParams.java
  16. 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 interface Backend
{ {
public abstract boolean canRead();
public abstract boolean canWrite();
public abstract void fetchIntoCache(AbstractPermissionsCache cache); public abstract void fetchIntoCache(AbstractPermissionsCache cache);
public abstract RowEntity[] fetchEntities(); public abstract RowEntity[] fetchEntities();
public abstract RowPermission[] fetchPermissions(); public abstract RowPermission[] fetchPermissions();

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 public class BackendMySQL extends ConnectionMySQL implements Backend
{ {
protected final BukkitPluginMain plugin; protected final BukkitPluginMain rscp;
protected static enum WorkMode { read, write, none, }
protected WorkMode RememberWork;
public BackendMySQL(BukkitPluginMain plugin) 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); super.Initialize("rscp:MySQL", 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;
} }
@Override @Override
public synchronized boolean Connect() public synchronized boolean Connect()
{ {
if(RememberWork == WorkMode.none) return super.Connect()
return false; && executeUpdateT("Initialize_main_v1")
if(super.Connect()) && executeUpdateT("Cleanup_tables");
{
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");
} }
@Override @Override
public synchronized void fetchIntoCache(AbstractPermissionsCache cache) public synchronized void fetchIntoCache(AbstractPermissionsCache cache)
{ {
cleanupTables(); executeUpdateT("Cleanup_tables");
BukkitPluginMain.consoleLog.log(Level.INFO, BukkitPluginMain.consoleLog.log(Level.INFO,
"[rscp] Fetched {0}e, {1}p, {2}i, from \"{4}\".", "[rscp] Fetched {0} entities, {1} permissions and {2} inheritances",
new Object[] new Integer[]
{ {
Integer.toString(cache.ImportEntities(fetchEntities())), cache.ImportEntities(fetchEntities()),
Integer.toString(cache.ImportPermissions(fetchPermissions())), cache.ImportPermissions(fetchPermissions()),
Integer.toString(cache.ImportInheritance(fetchInheritance())), cache.ImportInheritance(fetchInheritance())
RememberName,
}); });
} }
@Override @Override
@ -123,7 +72,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
{ {
final ArrayList<RowPermission> result = new ArrayList<>(); final ArrayList<RowPermission> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;"); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;");
final String serverId = plugin.getServer().getServerId(); final String serverId = rscp.getServer().getServerId();
try try
{ {
while(rs.next()) while(rs.next())
@ -155,7 +104,7 @@ public class BackendMySQL extends ConnectionMySQL implements Backend
{ {
final ArrayList<RowInheritance> result = new ArrayList<>(); final ArrayList<RowInheritance> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;"); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;");
final String serverId = plugin.getServer().getServerId(); final String serverId = rscp.getServer().getServerId();
try try
{ {
while(rs.next()) 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.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.BrandNewCache; import ru.simsonic.rscPermissions.InternalCache.BrandNewCache;
import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.InternalCache.ResolutionResult;
import ru.simsonic.rscUtilityLibrary.RestartableThread; import ru.simsonic.rscUtilityLibrary.RestartableThread;
public class BukkitPermissions extends 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()) 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); prefixes.put(current, result.prefix);
suffixes.put(current, result.suffix); suffixes.put(current, result.suffix);
persistentPermissions.put(current, result.permissions); 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) for(HashMap<String, String> server : serverlist)
{ {
ConnectionHelper conn = new ConnectionHelper(plugin, connPrev); ConnectionHelper conn = new ConnectionHelper(plugin, connPrev);
conn.Initialize( conn.Initialize(server.get("database"), server.get("username"), server.get("password"), server.get("prefixes"));
server.get("nodename"), server.get("database"),
server.get("username"), server.get("password"),
server.get("workmode"), server.get("prefixes"));
connPrev = conn; connPrev = conn;
} }
return connPrev; 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[]) public static void main(String args[])
{ {
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("http://dev.bukkit.org/bukkit-plugins/rscpermissions/"); System.out.println("https://github.com/SimSonic/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();
} }
} }

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

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

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

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

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;
}

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

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

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

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

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

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

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; 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, InheritanceLeaf> entityTrees = new HashMap<>();
// Права по сущностям // Права по сущностям
final HashMap<String, RowPermission[]> groupPermissions = 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; package ru.simsonic.rscPermissions.InternalCache;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import ru.simsonic.rscPermissions.DataTypes.RowEntity; 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