Browse Source

End of day commit.

master
Stanislav Usenkov 9 years ago
parent
commit
f9fe144a21
  1. 8
      pom.xml
  2. 10
      src/main/java/ru/simsonic/rscPermissions/API/Destination.java
  3. 1
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java
  4. 19
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
  5. 151
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java
  6. 124
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandGroup.java
  7. 122
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java
  8. 21
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
  9. 4
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  10. 4
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java
  11. 88
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java
  12. 14
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java
  13. 16
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java
  14. 5
      src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

8
pom.xml

@ -4,7 +4,7 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.10.4b-SNAPSHOT</version>
<version>0.10.5b-SNAPSHOT</version>
<packaging>jar</packaging>
<name>rscPermissions</name>
@ -12,10 +12,10 @@
<repositories>
<!-- Sponge API -->
<repository>
<!--repository>
<id>sponge-repo</id>
<url>http://repo.spongepowered.org/maven/</url>
</repository>
</repository-->
<!-- Bukkit API / Spigot API -->
<repository>
<id>spigot-repo</id>
@ -100,7 +100,7 @@
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.5</version>
<version>1.6</version>
<scope>compile</scope>
</dependency>
<dependency>

10
src/main/java/ru/simsonic/rscPermissions/API/Destination.java

@ -89,6 +89,14 @@ public class Destination
@Override
public String toString()
{
return String.format("%s:%s@%s", region, world, serverId);
final StringBuilder sb = new StringBuilder();
if(region != null && !"".equals(region) && !"*".equals(region))
sb.append(region).append(":");
if(world != null && !"".equals(world) && !"*".equals(world))
sb.append(world);
if(serverId != null && !"".equals(serverId) && !"*".equals(serverId))
sb.append("@").append(serverId);
return sb.toString();
// return String.format("%s:%s@%s", region, world, serverId);
}
}

1
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java

@ -78,7 +78,6 @@ public class BukkitDatabaseFetcher extends RestartableThread
final DatabaseContents contents = rscp.connection.retrieveContents();
if(contents != null)
{
contents.normalize();
rscp.localStorage.cleanup();
rscp.localStorage.saveContents(contents);
contents.filterServerId(rscp.getServer().getServerId());

19
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java

@ -15,8 +15,7 @@ import ru.simsonic.rscPermissions.Engine.Phrases;
public class BukkitCommands
{
private final BukkitPluginMain rscp;
private final CommandUser cmdUser;
private final CommandGroup cmdGroup;
private final CommandEntity cmdEntity;
private final CommandLock cmdLock;
private final CommandFetch cmdFetch;
private final CommandDebug cmdDebug;
@ -26,8 +25,7 @@ public class BukkitCommands
public BukkitCommands(final BukkitPluginMain plugin)
{
this.rscp = plugin;
cmdUser = new CommandUser(rscp);
cmdGroup = new CommandGroup(rscp);
cmdEntity = new CommandEntity(rscp);
cmdLock = new CommandLock(rscp);
cmdFetch = new CommandFetch(rscp);
cmdDebug = new CommandDebug(rscp);
@ -52,10 +50,10 @@ public class BukkitCommands
@Override
public void run()
{
sender.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX
+ "Migration from PermissionsEx (MySQL backend) done!"));
sender.sendMessage(GenericChatCodes.processStringStatic(Settings.CHAT_PREFIX
+ "Check the latest database row for new data."));
sender.sendMessage(GenericChatCodes.processStringStatic(
Settings.CHAT_PREFIX + "Migration from PermissionsEx (MySQL backend) done!"));
sender.sendMessage(GenericChatCodes.processStringStatic(
Settings.CHAT_PREFIX + "Check the latest database rows for new data."));
}
});
} catch(InterruptedException ex) {
@ -123,10 +121,11 @@ public class BukkitCommands
switch(args[0].toLowerCase())
{
case "user":
cmdUser.onUserCommandHub(sender, args);
case "player":
cmdEntity.onEntityCommandHub(sender, true, args);
return;
case "group":
cmdGroup.onGroupCommandHub(sender, args);
cmdEntity.onEntityCommandHub(sender, false, args);
return;
case "lock":
cmdLock.executeLock(sender, args);

151
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java

@ -0,0 +1,151 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseEditor;
import ru.simsonic.rscPermissions.Engine.Matchers;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class CommandEntity
{
private final BukkitPluginMain rscp;
CommandEntity(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
public void onEntityCommandHub(CommandSender sender, boolean type, String[] args) throws CommandAnswerException
{
if(sender.hasPermission("rscp.admin"))
throw new CommandAnswerException("Not enough permissions.");
args = Arrays.copyOfRange(args, 1, args.length);
if(args.length == 0)
throw new CommandAnswerException("Read help.");
RowEntity entity = null;
Player player = null;
if(type)
{
player = BukkitUtilities.findOnlinePlayer(args[0]);
if(player != null)
args[1] = player.getName();
} else
entity = rscp.internalCache.findGroupEntity(args[0]);
final ResolutionResult result = (player != null)
? rscp.permissionManager.getResult(player)
: rscp.permissionManager.getResult(args[0]);
if(player == null && entity == null)
throw new CommandAnswerException("I don't know him.");
switch(args[1].toLowerCase())
{
case "prefix":
case "p":
if(player != null)
viewCalculatedPrefix(result, args[1]);
else
viewEntityPrefix(entity);
break;
case "suffix":
case "s":
if(player != null)
viewCalculatedSuffix(result, args[1]);
else
viewEntitySuffix(entity);
break;
case "listpermissions":
case "lp":
listFinalPlayerPermissions(result, args[1]);
break;
case "listgroups":
case "lg":
listUserGroupsTree(result, args[1]);
break;
case "addparent":
case "addgroup":
case "ap":
case "ag":
// TO DO HERE
addGroup(result, args[1], null, null, null);
break;
case "removeparent":
case "removegroup":
case "rp":
case "rg":
// TO DO HERE
removeGroup(result, args[1], null);
break;
default:
break;
}
}
private void viewEntityPrefix(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Own prefix for " + (entity.entityType == EntityType.GROUP ? "group" : "user")
+ " {_YL}" + entity.entity + "{_LS} is:");
answer.add("{_R}\"" + (entity.prefix != null ? entity.prefix : "") + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewEntitySuffix(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Own suffix for " + (entity.entityType == EntityType.GROUP ? "group" : "user")
+ " {_YL}" + entity.entity + "{_LS} is:");
answer.add("{_R}\"" + (entity.suffix != null ? entity.suffix : "") + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewCalculatedPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewCalculatedSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void listFinalPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Permission list for user {_YL}" + user + "{_LS}:");
for(Map.Entry<String, Boolean> entry : result.getPermissions().entrySet())
answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey());
throw new CommandAnswerException(answer);
}
private void listUserGroupsTree(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Group list for user {_YL}" + user + "{_LS}:");
for(String group : result.getOrderedGroups())
answer.add("{_LG}" + group);
throw new CommandAnswerException(answer);
}
private void addGroup(ResolutionResult result, String user, String parent, String destination, Integer seconds) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
throw new CommandAnswerException(answer);
}
private void removeGroup(ResolutionResult result, String user, String parent) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
throw new CommandAnswerException(answer);
}
}

124
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandGroup.java

@ -1,124 +0,0 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import java.util.ArrayList;
import org.bukkit.command.CommandSender;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseEditor;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class CommandGroup
{
private final BukkitPluginMain rscp;
CommandGroup(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
public void onGroupCommandHub(CommandSender sender, String[] args) throws CommandAnswerException
{
/*
/rscp - command
group - 0
<entity> - 1
*/
if(sender.hasPermission("rscp.admin"))
{
/*
if(args.length < 3)
return;
final Player player = BukkitUtilities.findOnlinePlayer(args[1]);
if(player != null)
args[1] = player.getName();
final ResolutionResult result = (player != null)
? rscp.permissionManager.getResult(player)
: rscp.permissionManager.getResult(args[1]);
switch(args[2].toLowerCase())
{
case "prefix":
case "p":
viewPrefix(result, args[1]);
break;
case "suffix":
case "s":
viewSuffix(result, args[1]);
break;
case "listpermissions":
case "lp":
listPermissions(result, args[1]);
break;
case "listgroups":
case "lg":
listGroups(result, args[1]);
break;
case "addgroup":
case "ag":
// TO DO HERE
addGroup(result, args[1], null, null, null);
break;
case "removegroup":
case "rg":
// TO DO HERE
removeGroup(result, args[1], null);
break;
default:
break;
}
*/
} else
throw new CommandAnswerException("Not enough permissions.");
}
/*
private void viewPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.prefix + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.suffix + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void listPermissions(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Permission list for user {_YL}" + user + "{_LS}:");
final ArrayList<String> sorted_keys = new ArrayList<>(result.permissions.keySet());
Collections.sort(sorted_keys);
for(String perm : sorted_keys)
answer.add((result.permissions.get(perm) ? "{_LG}" : "{_LR}") + perm);
throw new CommandAnswerException(answer);
}
private void listGroups(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Group list for user {_YL}" + user + "{_LS}:");
for(String group : result.getOrderedGroups())
answer.add("{_LG}" + group);
throw new CommandAnswerException(answer);
}
*/
private void addGroup(ResolutionResult result, String group, String parent, String destination, Integer seconds) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
final DatabaseEditor databaseTransaction = new DatabaseEditor(rscp);
databaseTransaction.apply();
throw new CommandAnswerException(answer);
}
private void removeGroup(ResolutionResult result, String group, String parent) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
throw new CommandAnswerException(answer);
}
}

122
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandUser.java

@ -1,122 +0,0 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import java.util.ArrayList;
import java.util.Map;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseEditor;
import ru.simsonic.rscPermissions.Engine.Matchers;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
public class CommandUser
{
private final BukkitPluginMain rscp;
CommandUser(BukkitPluginMain plugin)
{
this.rscp = plugin;
}
public void onUserCommandHub(CommandSender sender, String[] args) throws CommandAnswerException
{
/*
/rscp - command
user - 0
<entity> - 1 // -u; --by-uuid / -n (--by-name)
*/
if(sender.hasPermission("rscp.admin"))
{
if(args.length < 3)
return;
final Player player = BukkitUtilities.findOnlinePlayer(args[1]);
if(player != null)
args[1] = player.getName();
final ResolutionResult result = (player != null)
? rscp.permissionManager.getResult(player)
: rscp.permissionManager.getResult(args[1]);
switch(args[2].toLowerCase())
{
case "prefix":
case "p":
viewPrefix(result, args[1]);
break;
case "suffix":
case "s":
viewSuffix(result, args[1]);
break;
case "listpermissions":
case "lp":
listPermissions(result, args[1]);
break;
case "listgroups":
case "lg":
listGroups(result, args[1]);
break;
case "addgroup":
case "ag":
// TO DO HERE
addGroup(result, args[1], null, null, null);
break;
case "removegroup":
case "rg":
// TO DO HERE
removeGroup(result, args[1], null);
break;
default:
break;
}
} else
throw new CommandAnswerException("Not enough permissions.");
}
private void viewPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void listPermissions(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Permission list for user {_YL}" + user + "{_LS}:");
for(Map.Entry<String, Boolean> entry : result.getPermissions().entrySet())
answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey());
throw new CommandAnswerException(answer);
}
private void listGroups(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Group list for user {_YL}" + user + "{_LS}:");
for(String group : result.getOrderedGroups())
answer.add("{_LG}" + group);
throw new CommandAnswerException(answer);
}
private void addGroup(ResolutionResult result, String user, String parent, String destination, Integer seconds) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
final DatabaseEditor databaseTransaction = new DatabaseEditor(rscp);
databaseTransaction.apply();
throw new CommandAnswerException(answer);
}
private void removeGroup(ResolutionResult result, String user, String parent) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
throw new CommandAnswerException(answer);
}
}

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

@ -3,6 +3,7 @@ package ru.simsonic.rscPermissions.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.BridgeForBukkitAPI;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
@ -120,52 +121,56 @@ public final class VaultChat extends VaultDeprecatedChat
public String getGroupPrefix(String world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.findGroupRow(group).prefix;
final RowEntity entity = rscp.internalCache.findGroupEntity(group);
return entity != null ? entity.prefix : null;
}
@Override
public String getGroupPrefix(World world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.findGroupRow(group).prefix;
final RowEntity entity = rscp.internalCache.findGroupEntity(group);
return entity != null ? entity.prefix : null;
}
// ***** GET GROUP SUFFIX *****
@Override
public String getGroupSuffix(String world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.findGroupRow(group).suffix;
final RowEntity entity = rscp.internalCache.findGroupEntity(group);
return entity != null ? entity.suffix : null;
}
@Override
public String getGroupSuffix(World world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.findGroupRow(group).suffix;
final RowEntity entity = rscp.internalCache.findGroupEntity(group);
return entity != null ? entity.suffix : null;
}
// ***** SET GROUP PREFIX *****
@Override
public void setGroupPrefix(World world, String group, String prefix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
throw new UnsupportedOperationException("This method is still unsupported by rscPermissions.");
}
@Override
public void setGroupPrefix(String world, String group, String prefix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
throw new UnsupportedOperationException("This method is still unsupported by rscPermissions.");
}
// ***** SET GROUP SUFFIX *****
@Override
public void setGroupSuffix(String world, String group, String suffix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
throw new UnsupportedOperationException("This method is still unsupported by rscPermissions.");
}
@Override
public void setGroupSuffix(World world, String group, String suffix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
throw new UnsupportedOperationException("This method is still unsupported by rscPermissions.");
}
// ***** DELEGATED TO PERMISSION *****
@Override

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

@ -22,9 +22,9 @@ import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration;
import ru.simsonic.rscPermissions.Bukkit.BukkitRegionProviders;
import ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands;
import ru.simsonic.rscPermissions.Bukkit.RegionUpdateObserver;
import ru.simsonic.rscPermissions.Engine.Backends.BackendDatabase;
import ru.simsonic.rscPermissions.Engine.Backends.BackendJson;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseEditor;
import ru.simsonic.rscPermissions.Engine.InternalCache;
import ru.simsonic.rscPermissions.Engine.Phrases;
@ -34,7 +34,7 @@ public final class BukkitPluginMain extends JavaPlugin
public final Settings settings = new BukkitPluginConfiguration(this);
public final BukkitUpdater updating = new BukkitUpdater(this, Settings.UPDATER_URL, Settings.CHAT_PREFIX, Settings.UPDATE_CMD);
public final BackendJson localStorage = new BackendJson(getDataFolder());
public final BackendDatabase connection = new BackendDatabase(consoleLog);
public final DatabaseEditor connection = new DatabaseEditor(this);
public final InternalCache internalCache = new InternalCache();
public final BukkitCommands commandHelper = new BukkitCommands(this);
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);

4
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java

@ -131,7 +131,7 @@ public class DatabaseContents
permissions = new RowPermission[] {};
if(inheritance == null)
inheritance = new RowInheritance[] {};
final ArrayList<RowPermission> lp = new ArrayList<>();
final ArrayList<RowPermission> lp = new ArrayList<>();
final ArrayList<RowInheritance> li = new ArrayList<>();
// Permissions
for(RowPermission row : permissions)
@ -146,7 +146,7 @@ public class DatabaseContents
}
public boolean isEmpty()
{
return !((entities != null && entities.length > 0)
return !((entities != null && entities.length > 0)
&& (permissions != null && permissions.length > 0)
&& (inheritance != null && inheritance.length > 0));
}

88
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java

@ -5,14 +5,16 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.bukkit.Bukkit;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
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.BukkitPluginMain;
public class DatabaseEditor
public class DatabaseEditor extends BackendDatabase
{
private final BukkitPluginMain plugin;
private final Map<String, RowEntity> entities = new HashMap<>();
@ -20,13 +22,22 @@ public class DatabaseEditor
private final Map<String, RowInheritance> inheritance = new HashMap<>();
public DatabaseEditor(BukkitPluginMain rscp)
{
super(Bukkit.getLogger());
this.plugin = rscp;
}
public void fill(DatabaseContents contents)
@Override
public DatabaseContents retrieveContents()
{
final DatabaseContents result = super.retrieveContents();
result.normalize();
storeRowsIDs(result);
return result;
}
private void storeRowsIDs(DatabaseContents contents)
{
clear();
for(RowEntity row : contents.entities)
entities.put(row.splittedId, row);
entities.put (row.splittedId, row);
for(RowPermission row : contents.permissions)
permissions.put(row.splittedId, row);
for(RowInheritance row : contents.inheritance)
@ -38,26 +49,29 @@ public class DatabaseEditor
permissions.clear();
inheritance.clear();
}
public void removeEntity(String splittedId)
public void removePermission(RowPermission row)
{
// Do I know something about such row?
final RowEntity row = entities.get(splittedId);
if(row == null)
return;
// Find if it is part of a multidata row
final List<RowEntity> fromSameRow = new LinkedList<>();
for(RowEntity test : entities.values())
if(test != row && test.id == row.id)
fromSameRow.add(test);
// TO DO : REMOVE ENTITY ROW HERE
// Restore all data that contained in that row
if(!fromSameRow.isEmpty())
final RowPermission replacement = restorePermissionsAfterDelete(null, row);
// delete row
super.removePermissionsById(row.id);
// restore replacement
if(replacement != null)
{
// DO RESTORE
addPermission(replacement);
}
}
public void addPermission(RowPermission row)
{
super.insertPermissions(
(row.id != 0 ? Long.valueOf(row.id) : null),
row.entity,
row.entityType,
row.permission,
row.value,
row.destination.toString(),
(row.expirience != 0 ? row.expirience : null),
/* FIX LIFETIME */ 0);
}
public void apply() throws CommandAnswerException
{
final DatabaseContents contents = prepareChanges();
@ -137,8 +151,8 @@ public class DatabaseEditor
{
final RowPermission merged = remove.clone();
merged.entity = GenericChatCodes.glue(names.toArray(new String[names.size()]), "; \n");
merged.permission = GenericChatCodes.glue(perms.toArray(new String[names.size()]), "; \n");
merged.destinationSource = GenericChatCodes.glue(dests.toArray(new String[names.size()]), "; \n");
merged.permission = GenericChatCodes.glue(perms.toArray(new String[perms.size()]), "; \n");
merged.destinationSource = GenericChatCodes.glue(dests.toArray(new String[dests.size()]), "; \n");
return merged;
} catch(CloneNotSupportedException ex) {
// IMPOSSIBLE
@ -146,8 +160,38 @@ public class DatabaseEditor
}
return null;
}
private RowPermission restoreInheritanceAfterDelete(DatabaseContents contents, RowInheritance remove)
private RowInheritance restoreInheritanceAfterDelete(DatabaseContents contents, RowInheritance remove)
{
final LinkedList<RowInheritance> sameIDs = new LinkedList<>();
for(RowInheritance row : contents.inheritance)
if(row.id == remove.id)
sameIDs.add(row);
if(sameIDs.isEmpty() == false)
{
final HashSet<String> names = new HashSet<>();
final HashSet<String> prnts = new HashSet<>();
final HashSet<String> dests = new HashSet<>();
for(RowInheritance row : sameIDs)
{
// assert remove.value == row.value;
// assert remove.expirience == row.expirience;
// assert remove.entityType.equals(row.entityType);
// assert remove.lifetime.equals(row.lifetime);
names.add(row.entity);
prnts.add(row.parent);
dests.add(row.destination.toString());
}
try
{
final RowInheritance merged = remove.clone();
merged.entity = GenericChatCodes.glue(names.toArray(new String[names.size()]), "; \n");
merged.parent = GenericChatCodes.glue(prnts.toArray(new String[prnts.size()]), "; \n");
merged.destinationSource = GenericChatCodes.glue(dests.toArray(new String[dests.size()]), "; \n");
return merged;
} catch(CloneNotSupportedException ex) {
// IMPOSSIBLE
}
}
return null;
}
}

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

@ -3,11 +3,11 @@ package ru.simsonic.rscPermissions.Engine;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity;
@ -26,19 +26,9 @@ public class InternalCache extends InternalStorage
this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup;
this.groupsInheritParentPrefixes = groupsInheritParentPrefixes;
}
public synchronized RowEntity findGroupRow(String group)
{
if(group != null && !"".equals(group))
{
final RowEntity row = entities_g.get(group.toLowerCase());
if(row != null)
return row;
}
return new RowEntity();
}
public synchronized Set<String> getKnownGroups()
{
final HashSet<String> result = new HashSet<>(entities_g.size());
final Set<String> result = new TreeSet<>();
for(RowEntity row : entities_g.values())
result.add(row.entity);
return result;

16
src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java

@ -30,7 +30,7 @@ class InternalStorage
implicit_g = entities_g.get("");
implicit_u = entities_u.get("");
}
public boolean isFreshData()
public synchronized boolean isFreshData()
{
return freshRemoteData;
}
@ -151,6 +151,20 @@ class InternalStorage
defaultInheritance.childType = EntityType.PLAYER;
defaultInheritance.entityParent = entities_g.get(defaultInheritance.parent.toLowerCase());
}
public synchronized RowEntity findUserEntity(String entity)
{
final RowEntity result = entities_u.get(entity);
if(result != null)
return result;
for(RowEntity row : entities_u.values())
if(row.entity.equalsIgnoreCase(entity))
return row;
return null;
}
public synchronized RowEntity findGroupEntity(String entity)
{
return entities_g.get(entity.toLowerCase());
}
public synchronized void clear()
{
entities_g.clear();

5
src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.Settings;
@ -47,10 +48,10 @@ public class ResolutionResult extends IntermediateResult
public String[] getDeorderedGroups()
{
final ArrayList<String> list = new ArrayList(groups.size());
final String separator = new String(new char[] { Settings.SHOW_GROUP_LEVEL });
final String separator = Pattern.quote(new String(new char[] { Settings.SHOW_GROUP_LEVEL }));
for(String group : groups)
{
String[] splitted = group.split(separator);
final String[] splitted = group.split(separator);
list.add(splitted[splitted.length - 1]);
}
return list.toArray(new String[list.size()]);

Loading…
Cancel
Save