Browse Source

Version is 0.9.12a:

* Debugging mode can be enabled for console with the same command /rscp debug
* When in console debugging mode, every API method call will print current stack.
* API methods returns plain groups lists, without drawing symbolic tree leafs.
master
SimSonic 10 years ago
parent
commit
39dcad5d55
  1. 2
      pom.xml
  2. 13
      src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
  3. 6
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java
  4. 13
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  5. 9
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandDebug.java
  6. 20
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
  7. 91
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
  8. 13
      src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

2
pom.xml

@ -4,7 +4,7 @@
<groupId>ru.simsonic</groupId>
<artifactId>rscPermissions</artifactId>
<version>0.9.11a</version>
<version>0.9.12a</version>
<packaging>jar</packaging>
<name>rscPermissions</name>

13
src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java

@ -2,6 +2,7 @@ package ru.simsonic.rscPermissions;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.ServicePriority;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Bukkit.VaultChat;
import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
import ru.simsonic.rscPermissions.Engine.Phrases;
@ -69,4 +70,16 @@ public class BridgeForBukkitAPI
} else
BukkitPluginMain.consoleLog.warning(GenericChatCodes.processStringStatic("[rscp] " + Phrases.INTEGRATION_V_N.toString()));
}
public void printDebugStackTrace()
{
if(rscp.permissionManager.isConsoleDebugging())
{
final StringBuilder sb = new StringBuilder(Settings.chatPrefix);
sb.append("[DEBUG] An API method was invoked from the path:\n");
for(StackTraceElement ste : Thread.currentThread().getStackTrace())
if(!ste.getClassName().equals(BridgeForBukkitAPI.class.getName()))
sb.append(ste.toString()).append(System.lineSeparator());
rscp.getServer().getConsoleSender().sendMessage(GenericChatCodes.processStringStatic(sb.toString()));
}
}
}

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

@ -1,7 +1,7 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.entity.Player;
import org.bukkit.command.CommandSender;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.BukkitPluginMain;
@ -62,14 +62,14 @@ public class BukkitDatabaseFetcher extends RestartableThread
} catch(InterruptedException ex) {
}
final long queryTime = System.currentTimeMillis() - queryStartTime;
final Set<Player> debuggers = rscp.permissionManager.getDebuggers();
final Set<CommandSender> debuggers = rscp.permissionManager.getDebuggers();
if(!debuggers.isEmpty())
rscp.getServer().getScheduler().runTask(rscp, new Runnable()
{
@Override
public void run()
{
for(Player debugger : debuggers)
for(CommandSender debugger : debuggers)
debugger.sendMessage(GenericChatCodes.processStringStatic(Settings.chatPrefix
+ "Database has been fetched in " + queryTime + " milliseconds."));
}

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

@ -9,6 +9,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import ru.simsonic.rscPermissions.API.Settings;
@ -31,7 +32,7 @@ public class BukkitPermissionManager extends RestartableThread
private final Map<Player, PermissionAttachment> attachments = new HashMap<>();
private final Map<Player, Map<String, Boolean>> persistent = new HashMap<>();
private final Map<Player, Map<String, Boolean>> temporary = new HashMap<>();
private final Set<Player> debug = new HashSet<>();
private final Set<CommandSender> debug = new HashSet<>();
public void recalculateOnlinePlayers()
{
updateQueue.addAll(Tools.getOnlinePlayers());
@ -200,21 +201,25 @@ public class BukkitPermissionManager extends RestartableThread
result.add(socketAddress.getAddress().getHostAddress());
return result.toArray(new String[result.size()]);
}
public Set<Player> getDebuggers()
public Set<CommandSender> getDebuggers()
{
synchronized(debug)
{
return new HashSet<>(debug);
}
}
public boolean isDebugging(Player target)
public boolean isConsoleDebugging()
{
return isDebugging(rscp.getServer().getConsoleSender());
}
public boolean isDebugging(CommandSender target)
{
synchronized(debug)
{
return debug.contains(target);
}
}
public void setDebugging(Player target, boolean value)
public void setDebugging(CommandSender target, boolean value)
{
synchronized(debug)
{

9
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandDebug.java

@ -1,7 +1,5 @@
package ru.simsonic.rscPermissions.Bukkit.Commands;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Phrases;
import ru.simsonic.rscUtilityLibrary.Bukkit.Commands.CommandAnswerException;
@ -15,12 +13,9 @@ public class CommandDebug
}
public void execute(CommandSender sender, String args[]) throws CommandAnswerException
{
if(sender instanceof ConsoleCommandSender)
throw new CommandAnswerException(Phrases.PLUGIN_PLAYER_ONLY.toString());
if(sender.hasPermission("rscp.admin"))
{
final Player player = (Player)sender;
boolean isDebugging = rscp.permissionManager.isDebugging(player);
boolean isDebugging = rscp.permissionManager.isDebugging(sender);
if(args.length >= 2)
{
try
@ -31,7 +26,7 @@ public class CommandDebug
}
} else
isDebugging = !isDebugging;
rscp.permissionManager.setDebugging(player, isDebugging);
rscp.permissionManager.setDebugging(sender, isDebugging);
throw new CommandAnswerException(isDebugging ? Phrases.DEBUG_ON.toString() : Phrases.DEBUG_OFF.toString());
}
}

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

@ -32,12 +32,14 @@ public final class VaultChat extends VaultDeprecatedChat
@Override
public String getPlayerPrefix(String world, OfflinePlayer player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.prefix;
}
@Override
public String getPlayerPrefix(Player player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.prefix;
}
@ -45,6 +47,7 @@ public final class VaultChat extends VaultDeprecatedChat
@Deprecated
public String getPlayerPrefix(String world, String player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.prefix;
}
@ -52,12 +55,14 @@ public final class VaultChat extends VaultDeprecatedChat
@Override
public String getPlayerSuffix(String world, OfflinePlayer player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.suffix;
}
@Override
public String getPlayerSuffix(Player player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.suffix;
}
@ -65,6 +70,7 @@ public final class VaultChat extends VaultDeprecatedChat
@Deprecated
public String getPlayerSuffix(String world, String player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.suffix;
}
@ -72,78 +78,92 @@ public final class VaultChat extends VaultDeprecatedChat
@Override
public void setPlayerPrefix(String world, OfflinePlayer player, String prefix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerPrefix(Player player, String prefix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
@Deprecated
public void setPlayerPrefix(String world, String player, String prefix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
// ***** SET PLAYER SUFFIX *****
@Override
public void setPlayerSuffix(String world, OfflinePlayer player, String suffix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public void setPlayerSuffix(Player player, String suffix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
@Deprecated
public void setPlayerSuffix(String world, String player, String suffix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
// ***** GET GROUP PREFIX *****
@Override
public String getGroupPrefix(String world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).prefix;
}
@Override
public String getGroupPrefix(World world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).prefix;
}
// ***** GET GROUP SUFFIX *****
@Override
public String getGroupSuffix(String world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).suffix;
}
@Override
public String getGroupSuffix(World world, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).suffix;
}
// ***** 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.");
}
@Override
public void setGroupPrefix(String world, String group, String prefix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is 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.");
}
@Override
public void setGroupSuffix(World world, String group, String suffix)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
// ***** DELEGATED TO PERMISSION *****

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

@ -1,4 +1,5 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.util.Set;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
@ -32,10 +33,9 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
return true;
}
@Override
@Deprecated
public boolean playerHas(String world, String player, String permission)
public boolean hasGroupSupport()
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
return true;
}
@Override
@Deprecated
@ -77,16 +77,6 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public String[] getGroups()
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean hasGroupSupport()
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean has(CommandSender sender, String permission)
{
return sender.hasPermission(permission);
@ -94,174 +84,229 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss
@Override
public boolean has(Player player, String permission)
{
return player.hasPermission(permission);
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.permissionManager.getResult(player).hasPermission(permission);
}
@Override
@Deprecated
public boolean playerHas(String world, String player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.permissionManager.getResult(player).hasPermission(permission);
}
@Override
public boolean playerHas(String world, OfflinePlayer player, String permission)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.permissionManager.getResult(player).hasPermission(permission);
}
@Override
public boolean playerHas(Player player, String permission)
{
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.permissionManager.getResult(player).hasPermission(permission);
}
@Override
public boolean playerAdd(String world, OfflinePlayer player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAdd(Player player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(OfflinePlayer player, String permission) throws UnsupportedOperationException
public boolean playerAddTransient(OfflinePlayer player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(Player player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddTransient(String worldName, Player player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(String worldName, Player player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemove(String world, OfflinePlayer player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
@Deprecated
public boolean playerRemove(World world, String player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemove(Player player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(OfflinePlayer player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveTransient(Player player, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupHas(World world, String group, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupAdd(World world, String group, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean groupRemove(World world, String group, String permission)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(String world, OfflinePlayer player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerAddGroup(Player player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveGroup(String world, OfflinePlayer player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
public boolean playerRemoveGroup(Player player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
throw new UnsupportedOperationException("This method is unsupported by rscPermissions.");
}
@Override
@Deprecated
public boolean playerInGroup(String world, String player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.contains(group);
for(String parent : result.getDeorderedGroups())
if(parent.equalsIgnoreCase(group))
return true;
return false;
}
@Override
public boolean playerInGroup(String world, OfflinePlayer player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.contains(group);
for(String parent : result.getDeorderedGroups())
if(parent.equalsIgnoreCase(group))
return true;
return false;
}
@Override
public boolean playerInGroup(Player player, String group)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.contains(group);
for(String parent : result.getDeorderedGroups())
if(parent.equalsIgnoreCase(group))
return true;
return false;
}
@Override
@Deprecated
public String[] getPlayerGroups(String world, String player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.toArray(new String[result.groups.size()]);
return result.getDeorderedGroups();
}
@Override
public String[] getPlayerGroups(String world, OfflinePlayer player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.toArray(new String[result.groups.size()]);
return result.getDeorderedGroups();
}
@Override
public String[] getPlayerGroups(Player player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final ResolutionResult result = rscp.permissionManager.getResult(player);
return result.groups.toArray(new String[result.groups.size()]);
return result.getDeorderedGroups();
}
@Override
@Deprecated
public String getPrimaryGroup(String world, String player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final String[] groups = getPlayerGroups(world, player);
return groups.length > 0 ? groups[groups.length - 1] : rscp.settings.getDefaultGroup();
}
@Override
public String getPrimaryGroup(String world, OfflinePlayer player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final String[] groups = getPlayerGroups(world, player);
return groups.length > 0 ? groups[groups.length - 1] : rscp.settings.getDefaultGroup();
}
@Override
public String getPrimaryGroup(Player player)
{
rscp.bridgeForBukkit.printDebugStackTrace();
final String[] groups = getPlayerGroups(player);
return groups.length > 0 ? groups[groups.length - 1] : rscp.settings.getDefaultGroup();
}
@Override
public String[] getGroups()
{
rscp.bridgeForBukkit.printDebugStackTrace();
final Set<String> groups = rscp.internalCache.getGroups();
return groups.toArray(new String[groups.size()]);
}
}

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

@ -1,6 +1,8 @@
package ru.simsonic.rscPermissions.Engine;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import ru.simsonic.rscPermissions.API.Settings;
public class ResolutionResult
{
@ -15,4 +17,15 @@ public class ResolutionResult
return entry.getValue();
return false;
}
public String[] getDeorderedGroups()
{
final ArrayList<String> list = new ArrayList(groups.size());
final String separator = new String(new char[] { Settings.groupLevelTab });
for(String group : groups)
{
String[] splitted = group.split(separator);
list.add(splitted[splitted.length - 1]);
}
return list.toArray(new String[list.size()]);
}
}

Loading…
Cancel
Save