Browse Source

Refactoring and coding:

* Several e/p/h can be entered in entity column (all tables), permission column, parent column. Like destinations. Split them by comma, semicolon, and space chars.
* DatabaseContents normalize(); replaces destination parsing in db connection.
* BridgeForBukkitAPI in API folder
* Removed AbstractRow
* Rows are implement Cloneable.
* More platform independence.
* etc.
master
Stanislav Usenkov 10 years ago
parent
commit
62db54339b
  1. 2
      nb-configuration.xml
  2. 6
      nbactions.xml
  3. 5
      pom.xml
  4. 7
      src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java
  5. 44
      src/main/java/ru/simsonic/rscPermissions/API/Destination.java
  6. 2
      src/main/java/ru/simsonic/rscPermissions/API/EntityType.java
  7. 17
      src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java
  8. 26
      src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java
  9. 20
      src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java
  10. 95
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendDatabase.java
  11. 13
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java
  12. 87
      src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java
  13. 9
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
  14. 4
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java
  15. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  16. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
  17. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
  18. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
  19. 16
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  20. 36
      src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java
  21. 11
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java
  22. 13
      src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java
  23. 6
      src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java
  24. 31
      src/main/java/ru/simsonic/rscPermissions/IndependentMain.java
  25. 23
      src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java
  26. 12
      src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java
  27. 2
      src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java
  28. 24
      src/main/resources/sqlt/Initialize_main_v1.sqlt

2
nb-configuration.xml

@ -13,6 +13,6 @@ You can copy and paste the single properties, into the pom.xml file and the IDE
That way multiple projects can share the same settings (useful for formatting rules for example).
Any value defined here will override the pom.xml file value but is only applicable to the current project.
-->
<netbeans.hint.jdkPlatform>______JDK_1.7_Update_67</netbeans.hint.jdkPlatform>
<netbeans.hint.jdkPlatform>______JDK_1.7_Update_72</netbeans.hint.jdkPlatform>
</properties>
</project-shared-configuration>

6
nbactions.xml

@ -10,7 +10,7 @@
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
</goals>
<properties>
<exec.args>-classpath %classpath ru.simsonic.rscPermissions.MainPluginClass</exec.args>
<exec.args>-classpath %classpath ru.simsonic.rscPermissions.IndependentMain</exec.args>
<exec.executable>java</exec.executable>
</properties>
</action>
@ -24,7 +24,7 @@
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
</goals>
<properties>
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass</exec.args>
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ru.simsonic.rscPermissions.IndependentMain</exec.args>
<exec.executable>java</exec.executable>
<jpda.listen>true</jpda.listen>
</properties>
@ -39,7 +39,7 @@
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
</goals>
<properties>
<exec.args>-classpath %classpath ru.simsonic.rscPermissions.MainPluginClass</exec.args>
<exec.args>-classpath %classpath ru.simsonic.rscPermissions.IndependentMain</exec.args>
<exec.executable>java</exec.executable>
</properties>
</action>

5
pom.xml

@ -4,7 +4,7 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.9.2a</version>
<version>0.9.3a</version>
<packaging>jar</packaging>
<name>rscPermissions</name>
@ -142,6 +142,9 @@
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<mainClass>${project.groupId}.${project.artifactId}.IndependentMain</mainClass>
</manifest>
</archive>
<excludes>
<exclude>.*</exclude>

7
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java → src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java

@ -1,6 +1,7 @@
package ru.simsonic.rscPermissions;
package ru.simsonic.rscPermissions.API;
import ru.simsonic.rscPermissions.Bukkit.VaultChat;
import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
import ru.simsonic.rscPermissions.BukkitPluginMain;
public class BridgeForBukkitAPI
{
@ -12,12 +13,12 @@ public class BridgeForBukkitAPI
private final BukkitPluginMain rscp;
private final VaultPermission vaultPermission;
private final VaultChat vaultChat;
protected BridgeForBukkitAPI(BukkitPluginMain plugin)
public BridgeForBukkitAPI(BukkitPluginMain plugin)
{
BridgeForBukkitAPI.instance = BridgeForBukkitAPI.this;
this.rscp = plugin;
this.vaultPermission = new VaultPermission(this);
this.vaultChat = new VaultChat(this, vaultPermission);
this.vaultChat = new VaultChat(this, vaultPermission);
}
public org.bukkit.plugin.java.JavaPlugin getPlugin()
{

44
src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java → src/main/java/ru/simsonic/rscPermissions/API/Destination.java

@ -1,11 +1,7 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.util.ArrayList;
package ru.simsonic.rscPermissions.API;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.Location;
import org.bukkit.World;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class Destination
@ -29,28 +25,6 @@ public class Destination
{
return wildcardTest(serverId, this.serverId);
}
public boolean isLocationApplicable(Location location, Set<String> regions, String instantiator)
{
if(location != null)
{
if(location.getWorld() != null)
if(isWorldApplicable(location.getWorld(), instantiator))
return isRegionApplicable(regions, instantiator);
} else {
if(this.world == null)
return isRegionApplicable(regions, instantiator);
}
return false;
}
public boolean isWorldApplicable(World world, String instantiator)
{
if(this.world == null || this.world.isEmpty() || "*".equals(this.world))
return true;
final String instantiated = (instantiator != null && !instantiator.isEmpty())
? this.world.replace(Settings.instantiator, instantiator)
: this.world;
return wildcardTest(world.getName(), instantiated);
}
public boolean isWorldApplicable(String world, String instantiator)
{
if(this.world == null || this.world.isEmpty() || "*".equals(this.world))
@ -94,21 +68,9 @@ public class Destination
"<wildcard>" + testing.toLowerCase() + "</wildcard>",
"<wildcard>" + pattern.toLowerCase() + "</wildcard>");
}
private static final String destinationSplitter = "\\s*[;,\\r\\n]+\\s*";
public static Destination[] parseDestinations(String destinations)
{
if(destinations == null || destinations.isEmpty())
return new Destination[] { new Destination() };
final String[] destinationsList = destinations.split(destinationSplitter);
final ArrayList<Destination> result = new ArrayList(destinationsList.length);
for(String inList : destinationsList)
if(inList != null && !inList.isEmpty())
result.add(parseDestination(inList));
return result.toArray(new Destination[result.size()]);
}
private static final Pattern destinationPattern = Pattern.compile(
"^(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?$");
private static Destination parseDestination(String destination)
"(?:((?:\\w|\\*|\\?)*):)?((?:\\w|\\*|\\?)*)?(?:@((?:\\w|\\*|\\?)*))?");
public static Destination parseDestination(String destination)
{
final Matcher match = destinationPattern.matcher(destination);
if(match.find())

2
src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java → src/main/java/ru/simsonic/rscPermissions/API/EntityType.java

@ -1,4 +1,4 @@
package ru.simsonic.rscPermissions.DataTypes;
package ru.simsonic.rscPermissions.API;
public enum EntityType
{

17
src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java

@ -0,0 +1,17 @@
package ru.simsonic.rscPermissions.API;
import java.sql.Timestamp;
public class RowEntity implements Cloneable
{
public int id;
public String entity;
public EntityType entityType;
public String prefix;
public String suffix;
public Timestamp lifetime;
@Override
public RowEntity clone() throws CloneNotSupportedException
{
return (RowEntity)super.clone();
}
}

26
src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java → src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java

@ -1,19 +1,20 @@
package ru.simsonic.rscPermissions.DataTypes;
package ru.simsonic.rscPermissions.API;
import java.sql.Timestamp;
import java.util.Arrays;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class RowInheritance extends AbstractRow implements Comparable<RowInheritance>
public class RowInheritance implements Cloneable, Comparable<RowInheritance>
{
public String entity;
public String parent;
public String instance;
public EntityType childType;
public int priority;
public int id;
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 int expirience;
public Timestamp lifetime;
public transient String destinationSource;
public void deriveInstance()
{
if(parent != null)
@ -29,6 +30,11 @@ public class RowInheritance extends AbstractRow implements Comparable<RowInherit
instance = null;
}
@Override
public RowInheritance clone() throws CloneNotSupportedException
{
return (RowInheritance)super.clone();
}
@Override
public int compareTo(RowInheritance t)
{
return (priority != t.priority) ? priority - t.priority : parent.compareTo(t.parent);

20
src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java

@ -0,0 +1,20 @@
package ru.simsonic.rscPermissions.API;
import java.sql.Timestamp;
public class RowPermission implements Cloneable
{
public int id;
public String entity;
public EntityType entityType;
public String permission;
public boolean value;
public Destination destination;
public int expirience;
public Timestamp lifetime;
public transient String destinationSource;
@Override
public RowPermission clone() throws CloneNotSupportedException
{
return (RowPermission)super.clone();
}
}

95
src/main/java/ru/simsonic/rscPermissions/Backends/BackendDatabase.java

@ -3,22 +3,20 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import ru.simsonic.rscPermissions.DataTypes.Destination;
import ru.simsonic.rscPermissions.DataTypes.EntityType;
import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.DataTypes.DatabaseContents;
import java.util.logging.Logger;
import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscUtilityLibrary.ConnectionMySQL;
public class BackendDatabase extends ConnectionMySQL
{
protected final BukkitPluginMain rscp;
public BackendDatabase(BukkitPluginMain plugin)
protected final String serverId;
public BackendDatabase(Logger logger, String serverId)
{
super(BukkitPluginMain.consoleLog);
this.rscp = plugin;
super(logger);
this.serverId = serverId;
}
@Override
public synchronized boolean connect()
@ -31,10 +29,10 @@ public class BackendDatabase extends ConnectionMySQL
{
executeUpdateT("Cleanup_tables");
final DatabaseContents contents = new DatabaseContents();
contents.entities = fetchEntities();
contents.entities = fetchEntities();
contents.permissions = fetchPermissions();
contents.inheritance = fetchInheritance();
BukkitPluginMain.consoleLog.log(Level.INFO,
logger.log(Level.INFO,
"[rscp] Fetched {0} entities, {1} permissions and {2} inheritances",
new Integer[]
{
@ -52,18 +50,18 @@ public class BackendDatabase extends ConnectionMySQL
{
while(rs.next())
{
RowEntity row = new RowEntity();
row.id = rs.getInt("id");
row.entity = rs.getString("entity");
RowEntity row = new RowEntity();
row.id = rs.getInt("id");
row.entity = rs.getString("entity");
row.entityType = EntityType.byValue(rs.getInt("entity_type"));
row.prefix = rs.getString("prefix");
row.suffix = rs.getString("suffix");
row.lifetime = rs.getTimestamp("lifetime");
row.prefix = rs.getString("prefix");
row.suffix = rs.getString("suffix");
row.lifetime = rs.getTimestamp("lifetime");
result.add(row);
}
rs.close();
} catch(SQLException ex) {
BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2e(): {0}", ex);
logger.log(Level.WARNING, "[rscp] Exception in rs2e(): {0}", ex);
}
return result.toArray(new RowEntity[result.size()]);
}
@ -71,30 +69,24 @@ public class BackendDatabase extends ConnectionMySQL
{
final ArrayList<RowPermission> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;");
final String serverId = rscp.getServer().getServerId();
try
{
while(rs.next())
{
for(Destination destination : Destination.parseDestinations(rs.getString("destination")))
{
if(destination.isServerIdApplicable(serverId) == false)
continue;
RowPermission row = new RowPermission();
row.id = rs.getInt("id");
row.entity = rs.getString("entity");
row.entityType = EntityType.byValue(rs.getInt("entity_type"));
row.permission = rs.getString("permission");
row.value = rs.getBoolean("value");
row.destination = destination;
row.expirience = rs.getInt("expirience");
row.lifetime = rs.getTimestamp("lifetime");
result.add(row);
}
RowPermission row = new RowPermission();
row.id = rs.getInt("id");
row.entity = rs.getString("entity");
row.entityType = EntityType.byValue(rs.getInt("entity_type"));
row.permission = rs.getString("permission");
row.value = rs.getBoolean("value");
row.destinationSource = rs.getString("destination");
row.expirience = rs.getInt("expirience");
row.lifetime = rs.getTimestamp("lifetime");
result.add(row);
}
rs.close();
} catch(SQLException ex) {
BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex);
logger.log(Level.WARNING, "[rscp] Exception in rs2p(): {0}", ex);
}
return result.toArray(new RowPermission[result.size()]);
}
@ -102,31 +94,24 @@ public class BackendDatabase extends ConnectionMySQL
{
final ArrayList<RowInheritance> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;");
final String serverId = rscp.getServer().getServerId();
try
{
while(rs.next())
{
for(Destination destination : Destination.parseDestinations(rs.getString("destination")))
{
if(destination.isServerIdApplicable(serverId) == false)
continue;
RowInheritance row = new RowInheritance();
row.id = rs.getInt("id");
row.entity = rs.getString("entity");
row.parent = rs.getString("parent");
row.deriveInstance();
row.childType = EntityType.byValue(rs.getInt("inheritance_type"));
row.priority = rs.getInt("inheritance_priority");
row.destination = destination;
row.expirience = rs.getInt("expirience");
row.lifetime = rs.getTimestamp("lifetime");
result.add(row);
}
RowInheritance row = new RowInheritance();
row.id = rs.getInt("id");
row.entity = rs.getString("entity");
row.parent = rs.getString("parent");
row.childType = EntityType.byValue(rs.getInt("inheritance_type"));
row.priority = rs.getInt("inheritance_priority");
row.destinationSource = rs.getString("destination");
row.expirience = rs.getInt("expirience");
row.lifetime = rs.getTimestamp("lifetime");
result.add(row);
}
rs.close();
} catch(SQLException ex) {
BukkitPluginMain.consoleLog.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex);
logger.log(Level.WARNING, "[rscp] Exception in rs2i(): {0}", ex);
}
return result.toArray(new RowInheritance[result.size()]);
}

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

@ -9,10 +9,9 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import ru.simsonic.rscPermissions.DataTypes.DatabaseContents;
import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission;
public class BackendJson
{
@ -85,4 +84,10 @@ public class BackendJson
} catch(IOException ex) {
}
}
public synchronized void cleanup()
{
new File(workingDir, entitiesFile).delete();
new File(workingDir, permissionsFile).delete();
new File(workingDir, inheritanceFile).delete();
}
}

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

@ -0,0 +1,87 @@
package ru.simsonic.rscPermissions.Backends;
import java.util.ArrayList;
import ru.simsonic.rscPermissions.API.Destination;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.InternalCache.Matchers;
public class DatabaseContents
{
public RowEntity entities[];
public RowPermission permissions[];
public RowInheritance inheritance[];
public void normalize()
{
if(entities == null)
entities = new RowEntity[] {};
if(permissions == null)
permissions = new RowPermission[] {};
if(inheritance == null)
inheritance = new RowInheritance[] {};
final ArrayList<RowEntity> le = new ArrayList<>();
final ArrayList<RowPermission> lp = new ArrayList<>();
final ArrayList<RowInheritance> li = new ArrayList<>();
try
{
// Entities
for(RowEntity row : entities)
{
final String[] splittedByEntity = Matchers.genericParse(row.entity);
for(String oneEntity : splittedByEntity)
{
final RowEntity clone = row.clone();
clone.entity = oneEntity;
le.add(clone);
}
}
// Permissions
for(RowPermission row : permissions)
{
final String[] splittedByEntity = Matchers.genericParse(row.entity);
final String[] splittedByPermission = Matchers.genericParse(row.permission);
final String[] splittedByDestination = Matchers.genericParse(row.destinationSource);
row.destinationSource = null;
for(String oneDestination : splittedByDestination)
{
final Destination destination = Destination.parseDestination(oneDestination);
for(String permission : splittedByPermission)
for(String entity : splittedByEntity)
{
final RowPermission clone = row.clone();
clone.entity = entity;
clone.permission = permission;
clone.destination = destination;
lp.add(clone);
}
}
}
// Inheritance
for(RowInheritance row : inheritance)
{
final String[] splittedByEntity = Matchers.genericParse(row.entity);
final String[] splittedByParent = Matchers.genericParse(row.parent);
final String[] splittedByDestination = Matchers.genericParse(row.destinationSource);
row.destinationSource = null;
for(String oneDestination : splittedByDestination)
{
final Destination destination = Destination.parseDestination(oneDestination);
for(String parent : splittedByParent)
for(String entity : splittedByEntity)
{
final RowInheritance clone = row.clone();
clone.entity = entity;
clone.parent = parent;
clone.deriveInstance();
clone.destination = destination;
li.add(clone);
}
}
}
} catch(CloneNotSupportedException ex) {
}
entities = le.toArray(new RowEntity[le.size()]);
permissions = lp.toArray(new RowPermission[lp.size()]);
inheritance = li.toArray(new RowInheritance[li.size()]);
}
}

9
src/main/java/ru/simsonic/rscPermissions/CommandHelper.java → src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java

@ -1,4 +1,4 @@
package ru.simsonic.rscPermissions;
package ru.simsonic.rscPermissions.Bukkit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
@ -7,15 +7,16 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.DataTypes.DatabaseContents;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Importers.PermissionsEx_YAML;
import ru.simsonic.rscUtilityLibrary.CommandProcessing.CommandAnswerException;
import ru.simsonic.rscUtilityLibrary.RestartableThread;
public class CommandHelper
public class BukkitCommands
{
private final BukkitPluginMain rscp;
public CommandHelper(final BukkitPluginMain rscp)
public BukkitCommands(final BukkitPluginMain rscp)
{
this.rscp = rscp;
}

4
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java

@ -43,7 +43,7 @@ public class BukkitMaintenance implements Listener
try
{
final String name = event.getName();
plugin.internalCache.resolvePlayer(name);
plugin.internalCache.resolvePlayer(name, plugin.getServer().getServerId());
// permissions.putAll(plugin.cache.mapPermissions.get(name));
} catch(RuntimeException ex) {
}
@ -51,7 +51,7 @@ public class BukkitMaintenance implements Listener
{
final UUID uuid = event.getUniqueId();
final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase();
plugin.internalCache.resolvePlayer(userFriendlyUniqueId);
plugin.internalCache.resolvePlayer(userFriendlyUniqueId, plugin.getServer().getServerId());
// permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId));
} catch(RuntimeException | NoSuchMethodError ex) {
}

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java

@ -5,7 +5,7 @@ import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.InternalCache.ResolutionParams;
import ru.simsonic.rscPermissions.InternalCache.ResolutionResult;

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java

@ -25,7 +25,7 @@ public class PlayerEventsListener implements Listener
event.getName(),
event.getUniqueId().toString(),
event.getAddress().getHostAddress(),
});
}, rscp.getServer().getServerId());
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent event)

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java

@ -3,7 +3,7 @@ import net.milkbowl.vault.permission.Permission;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI;
public final class VaultChat extends net.milkbowl.vault.chat.Chat
{

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java

@ -3,7 +3,7 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI;
public class VaultPermission extends net.milkbowl.vault.permission.Permission
{

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

@ -1,4 +1,6 @@
package ru.simsonic.rscPermissions;
import ru.simsonic.rscPermissions.API.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.Bukkit.BukkitCommands;
import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders;
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver;
import ru.simsonic.rscPermissions.Bukkit.BukkitMaintenance;
@ -26,15 +28,15 @@ public final class BukkitPluginMain extends JavaPlugin
private static final String chatPrefix = "{YELLOW}[rscp] {GOLD}";
public static final Logger consoleLog = Bukkit.getLogger();
public final Settings settings = new BukkitPluginConfiguration(this);
private final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
public final PlayerEventsListener bukkitListener = new PlayerEventsListener(this);
public final BackendJson fileCache = new BackendJson(getDataFolder());
public final BackendDatabase connection = new BackendDatabase(this);
public final InternalCache internalCache = new InternalCache(this);
public final BackendDatabase connection = new BackendDatabase(BukkitPluginMain.consoleLog, getServer().getServerId());
public final InternalCache internalCache = new InternalCache();
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this);
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this);
private final RegionUpdateObserver regionUpdateObserver = new RegionUpdateObserver(this);
public final CommandHelper commandHelper = new CommandHelper(this);
public final BukkitCommands commandHelper = new BukkitCommands(this);
public final BukkitMaintenance maintenance = new BukkitMaintenance(this);
private MetricsLite metrics;
@Override
@ -122,10 +124,4 @@ public final class BukkitPluginMain extends JavaPlugin
message = GenericChatCodes.processStringStatic(chatPrefix + message);
sender.sendMessage(message);
}
@SuppressWarnings({"DeadBranch", "UnusedAssignment"})
public static void main(String args[])
{
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("https://github.com/SimSonic/rscPermissions/");
}
}

36
src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java

@ -1,36 +0,0 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.util.ArrayList;
public class DatabaseContents
{
public RowEntity entities[];
public RowPermission permissions[];
public RowInheritance inheritance[];
public void normalize()
{
// Entities
final ArrayList<RowEntity> listE = new ArrayList<>();
if(entities != null)
for(RowEntity rowE : entities)
{
listE.add(rowE);
}
entities = listE.toArray(new RowEntity[listE.size()]);
// Permissions
final ArrayList<RowPermission> listP = new ArrayList<>();
if(permissions != null)
for(RowPermission rowP : permissions)
{
listP.add(rowP);
}
permissions = listP.toArray(new RowPermission[listP.size()]);
// Inheritance
final ArrayList<RowInheritance> listI = new ArrayList<>();
if(inheritance != null)
for(RowInheritance rowI : inheritance)
{
listI.add(rowI);
}
inheritance = listI.toArray(new RowInheritance[listI.size()]);
}
}

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

@ -1,11 +0,0 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.sql.Timestamp;
public class RowEntity extends AbstractRow
{
public String entity;
public EntityType entityType;
public String prefix;
public String suffix;
public Timestamp lifetime;
}

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

@ -1,13 +0,0 @@
package ru.simsonic.rscPermissions.DataTypes;
import java.sql.Timestamp;
public class RowPermission extends AbstractRow
{
public String entity;
public EntityType entityType;
public String permission;
public boolean value;
public Destination destination;
public int expirience;
public Timestamp lifetime;
}

6
src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java

@ -1,8 +1,8 @@
package ru.simsonic.rscPermissions.Importers;
import java.util.ArrayList;
import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission;
public abstract class BaseImporter
{

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

@ -0,0 +1,31 @@
package ru.simsonic.rscPermissions;
import java.io.File;
import java.util.logging.Logger;
import ru.simsonic.rscPermissions.Backends.BackendDatabase;
import ru.simsonic.rscPermissions.Backends.BackendJson;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.InternalCache.InternalCache;
public class IndependentMain
{
private static final BackendJson localJsn = new BackendJson(new File("../"));
private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal(), "test");
private static final InternalCache intCache = new InternalCache();
@SuppressWarnings({"DeadBranch", "UnusedAssignment"})
public static void main(String args[])
{
String[] qqq = "".split("x+");
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("https://github.com/SimSonic/rscPermissions/");
// TESTING HERE
remoteDb.initialize(null, "voxile.ru:3306/servers-shared", "", "", "rscp_");
if(remoteDb.connect())
{
final DatabaseContents contents = remoteDb.retrieveContents();
contents.normalize();
localJsn.cleanup();
localJsn.saveContents(contents);
intCache.fill(contents);
}
}
}

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

@ -3,20 +3,17 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import ru.simsonic.rscPermissions.DataTypes.EntityType;
import ru.simsonic.rscPermissions.DataTypes.RowEntity;
import ru.simsonic.rscPermissions.DataTypes.RowInheritance;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.API.EntityType;
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.DataTypes.DatabaseContents;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
public class InternalCache
{
protected final BukkitPluginMain plugin;
public InternalCache(BukkitPluginMain rscp)
public InternalCache()
{
this.plugin = rscp;
}
protected final RowInheritance defaultInheritance = new RowInheritance();
public void setDefaultGroup(String defaultGroup)
@ -85,17 +82,17 @@ public class InternalCache
result.subleafs = subleafs.toArray(new InheritanceLeaf[subleafs.size()]);
return result;
}
public synchronized ResolutionResult resolvePlayer(String player)
public synchronized ResolutionResult resolvePlayer(String player, String serverId)
{
return resolvePlayer(new String[] { player });
return resolvePlayer(new String[] { player }, serverId);
}
public synchronized ResolutionResult resolvePlayer(String[] player)
public synchronized ResolutionResult resolvePlayer(String[] player, String serverId)
{
final ResolutionParams params = new ResolutionParams();
params.applicableIdentifiers = player;
params.destRegions = new String[] {};
// params.destWorld = "";
params.destServerId = plugin.getServer().getServerId();
params.destServerId = serverId;
// params.expirience = 0;
return resolvePlayer(params);
}

12
src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java → src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java

@ -1,9 +1,15 @@
package ru.simsonic.rscPermissions.DataTypes;
package ru.simsonic.rscPermissions.InternalCache;
import java.util.regex.Pattern;
public abstract class AbstractRow
public class Matchers
{
public int id = 0;
private static final String genericSplitter = "\\s*[;,\\r\\n\\s]+\\s*";
public static String[] genericParse(String multiobject)
{
if(multiobject == null)
multiobject = "";
return multiobject.split(genericSplitter);
}
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)

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

@ -1,5 +1,5 @@
package ru.simsonic.rscPermissions.InternalCache;
import ru.simsonic.rscPermissions.DataTypes.RowPermission;
import ru.simsonic.rscPermissions.API.RowPermission;
public class ResolutionResult
{

24
src/main/resources/sqlt/Initialize_main_v1.sqlt

@ -37,27 +37,3 @@ CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}inheritance` (
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `inheritance_UNIQUE` (`entity`, `parent`, `inheritance_type`, `destination`, `expirience`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci';
/* Merged updates 0.1a -> 0.5.9b -> 0.6b -> 0.8.15b -> 0.9.2b */
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}entities`
COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}permissions`
CHANGE COLUMN `value` `value` BIT(1) NOT NULL DEFAULT b'1',
CHANGE COLUMN `permission` `permission` VARCHAR(255) NOT NULL,
CHANGE COLUMN `destination` `destination` VARCHAR(255) NOT NULL DEFAULT '',
CHANGE COLUMN `expirience` `expirience` SMALLINT(6) NOT NULL DEFAULT 0,
COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}inheritance`
CHANGE COLUMN `destination` `destination` VARCHAR(255) NOT NULL DEFAULT '',
CHANGE COLUMN `expirience` `expirience` SMALLINT(6) NOT NULL DEFAULT 0,
DROP PRIMARY KEY, ADD PRIMARY KEY (`id`),
COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}servers`
COLLATE 'utf8_general_ci';
ALTER IGNORE TABLE `{DATABASE}`.`{PREFIX}entities`
ADD COLUMN `lifetime` TIMESTAMP NULL DEFAULT NULL AFTER `suffix`;

Loading…
Cancel
Save