diff --git a/nb-configuration.xml b/nb-configuration.xml index 7d2a96a..e8aab4f 100644 --- a/nb-configuration.xml +++ b/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. --> - ______JDK_1.7_Update_67 + ______JDK_1.7_Update_72 diff --git a/nbactions.xml b/nbactions.xml index 9177298..b15d146 100644 --- a/nbactions.xml +++ b/nbactions.xml @@ -10,7 +10,7 @@ org.codehaus.mojo:exec-maven-plugin:1.2.1:exec - -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass + -classpath %classpath ru.simsonic.rscPermissions.IndependentMain java @@ -24,7 +24,7 @@ org.codehaus.mojo:exec-maven-plugin:1.2.1:exec - -Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass + -Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath ru.simsonic.rscPermissions.IndependentMain java true @@ -39,7 +39,7 @@ org.codehaus.mojo:exec-maven-plugin:1.2.1:exec - -classpath %classpath ru.simsonic.rscPermissions.MainPluginClass + -classpath %classpath ru.simsonic.rscPermissions.IndependentMain java diff --git a/pom.xml b/pom.xml index 3785dba..03adc2d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ ru.simsonic rscPermissions - 0.9.2a + 0.9.3a jar rscPermissions @@ -142,6 +142,9 @@ false + + ${project.groupId}.${project.artifactId}.IndependentMain + .* diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java similarity index 76% rename from src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java rename to src/main/java/ru/simsonic/rscPermissions/API/BridgeForBukkitAPI.java index 510af52..9a0e7a2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java +++ b/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() { diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java b/src/main/java/ru/simsonic/rscPermissions/API/Destination.java similarity index 63% rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java rename to src/main/java/ru/simsonic/rscPermissions/API/Destination.java index 9121573..9b1c3ff 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/Destination.java +++ b/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 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 "" + testing.toLowerCase() + "", "" + pattern.toLowerCase() + ""); } - 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 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()) diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java similarity index 87% rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java rename to src/main/java/ru/simsonic/rscPermissions/API/EntityType.java index a88a320..89600a1 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/EntityType.java +++ b/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 { diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java new file mode 100644 index 0000000..aa80ce3 --- /dev/null +++ b/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(); + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java similarity index 55% rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java rename to src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index 1e9e770..66a27bb 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowInheritance.java +++ b/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 +public class RowInheritance implements Cloneable, Comparable { - 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 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 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()]); } diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java b/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java index 783a359..37d74c2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Backends/BackendJson.java +++ b/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(); + } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/Backends/DatabaseContents.java new file mode 100644 index 0000000..d87e997 --- /dev/null +++ b/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 le = new ArrayList<>(); + final ArrayList lp = new ArrayList<>(); + final ArrayList 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()]); + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java similarity index 95% rename from src/main/java/ru/simsonic/rscPermissions/CommandHelper.java rename to src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java index bf08d08..c276c08 100644 --- a/src/main/java/ru/simsonic/rscPermissions/CommandHelper.java +++ b/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; } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java index a34d58b..3c4533e 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java +++ b/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) { } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java index f431b0e..2c0c411 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java +++ b/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; diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java index 164ec00..94be934 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java +++ b/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) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java index de108b0..319a7d8 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java +++ b/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 { diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java index 86beb7b..70ec805 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java +++ b/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 { diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java index cb49ef2..aa751f9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java +++ b/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/"); - } } diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java deleted file mode 100644 index d63cedd..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/DatabaseContents.java +++ /dev/null @@ -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 listE = new ArrayList<>(); - if(entities != null) - for(RowEntity rowE : entities) - { - listE.add(rowE); - } - entities = listE.toArray(new RowEntity[listE.size()]); - // Permissions - final ArrayList listP = new ArrayList<>(); - if(permissions != null) - for(RowPermission rowP : permissions) - { - listP.add(rowP); - } - permissions = listP.toArray(new RowPermission[listP.size()]); - // Inheritance - final ArrayList listI = new ArrayList<>(); - if(inheritance != null) - for(RowInheritance rowI : inheritance) - { - listI.add(rowI); - } - inheritance = listI.toArray(new RowInheritance[listI.size()]); - } -} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java deleted file mode 100644 index 8b953e6..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowEntity.java +++ /dev/null @@ -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; -} diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java b/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java deleted file mode 100644 index 1fc48db..0000000 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/RowPermission.java +++ /dev/null @@ -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; -} diff --git a/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java b/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java index 30c6416..54ed934 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Importers/BaseImporter.java +++ b/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 { diff --git a/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java b/src/main/java/ru/simsonic/rscPermissions/IndependentMain.java new file mode 100644 index 0000000..36eb6f5 --- /dev/null +++ b/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); + } + } +} diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java index 485998a..7c51075 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/InternalCache.java +++ b/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); } diff --git a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java similarity index 53% rename from src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java rename to src/main/java/ru/simsonic/rscPermissions/InternalCache/Matchers.java index 3195934..b30824f 100644 --- a/src/main/java/ru/simsonic/rscPermissions/DataTypes/AbstractRow.java +++ b/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( "" + "(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})" + ""); private static boolean isCorrectUUID(String entityName) diff --git a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java index b6b2b4f..a8bfbb3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/InternalCache/ResolutionResult.java +++ b/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 { diff --git a/src/main/resources/sqlt/Initialize_main_v1.sqlt b/src/main/resources/sqlt/Initialize_main_v1.sqlt index 2464168..983ae19 100644 --- a/src/main/resources/sqlt/Initialize_main_v1.sqlt +++ b/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`;