1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-12 09:35:26 +02:00

Update all code formatting to use tabs for indentation.

This commit is contained in:
ElgarL
2012-04-13 14:40:26 +01:00
parent 677534c0b7
commit a028abe036
29 changed files with 3683 additions and 3354 deletions

View File

@@ -177,3 +177,4 @@ v 2.0:
- Expand GlobalGroups.yml and groups.yml to cover the VanishNoPacket plugin. Demonstrating how to negate and add nodes when using the '*' permission with inheritance. - Expand GlobalGroups.yml and groups.yml to cover the VanishNoPacket plugin. Demonstrating how to negate and add nodes when using the '*' permission with inheritance.
- Fix silly nested throw/catch statements. Errors are now correctly generated when reading yml's. - Fix silly nested throw/catch statements. Errors are now correctly generated when reading yml's.
- Unregister the worldsHolder as a service on a reload/shutdown instead of the whole plugin. - Unregister the worldsHolder as a service on a reload/shutdown instead of the whole plugin.
- Update all code formatting to use tabs for indentation.

View File

@@ -18,76 +18,84 @@ import org.bukkit.configuration.file.YamlConfiguration;
*/ */
public class GMConfiguration { public class GMConfiguration {
private GroupManager plugin; private GroupManager plugin;
private File configFile; private File configFile;
private YamlConfiguration GMconfig; private YamlConfiguration GMconfig;
public GMConfiguration(GroupManager plugin) { public GMConfiguration(GroupManager plugin) {
this.plugin = plugin;
load();
}
public void load() { this.plugin = plugin;
if (!plugin.getDataFolder().exists()) { load();
plugin.getDataFolder().mkdirs(); }
}
configFile = new File(plugin.getDataFolder(), "config.yml");
if (!configFile.exists()) { public void load() {
try {
Tasks.copy(plugin.getResourceAsStream("config.yml"), configFile);
} catch (IOException ex) {
GroupManager.logger.log(Level.SEVERE, null, ex);
}
}
GMconfig = new YamlConfiguration(); if (!plugin.getDataFolder().exists()) {
plugin.getDataFolder().mkdirs();
}
configFile = new File(plugin.getDataFolder(), "config.yml");
try { if (!configFile.exists()) {
GMconfig.load(configFile); try {
} catch (Exception ex) { Tasks.copy(plugin.getResourceAsStream("config.yml"), configFile);
throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex); } catch (IOException ex) {
} GroupManager.logger.log(Level.SEVERE, null, ex);
}
}
// Setup defaults GMconfig = new YamlConfiguration();
adjustLoggerLevel();
plugin.setValidateOnlinePlayer(isToggleValidate());
}
public boolean isOpOverride() { try {
return GMconfig.getBoolean("settings.config.opOverrides", true); GMconfig.load(configFile);
} } catch (Exception ex) {
public boolean isToggleValidate() { throw new IllegalArgumentException("The following file couldn't pass on Parser.\n" + configFile.getPath(), ex);
return GMconfig.getBoolean("settings.config.validate_toggle", true); }
}
// Setup defaults
adjustLoggerLevel();
plugin.setValidateOnlinePlayer(isToggleValidate());
}
public boolean isOpOverride() {
return GMconfig.getBoolean("settings.config.opOverrides", true);
}
public boolean isToggleValidate() {
return GMconfig.getBoolean("settings.config.validate_toggle", true);
}
public Map<String, Object> getMirrorsMap() { public Map<String, Object> getMirrorsMap() {
// Try to fetch the old mirror path first
// Try to fetch the old mirror path first
if (GMconfig.isConfigurationSection("settings.permission.world.mirror")) { if (GMconfig.isConfigurationSection("settings.permission.world.mirror")) {
return (Map<String, Object>) GMconfig.getConfigurationSection("settings.permission.world.mirror").getValues(false); return (Map<String, Object>) GMconfig.getConfigurationSection("settings.permission.world.mirror").getValues(false);
} else if (GMconfig.isConfigurationSection("settings.mirrors")){ } else if (GMconfig.isConfigurationSection("settings.mirrors")) {
return (Map<String, Object>) GMconfig.getConfigurationSection("settings.mirrors").getValues(false); return (Map<String, Object>) GMconfig.getConfigurationSection("settings.mirrors").getValues(false);
} }
return null; return null;
} }
public Integer getSaveInterval() { public Integer getSaveInterval() {
return GMconfig.getInt("settings.data.save.minutes", 10);
}
public Integer getBackupDuration() { return GMconfig.getInt("settings.data.save.minutes", 10);
return GMconfig.getInt("settings.data.save.hours", 24); }
}
public void adjustLoggerLevel() { public Integer getBackupDuration() {
try { return GMconfig.getInt("settings.data.save.hours", 24);
GroupManager.logger.setLevel(Level.parse(GMconfig.getString("settings.logging.level", "INFO"))); }
return;
} catch (Exception e) {
}
GroupManager.logger.setLevel(Level.INFO); public void adjustLoggerLevel() {
}
try {
GroupManager.logger.setLevel(Level.parse(GMconfig.getString("settings.logging.level", "INFO")));
return;
} catch (Exception e) {
}
GroupManager.logger.setLevel(Level.INFO);
}
} }

View File

@@ -24,8 +24,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
/** /**
* @author ElgarL * @author ElgarL
* *
@@ -42,6 +40,7 @@ public class GlobalGroups {
protected File GlobalGroupsFile = null; protected File GlobalGroupsFile = null;
public GlobalGroups(GroupManager plugin) { public GlobalGroups(GroupManager plugin) {
this.plugin = plugin; this.plugin = plugin;
load(); load();
} }
@@ -50,6 +49,7 @@ public class GlobalGroups {
* @return the haveGroupsChanged * @return the haveGroupsChanged
*/ */
public boolean haveGroupsChanged() { public boolean haveGroupsChanged() {
if (this.haveGroupsChanged) { if (this.haveGroupsChanged) {
return true; return true;
} }
@@ -65,12 +65,15 @@ public class GlobalGroups {
* @return the timeStampGroups * @return the timeStampGroups
*/ */
public long getTimeStampGroups() { public long getTimeStampGroups() {
return timeStampGroups; return timeStampGroups;
} }
/** /**
* @param timeStampGroups the timeStampGroups to set * @param timeStampGroups the timeStampGroups to set
*/ */
protected void setTimeStampGroups(long timeStampGroups) { protected void setTimeStampGroups(long timeStampGroups) {
this.timeStampGroups = timeStampGroups; this.timeStampGroups = timeStampGroups;
} }
@@ -79,6 +82,7 @@ public class GlobalGroups {
* the haveGroupsChanged to set * the haveGroupsChanged to set
*/ */
public void setGroupsChanged(boolean haveGroupsChanged) { public void setGroupsChanged(boolean haveGroupsChanged) {
this.haveGroupsChanged = haveGroupsChanged; this.haveGroupsChanged = haveGroupsChanged;
} }
@@ -118,34 +122,34 @@ public class GlobalGroups {
try { try {
allGroups = (Map<String, Object>) GGroups.getConfigurationSection("groups").getValues(false); allGroups = (Map<String, Object>) GGroups.getConfigurationSection("groups").getValues(false);
} catch (Exception ex) { } catch (Exception ex) {
//ex.printStackTrace(); // ex.printStackTrace();
throw new IllegalArgumentException("Your " + GlobalGroupsFile.getPath() + " file is invalid. See console for details.", ex); throw new IllegalArgumentException("Your " + GlobalGroupsFile.getPath() + " file is invalid. See console for details.", ex);
} }
// Load each groups permissions list. // Load each groups permissions list.
if (allGroups != null) { if (allGroups != null) {
Iterator<String> groupItr = allGroups.keySet().iterator(); Iterator<String> groupItr = allGroups.keySet().iterator();
String groupName; String groupName;
Integer groupCount = 0; Integer groupCount = 0;
/* /*
* loop each group entry * loop each group entry
* and read it's data. * and read it's data.
*/ */
while (groupItr.hasNext()) { while (groupItr.hasNext()) {
try { try {
groupCount++; groupCount++;
// Attempt to fetch the next group name. // Attempt to fetch the next group name.
groupName = groupItr.next(); groupName = groupItr.next();
} catch (Exception ex) { } catch (Exception ex) {
throw new IllegalArgumentException("Invalid group name for GlobalGroup entry (" + groupCount + ") in file: " + GlobalGroupsFile.getPath(), ex); throw new IllegalArgumentException("Invalid group name for GlobalGroup entry (" + groupCount + ") in file: " + GlobalGroupsFile.getPath(), ex);
} }
/* /*
* Create a new group with this name. * Create a new group with this name.
*/ */
Group newGroup = new Group(groupName.toLowerCase()); Group newGroup = new Group(groupName.toLowerCase());
Object element; Object element;
// Permission nodes // Permission nodes
@@ -172,8 +176,8 @@ public class GlobalGroups {
if (element instanceof MemorySection) { if (element instanceof MemorySection) {
Map<String, Object> vars = new HashMap<String, Object>(); Map<String, Object> vars = new HashMap<String, Object>();
for (String key : ((MemorySection) element).getKeys(false)) { for (String key : ((MemorySection) element).getKeys(false)) {
vars.put(key, ((MemorySection) element).get(key)); vars.put(key, ((MemorySection) element).get(key));
} }
newGroup.setVariables(vars); newGroup.setVariables(vars);
} else } else
throw new IllegalArgumentException("Unknown type of info node for global group: " + groupName); throw new IllegalArgumentException("Unknown type of info node for global group: " + groupName);
@@ -188,7 +192,7 @@ public class GlobalGroups {
setTimeStampGroups(GlobalGroupsFile.lastModified()); setTimeStampGroups(GlobalGroupsFile.lastModified());
GroupManager.setLoaded(true); GroupManager.setLoaded(true);
//GlobalGroupsFile = null; // GlobalGroupsFile = null;
} }
/** /**
@@ -197,7 +201,7 @@ public class GlobalGroups {
public void writeGroups(boolean overwrite) { public void writeGroups(boolean overwrite) {
//File GlobalGroupsFile = new File(plugin.getDataFolder(), "globalgroups.yml"); // File GlobalGroupsFile = new File(plugin.getDataFolder(), "globalgroups.yml");
if (haveGroupsChanged()) { if (haveGroupsChanged()) {
if (overwrite || (!overwrite && (getTimeStampGroups() >= GlobalGroupsFile.lastModified()))) { if (overwrite || (!overwrite && (getTimeStampGroups() >= GlobalGroupsFile.lastModified()))) {
@@ -214,13 +218,13 @@ public class GlobalGroups {
// Info nodes // Info nodes
Map<String, Object> infoMap = new HashMap<String, Object>(); Map<String, Object> infoMap = new HashMap<String, Object>();
aGroupMap.put("info", infoMap); aGroupMap.put("info", infoMap);
for (String infoKey : group.getVariables().getVarKeyList()) { for (String infoKey : group.getVariables().getVarKeyList()) {
infoMap.put(infoKey, group.getVariables().getVarObject(infoKey)); infoMap.put(infoKey, group.getVariables().getVarObject(infoKey));
} }
// Permission nodes // Permission nodes
aGroupMap.put("permissions", group.getPermissionList()); aGroupMap.put("permissions", group.getPermissionList());
} }
@@ -236,36 +240,37 @@ public class GlobalGroups {
} }
setTimeStampGroups(GlobalGroupsFile.lastModified()); setTimeStampGroups(GlobalGroupsFile.lastModified());
} else { } else {
// Newer file found. // Newer file found.
GroupManager.logger.log(Level.WARNING, "Newer GlobalGroups file found, but we have local changes!"); GroupManager.logger.log(Level.WARNING, "Newer GlobalGroups file found, but we have local changes!");
throw new IllegalStateException("Unable to save unless you issue a '/mansave force'"); throw new IllegalStateException("Unable to save unless you issue a '/mansave force'");
} }
removeGroupsChangedFlag(); removeGroupsChangedFlag();
} else { } else {
//Check for newer file as no local changes. // Check for newer file as no local changes.
if (getTimeStampGroups() < GlobalGroupsFile.lastModified()) { if (getTimeStampGroups() < GlobalGroupsFile.lastModified()) {
System.out.print("Newer GlobalGroups file found (Loading changes)!"); System.out.print("Newer GlobalGroups file found (Loading changes)!");
// Backup GlobalGroups file // Backup GlobalGroups file
backupFile(); backupFile();
load(); load();
} }
} }
} }
/** /**
* Backup the BlobalGroups file * Backup the BlobalGroups file
* @param w *
*/ * @param w
private void backupFile() { */
private void backupFile() {
File backupFile = new File(plugin.getBackupFolder(), "bkp_ggroups_" + Tasks.getDateString() + ".yml"); File backupFile = new File(plugin.getBackupFolder(), "bkp_ggroups_" + Tasks.getDateString() + ".yml");
try { try {
Tasks.copy(GlobalGroupsFile, backupFile); Tasks.copy(GlobalGroupsFile, backupFile);
} catch (IOException ex) { } catch (IOException ex) {
GroupManager.logger.log(Level.SEVERE, null, ex); GroupManager.logger.log(Level.SEVERE, null, ex);
} }
} }
/** /**
* Adds a group, or replaces an existing one. * Adds a group, or replaces an existing one.
@@ -273,6 +278,7 @@ public class GlobalGroups {
* @param groupToAdd * @param groupToAdd
*/ */
public void addGroup(Group groupToAdd) { public void addGroup(Group groupToAdd) {
// Create a new group if it already exists // Create a new group if it already exists
if (hasGroup(groupToAdd.getName())) { if (hasGroup(groupToAdd.getName())) {
groupToAdd = groupToAdd.clone(); groupToAdd = groupToAdd.clone();
@@ -280,9 +286,9 @@ public class GlobalGroups {
} }
newGroup(groupToAdd); newGroup(groupToAdd);
haveGroupsChanged = true; haveGroupsChanged = true;
if (GroupManager.isLoaded()) if (GroupManager.isLoaded())
GroupManagerEventHandler.callEvent(groupToAdd, GMGroupEvent.Action.GROUP_ADDED); GroupManagerEventHandler.callEvent(groupToAdd, GMGroupEvent.Action.GROUP_ADDED);
} }
/** /**
@@ -291,6 +297,7 @@ public class GlobalGroups {
* @param newGroup * @param newGroup
*/ */
public Group newGroup(Group newGroup) { public Group newGroup(Group newGroup) {
// Push a new group // Push a new group
if (!groups.containsKey(newGroup.getName().toLowerCase())) { if (!groups.containsKey(newGroup.getName().toLowerCase())) {
groups.put(newGroup.getName().toLowerCase(), newGroup); groups.put(newGroup.getName().toLowerCase(), newGroup);
@@ -306,6 +313,7 @@ public class GlobalGroups {
* @param groupName * @param groupName
*/ */
public boolean removeGroup(String groupName) { public boolean removeGroup(String groupName) {
// Push a new group // Push a new group
if (groups.containsKey(groupName.toLowerCase())) { if (groups.containsKey(groupName.toLowerCase())) {
groups.remove(groupName.toLowerCase()); groups.remove(groupName.toLowerCase());
@@ -324,6 +332,7 @@ public class GlobalGroups {
* @return true if the group exists * @return true if the group exists
*/ */
public boolean hasGroup(String groupName) { public boolean hasGroup(String groupName) {
return groups.containsKey(groupName.toLowerCase()); return groups.containsKey(groupName.toLowerCase());
} }
@@ -379,6 +388,7 @@ public class GlobalGroups {
* @return List of all group names * @return List of all group names
*/ */
public List<String> getGroupsPermissions(String groupName) { public List<String> getGroupsPermissions(String groupName) {
if (!hasGroup(groupName)) if (!hasGroup(groupName))
return null; return null;
@@ -391,6 +401,7 @@ public class GlobalGroups {
* @return Set containing all group names. * @return Set containing all group names.
*/ */
public Set<String> getGlobalGroups() { public Set<String> getGlobalGroups() {
return groups.keySet(); return groups.keySet();
} }
@@ -398,6 +409,7 @@ public class GlobalGroups {
* Resets GlobalGroups. * Resets GlobalGroups.
*/ */
public void resetGlobalGroups() { public void resetGlobalGroups() {
this.groups = new HashMap<String, Group>(); this.groups = new HashMap<String, Group>();
} }
@@ -406,6 +418,7 @@ public class GlobalGroups {
* @return a collection of the groups * @return a collection of the groups
*/ */
public Collection<Group> getGroupList() { public Collection<Group> getGroupList() {
return groups.values(); return groups.values();
} }
@@ -416,6 +429,7 @@ public class GlobalGroups {
* @return Group object * @return Group object
*/ */
public Group getGroup(String groupName) { public Group getGroup(String groupName) {
if (!hasGroup(groupName)) if (!hasGroup(groupName))
return null; return null;
@@ -427,17 +441,19 @@ public class GlobalGroups {
* @return the globalGroupsFile * @return the globalGroupsFile
*/ */
public File getGlobalGroupsFile() { public File getGlobalGroupsFile() {
return GlobalGroupsFile; return GlobalGroupsFile;
} }
/** /**
* *
*/ */
public void removeGroupsChangedFlag() { public void removeGroupsChangedFlag() {
setGroupsChanged(false);
for (Group g : groups.values()) { setGroupsChanged(false);
g.flagAsSaved(); for (Group g : groups.values()) {
} g.flagAsSaved();
} }
}
} }

View File

@@ -45,7 +45,6 @@ import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@SuppressWarnings("unused") @SuppressWarnings("unused")
/** /**
* *
@@ -68,6 +67,7 @@ public class GroupManager extends JavaPlugin {
* @return the validateOnlinePlayer * @return the validateOnlinePlayer
*/ */
public boolean isValidateOnlinePlayer() { public boolean isValidateOnlinePlayer() {
return validateOnlinePlayer; return validateOnlinePlayer;
} }
@@ -75,6 +75,7 @@ public class GroupManager extends JavaPlugin {
* @param validateOnlinePlayer the validateOnlinePlayer to set * @param validateOnlinePlayer the validateOnlinePlayer to set
*/ */
public void setValidateOnlinePlayer(boolean validateOnlinePlayer) { public void setValidateOnlinePlayer(boolean validateOnlinePlayer) {
this.validateOnlinePlayer = validateOnlinePlayer; this.validateOnlinePlayer = validateOnlinePlayer;
} }
@@ -95,6 +96,7 @@ public class GroupManager extends JavaPlugin {
@Override @Override
public void onDisable() { public void onDisable() {
setLoaded(false); setLoaded(false);
// Un-register this service. // Un-register this service.
@@ -117,14 +119,13 @@ public class GroupManager extends JavaPlugin {
BukkitPermissions = null; BukkitPermissions = null;
} }
// EXAMPLE: Custom code, here we just output some info so we can check that // EXAMPLE: Custom code, here we just output some info so we can check that all is well
// all is well
PluginDescriptionFile pdfFile = this.getDescription(); PluginDescriptionFile pdfFile = this.getDescription();
System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!"); System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!");
GroupManager.logger.removeHandler(ch); GroupManager.logger.removeHandler(ch);
} }
//@Override // @Override
public void onEnable() { public void onEnable() {
try { try {
@@ -143,7 +144,6 @@ public class GroupManager extends JavaPlugin {
globalGroups = new GlobalGroups(this); globalGroups = new GlobalGroups(this);
worldsHolder = new WorldsHolder(this); worldsHolder = new WorldsHolder(this);
PluginDescriptionFile pdfFile = this.getDescription(); PluginDescriptionFile pdfFile = this.getDescription();
if (worldsHolder == null) { if (worldsHolder == null) {
GroupManager.logger.severe("Can't enable " + pdfFile.getName() + " version " + pdfFile.getVersion() + ", bad loading!"); GroupManager.logger.severe("Can't enable " + pdfFile.getName() + " version " + pdfFile.getVersion() + ", bad loading!");
@@ -154,15 +154,15 @@ public class GroupManager extends JavaPlugin {
// Set a few defaults (reloads) // Set a few defaults (reloads)
setLoaded(false); setLoaded(false);
// Initialize the world listener and bukkit permissions to handle // Initialize the world listener and bukkit permissions to handle events.
// events.
WorldEvents = new GMWorldListener(this); WorldEvents = new GMWorldListener(this);
BukkitPermissions = new BukkitPermissions(this); BukkitPermissions = new BukkitPermissions(this);
enableScheduler(); enableScheduler();
/* /*
* Schedule a Bukiit Permissions update for 1 tick later. All plugins * Schedule a Bukiit Permissions update for 1 tick later. All
* plugins
* will be loaded by then * will be loaded by then
*/ */
@@ -185,7 +185,7 @@ public class GroupManager extends JavaPlugin {
/* /*
* Throw an error so Bukkit knows about it. * Throw an error so Bukkit knows about it.
*/ */
throw new IllegalArgumentException(ex.getMessage(),ex); throw new IllegalArgumentException(ex.getMessage(), ex);
} }
} }
@@ -198,8 +198,8 @@ public class GroupManager extends JavaPlugin {
private void saveErrorLog(Exception ex) { private void saveErrorLog(Exception ex) {
if (!getDataFolder().exists()) { if (!getDataFolder().exists()) {
getDataFolder().mkdirs(); getDataFolder().mkdirs();
} }
lastError = ex.getMessage(); lastError = ex.getMessage();
@@ -215,10 +215,10 @@ public class GroupManager extends JavaPlugin {
GroupManager.logger.severe("==================================================="); GroupManager.logger.severe("===================================================");
// Append this error to the error log. // Append this error to the error log.
try { try {
String error = "=============================== GM ERROR LOG ===============================\n\n"; String error = "=============================== GM ERROR LOG ===============================\n\n";
error += Tasks.getStackTraceAsString(ex); error += Tasks.getStackTraceAsString(ex);
error += "\n============================================================================\n"; error += "\n============================================================================\n";
Tasks.appendStringToFile(error, (getDataFolder() + System.getProperty("file.separator") + "ERROR.LOG")); Tasks.appendStringToFile(error, (getDataFolder() + System.getProperty("file.separator") + "ERROR.LOG"));
} catch (IOException e) { } catch (IOException e) {
@@ -229,18 +229,22 @@ public class GroupManager extends JavaPlugin {
} }
public static boolean isLoaded() { public static boolean isLoaded() {
return isLoaded; return isLoaded;
} }
public static void setLoaded(boolean isLoaded) { public static void setLoaded(boolean isLoaded) {
GroupManager.isLoaded = isLoaded; GroupManager.isLoaded = isLoaded;
} }
public InputStream getResourceAsStream(String fileName) { public InputStream getResourceAsStream(String fileName) {
return this.getClassLoader().getResourceAsStream(fileName); return this.getClassLoader().getResourceAsStream(fileName);
} }
private void prepareFileFields() { private void prepareFileFields() {
// configFile = new File(this.getDataFolder(), "config.yml"); // configFile = new File(this.getDataFolder(), "config.yml");
backupFolder = new File(this.getDataFolder(), "backup"); backupFolder = new File(this.getDataFolder(), "backup");
if (!backupFolder.exists()) { if (!backupFolder.exists()) {
@@ -249,16 +253,19 @@ public class GroupManager extends JavaPlugin {
} }
private void prepareConfig() { private void prepareConfig() {
config = new GMConfiguration(this); config = new GMConfiguration(this);
} }
public void enableScheduler() { public void enableScheduler() {
if (worldsHolder != null) { if (worldsHolder != null) {
disableScheduler(); disableScheduler();
commiter = new Runnable() { commiter = new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
worldsHolder.saveChanges(false); worldsHolder.saveChanges(false);
GroupManager.logger.log(Level.INFO, " Data files refreshed."); GroupManager.logger.log(Level.INFO, " Data files refreshed.");
@@ -268,9 +275,9 @@ public class GroupManager extends JavaPlugin {
} }
}; };
scheduler = new ScheduledThreadPoolExecutor(1); scheduler = new ScheduledThreadPoolExecutor(1);
long minutes = (long)getGMConfig().getSaveInterval(); long minutes = (long) getGMConfig().getSaveInterval();
if (minutes > 0) { if (minutes > 0) {
scheduler.scheduleAtFixedRate(commiter, minutes, minutes, TimeUnit.MINUTES); scheduler.scheduleAtFixedRate(commiter, minutes, minutes, TimeUnit.MINUTES);
GroupManager.logger.info("Scheduled Data Saving is set for every " + minutes + " minutes!"); GroupManager.logger.info("Scheduled Data Saving is set for every " + minutes + " minutes!");
} else } else
GroupManager.logger.info("Scheduled Data Saving is Disabled!"); GroupManager.logger.info("Scheduled Data Saving is Disabled!");
@@ -280,6 +287,7 @@ public class GroupManager extends JavaPlugin {
} }
public void disableScheduler() { public void disableScheduler() {
if (scheduler != null) { if (scheduler != null) {
try { try {
scheduler.setContinueExistingPeriodicTasksAfterShutdownPolicy(false); scheduler.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
@@ -297,6 +305,7 @@ public class GroupManager extends JavaPlugin {
*/ */
@Deprecated @Deprecated
public void commit() { public void commit() {
if (worldsHolder != null) { if (worldsHolder != null) {
worldsHolder.saveChanges(); worldsHolder.saveChanges();
} }
@@ -307,10 +316,12 @@ public class GroupManager extends JavaPlugin {
*/ */
@Deprecated @Deprecated
public void reload() { public void reload() {
worldsHolder.reloadAll(); worldsHolder.reloadAll();
} }
public WorldsHolder getWorldsHolder() { public WorldsHolder getWorldsHolder() {
return worldsHolder; return worldsHolder;
} }
@@ -321,6 +332,7 @@ public class GroupManager extends JavaPlugin {
*/ */
@Deprecated @Deprecated
public AnjoPermissionsHandler getPermissionHandler() { public AnjoPermissionsHandler getPermissionHandler() {
return worldsHolder.getDefaultWorld().getPermissionsHandler(); return worldsHolder.getDefaultWorld().getPermissionsHandler();
} }
@@ -332,6 +344,7 @@ public class GroupManager extends JavaPlugin {
*/ */
@Deprecated @Deprecated
public WorldDataHolder getData() { public WorldDataHolder getData() {
return worldsHolder.getDefaultWorld(); return worldsHolder.getDefaultWorld();
} }
@@ -342,6 +355,7 @@ public class GroupManager extends JavaPlugin {
*/ */
@Deprecated @Deprecated
public OverloadedWorldHolder getOverloadedClassData() { public OverloadedWorldHolder getOverloadedClassData() {
return worldsHolder.getDefaultWorld(); return worldsHolder.getDefaultWorld();
} }
@@ -355,6 +369,7 @@ public class GroupManager extends JavaPlugin {
@SuppressWarnings({ "deprecation" }) @SuppressWarnings({ "deprecation" })
@Override @Override
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
boolean playerCanDo = false; boolean playerCanDo = false;
boolean isConsole = false; boolean isConsole = false;
Player senderPlayer = null, targetPlayer = null; Player senderPlayer = null, targetPlayer = null;
@@ -362,7 +377,6 @@ public class GroupManager extends JavaPlugin {
User senderUser = null; User senderUser = null;
boolean isOpOverride = config.isOpOverride(); boolean isOpOverride = config.isOpOverride();
// DETERMINING PLAYER INFORMATION // DETERMINING PLAYER INFORMATION
if (sender instanceof Player) { if (sender instanceof Player) {
senderPlayer = (Player) sender; senderPlayer = (Player) sender;
@@ -471,7 +485,7 @@ public class GroupManager extends JavaPlugin {
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -522,7 +536,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -561,7 +575,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -599,7 +613,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -622,9 +636,9 @@ public class GroupManager extends JavaPlugin {
auxUser.removeSubGroup(auxGroup); auxUser.removeSubGroup(auxGroup);
sender.sendMessage(ChatColor.YELLOW + "You removed subgroup '" + auxGroup.getName() + "' from player '" + auxUser.getName() + "' list."); sender.sendMessage(ChatColor.YELLOW + "You removed subgroup '" + auxGroup.getName() + "' from player '" + auxUser.getName() + "' list.");
//targetPlayer = this.getServer().getPlayer(auxUser.getName()); // targetPlayer = this.getServer().getPlayer(auxUser.getName());
//if (targetPlayer != null) // if (targetPlayer != null)
// BukkitPermissions.updatePermissions(targetPlayer); // BukkitPermissions.updatePermissions(targetPlayer);
return true; return true;
@@ -686,7 +700,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -751,7 +765,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -803,7 +817,7 @@ public class GroupManager extends JavaPlugin {
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -868,7 +882,7 @@ public class GroupManager extends JavaPlugin {
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -881,7 +895,7 @@ public class GroupManager extends JavaPlugin {
permissionResult = permissionHandler.checkFullGMPermission(auxUser, args[1], false); permissionResult = permissionHandler.checkFullGMPermission(auxUser, args[1], false);
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) {
//No permissions found in GM so fall through and check Bukkit. // No permissions found in GM so fall through and check Bukkit.
sender.sendMessage(ChatColor.RED + "The player doesn't have access to that permission"); sender.sendMessage(ChatColor.RED + "The player doesn't have access to that permission");
} else { } else {
@@ -1078,8 +1092,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
// Seems OK // Seems OK
// auxString = // auxString = permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
// permissionHandler.checkUserOnlyPermission(auxUser, args[1]);
if (permissionResult.owner instanceof Group) { if (permissionResult.owner instanceof Group) {
if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) {
sender.sendMessage(ChatColor.RED + "The group inherits the a negation permission from group: " + permissionResult.owner.getName()); sender.sendMessage(ChatColor.RED + "The group inherits the a negation permission from group: " + permissionResult.owner.getName());
@@ -1185,7 +1198,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -1219,7 +1232,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
@@ -1249,7 +1262,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1284,7 +1297,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1300,7 +1313,8 @@ public class GroupManager extends JavaPlugin {
if (!auxUser.isSubGroupsEmpty() && auxGroup2 == null) if (!auxUser.isSubGroupsEmpty() && auxGroup2 == null)
for (Group subGroup : auxUser.subGroupListCopy()) { for (Group subGroup : auxUser.subGroupListCopy()) {
auxGroup2 = permissionHandler.nextGroupWithVariable(subGroup, args[1]); auxGroup2 = permissionHandler.nextGroupWithVariable(subGroup, args[1]);
if (auxGroup2 != null) continue; if (auxGroup2 != null)
continue;
} }
if (auxGroup2 == null) { if (auxGroup2 == null) {
sender.sendMessage(ChatColor.RED + "The user doesn't have access to that variable!"); sender.sendMessage(ChatColor.RED + "The user doesn't have access to that variable!");
@@ -1471,7 +1485,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1511,7 +1525,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1545,7 +1559,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1693,7 +1707,7 @@ public class GroupManager extends JavaPlugin {
* Fire an event as none will have been triggered in the reload. * Fire an event as none will have been triggered in the reload.
*/ */
if (GroupManager.isLoaded()) if (GroupManager.isLoaded())
GroupManagerEventHandler.callEvent(GMSystemEvent.Action.RELOADED); GroupManagerEventHandler.callEvent(GMSystemEvent.Action.RELOADED);
return true; return true;
@@ -1730,7 +1744,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1786,7 +1800,7 @@ public class GroupManager extends JavaPlugin {
return false; return false;
} }
if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) { if ((validateOnlinePlayer) && ((match = validatePlayer(args[0], sender)) == null)) {
return false; return false;
} }
if (match != null) { if (match != null) {
auxUser = dataHolder.getUser(match.get(0)); auxUser = dataHolder.getUser(match.get(0));
@@ -1974,7 +1988,7 @@ public class GroupManager extends JavaPlugin {
if (Arrays.asList(this.getServer().getOfflinePlayers()).contains(Bukkit.getOfflinePlayer(playerName))) { if (Arrays.asList(this.getServer().getOfflinePlayers()).contains(Bukkit.getOfflinePlayer(playerName))) {
match.add(playerName); match.add(playerName);
} else { } else {
//look for partial matches // look for partial matches
for (OfflinePlayer offline : this.getServer().getOfflinePlayers()) { for (OfflinePlayer offline : this.getServer().getOfflinePlayers()) {
if (offline.getName().toLowerCase().startsWith(playerName.toLowerCase())) if (offline.getName().toLowerCase().startsWith(playerName.toLowerCase()))
match.add(offline.getName()); match.add(offline.getName());
@@ -2003,6 +2017,7 @@ public class GroupManager extends JavaPlugin {
* @return the config * @return the config
*/ */
public GMConfiguration getGMConfig() { public GMConfiguration getGMConfig() {
return config; return config;
} }
@@ -2010,10 +2025,12 @@ public class GroupManager extends JavaPlugin {
* @return the backupFolder * @return the backupFolder
*/ */
public File getBackupFolder() { public File getBackupFolder() {
return backupFolder; return backupFolder;
} }
public static GlobalGroups getGlobalGroups() { public static GlobalGroups getGlobalGroups() {
return globalGroups; return globalGroups;
} }

View File

@@ -5,17 +5,18 @@ import org.anjocaido.groupmanager.GroupManager;
/* /*
* *
* Created by ElgarL * Created by ElgarL
*
*/ */
public class BukkitPermsUpdateTask implements Runnable { public class BukkitPermsUpdateTask implements Runnable {
public BukkitPermsUpdateTask() { public BukkitPermsUpdateTask() {
super();
super();
} }
@Override @Override
public void run() { public void run() {
// Signal loaded and update BukkitPermissions. // Signal loaded and update BukkitPermissions.
GroupManager.setLoaded(true); GroupManager.setLoaded(true);
GroupManager.BukkitPermissions.collectPermissions(); GroupManager.BukkitPermissions.collectPermissions();

View File

@@ -18,146 +18,164 @@ import org.anjocaido.groupmanager.utils.StringPermissionComparator;
*/ */
public abstract class DataUnit { public abstract class DataUnit {
private WorldDataHolder dataSource; private WorldDataHolder dataSource;
private String name; private String name;
private boolean changed, sorted = false; private boolean changed, sorted = false;
private ArrayList<String> permissions = new ArrayList<String>(); private ArrayList<String> permissions = new ArrayList<String>();
public DataUnit(WorldDataHolder dataSource, String name) { public DataUnit(WorldDataHolder dataSource, String name) {
this.dataSource = dataSource;
this.name = name;
}
public DataUnit(String name) { this.dataSource = dataSource;
this.name = name; this.name = name;
}
public DataUnit(String name) {
this.name = name;
} }
/** /**
* Every group is matched only by their names and DataSources names. * Every group is matched only by their names and DataSources names.
* @param o *
* @return true if they are equal. false if not. * @param o
*/ * @return true if they are equal. false if not.
@Override */
public boolean equals(Object o) { @Override
if (o instanceof DataUnit) { public boolean equals(Object o) {
DataUnit go = (DataUnit) o;
if (this.getName().equalsIgnoreCase(go.getName())) {
// Global Group match.
if (this.dataSource == null && go.getDataSource() == null)
return true;
// This is a global group, the object to test isn't.
if (this.dataSource == null && go.getDataSource() != null)
return false;
// This is not a global group, but the object to test is.
if (this.dataSource != null && go.getDataSource() == null)
return false;
// Match on group name and world name.
if (this.dataSource.getName().equalsIgnoreCase(go.getDataSource().getName()))
return true;
}
}
return false;
}
@Override if (o instanceof DataUnit) {
public int hashCode() { DataUnit go = (DataUnit) o;
int hash = 5; if (this.getName().equalsIgnoreCase(go.getName())) {
hash = 71 * hash + (this.name != null ? this.name.toLowerCase().hashCode() : 0); // Global Group match.
return hash; if (this.dataSource == null && go.getDataSource() == null)
} return true;
// This is a global group, the object to test isn't.
if (this.dataSource == null && go.getDataSource() != null)
return false;
// This is not a global group, but the object to test is.
if (this.dataSource != null && go.getDataSource() == null)
return false;
// Match on group name and world name.
if (this.dataSource.getName().equalsIgnoreCase(go.getDataSource().getName()))
return true;
}
}
return false;
}
/** @Override
* Set the data source to point to a different worldDataHolder public int hashCode() {
*
* @param source
*/
public void setDataSource(WorldDataHolder source) {
this.dataSource = source;
}
/** int hash = 5;
* Get the current worldDataHolder this object is pointing to hash = 71 * hash + (this.name != null ? this.name.toLowerCase().hashCode() : 0);
* return hash;
* @return the dataSource }
*/
public WorldDataHolder getDataSource() {
return dataSource;
}
/** /**
* @return the name * Set the data source to point to a different worldDataHolder
*/ *
public String getName() { * @param source
return name; */
} public void setDataSource(WorldDataHolder source) {
public void flagAsChanged() { this.dataSource = source;
WorldDataHolder testSource = getDataSource(); }
String source = "";
if (testSource == null) /**
source = "GlobalGroups"; * Get the current worldDataHolder this object is pointing to
else *
source = testSource.getName(); * @return the dataSource
*/
public WorldDataHolder getDataSource() {
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as changed!"); return dataSource;
// for(StackTraceElement st: Thread.currentThread().getStackTrace()){ }
// GroupManager.logger.finest(st.toString());
// }
sorted = false;
changed = true;
}
public boolean isChanged() { /**
return changed; * @return the name
} */
public String getName() {
public void flagAsSaved() { return name;
WorldDataHolder testSource = getDataSource(); }
String source = "";
if (testSource == null) public void flagAsChanged() {
source = "GlobalGroups";
else
source = testSource.getName();
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as saved!"); WorldDataHolder testSource = getDataSource();
changed = false; String source = "";
}
public boolean hasSamePermissionNode(String permission) { if (testSource == null)
return permissions.contains(permission); source = "GlobalGroups";
} else
source = testSource.getName();
public void addPermission(String permission) { GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as changed!");
if (!hasSamePermissionNode(permission)) { // for(StackTraceElement st: Thread.currentThread().getStackTrace()){
permissions.add(permission); // GroupManager.logger.finest(st.toString());
} // }
flagAsChanged(); sorted = false;
} changed = true;
}
public boolean removePermission(String permission) { public boolean isChanged() {
flagAsChanged();
return permissions.remove(permission);
}
/** return changed;
* Use this only to list permissions. }
* You can't edit the permissions using the returned ArrayList instance
* @return a copy of the permission list
*/
public List<String> getPermissionList() {
return Collections.unmodifiableList(permissions);
}
public boolean isSorted() { public void flagAsSaved() {
return this.sorted;
}
public void sortPermissions() { WorldDataHolder testSource = getDataSource();
if (!isSorted()) { String source = "";
Collections.sort(permissions, StringPermissionComparator.getInstance());
sorted = true; if (testSource == null)
} source = "GlobalGroups";
} else
source = testSource.getName();
GroupManager.logger.finest("DataSource: " + source + " - DataUnit: " + getName() + " flagged as saved!");
changed = false;
}
public boolean hasSamePermissionNode(String permission) {
return permissions.contains(permission);
}
public void addPermission(String permission) {
if (!hasSamePermissionNode(permission)) {
permissions.add(permission);
}
flagAsChanged();
}
public boolean removePermission(String permission) {
flagAsChanged();
return permissions.remove(permission);
}
/**
* Use this only to list permissions.
* You can't edit the permissions using the returned ArrayList instance
*
* @return a copy of the permission list
*/
public List<String> getPermissionList() {
return Collections.unmodifiableList(permissions);
}
public boolean isSorted() {
return this.sorted;
}
public void sortPermissions() {
if (!isSorted()) {
Collections.sort(permissions, StringPermissionComparator.getInstance());
sorted = true;
}
}
} }

View File

@@ -20,155 +20,168 @@ import java.util.Map;
*/ */
public class Group extends DataUnit implements Cloneable { public class Group extends DataUnit implements Cloneable {
/** /**
* The group it inherits DIRECTLY! * The group it inherits DIRECTLY!
*/ */
private ArrayList<String> inherits = new ArrayList<String>(); private ArrayList<String> inherits = new ArrayList<String>();
/** /**
*This one holds the fields in INFO node. * This one holds the fields in INFO node.
* like prefix = 'c' * like prefix = 'c'
* or build = false * or build = false
*/ */
private GroupVariables variables = new GroupVariables(this); private GroupVariables variables = new GroupVariables(this);
/** /**
* Constructor for individual World Groups. * Constructor for individual World Groups.
* *
* @param name * @param name
*/ */
public Group(WorldDataHolder source, String name) { public Group(WorldDataHolder source, String name) {
super(source, name);
}
/** super(source, name);
* Constructor for Global Groups. }
*
* @param name
*/
public Group(String name) {
super(name);
}
/** /**
* Is this a GlobalGroup * Constructor for Global Groups.
* *
* @return true if this is a global group * @param name
*/ */
public boolean isGlobal() { public Group(String name) {
return (getDataSource() == null);
}
/** super(name);
* Clone this group }
* @return a clone of this group
*/
@Override
public Group clone() {
Group clone;
if (isGlobal()) { /**
clone = new Group(this.getName()); * Is this a GlobalGroup
} else { *
clone = new Group(getDataSource(), this.getName()); * @return true if this is a global group
clone.inherits = new ArrayList<String>(this.getInherits()); */
} public boolean isGlobal() {
for (String perm : this.getPermissionList()) { return (getDataSource() == null);
clone.addPermission(perm); }
}
clone.variables = ((GroupVariables) variables).clone(clone);
//clone.flagAsChanged();
return clone;
}
/** /**
* Use this to deliver a group from a different dataSource to another * Clone this group
* @param dataSource *
* @return Null or Clone * @return a clone of this group
*/ */
public Group clone(WorldDataHolder dataSource) { @Override
if (dataSource.groupExists(this.getName())) { public Group clone() {
return null;
}
Group clone = dataSource.createGroup(this.getName()); Group clone;
// Don't add inheritance for GlobalGroups if (isGlobal()) {
if (!isGlobal()) { clone = new Group(this.getName());
clone.inherits = new ArrayList<String>(this.getInherits()); } else {
} clone = new Group(getDataSource(), this.getName());
for (String perm : this.getPermissionList()) { clone.inherits = new ArrayList<String>(this.getInherits());
clone.addPermission(perm); }
}
clone.variables = variables.clone(clone);
clone.flagAsChanged(); //use this to make the new dataSource save the new group
return clone;
}
/** for (String perm : this.getPermissionList()) {
* an unmodifiable list of inherits list clone.addPermission(perm);
* You can't manage the list by here }
* Lol... version 0.6 had a problem because this. clone.variables = ((GroupVariables) variables).clone(clone);
* @return the inherits //clone.flagAsChanged();
*/ return clone;
public List<String> getInherits() { }
return Collections.unmodifiableList(inherits);
}
/** /**
* @param inherit the inherits to set * Use this to deliver a group from a different dataSource to another
*/ *
public void addInherits(Group inherit) { * @param dataSource
if (!isGlobal()) { * @return Null or Clone
if (!this.getDataSource().groupExists(inherit.getName())) { */
getDataSource().addGroup(inherit); public Group clone(WorldDataHolder dataSource) {
}
if (!inherits.contains(inherit.getName().toLowerCase())) {
inherits.add(inherit.getName().toLowerCase());
}
flagAsChanged();
if (GroupManager.isLoaded()) {
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManagerEventHandler.callEvent(this, Action.GROUP_INHERITANCE_CHANGED);
}
}
}
public boolean removeInherits(String inherit) { if (dataSource.groupExists(this.getName())) {
if (!isGlobal()) { return null;
if (this.inherits.contains(inherit.toLowerCase())) { }
this.inherits.remove(inherit.toLowerCase());
flagAsChanged();
GroupManagerEventHandler.callEvent(this, Action.GROUP_INHERITANCE_CHANGED);
return true;
}
}
return false;
}
/** Group clone = dataSource.createGroup(this.getName());
* @return the variables
*/
public GroupVariables getVariables() {
return variables;
}
/** // Don't add inheritance for GlobalGroups
* if (!isGlobal()) {
* @param varList clone.inherits = new ArrayList<String>(this.getInherits());
*/ }
public void setVariables(Map<String, Object> varList) { for (String perm : this.getPermissionList()) {
if (!isGlobal()) { clone.addPermission(perm);
GroupVariables temp = new GroupVariables(this, varList); }
variables.clearVars(); clone.variables = variables.clone(clone);
for (String key : temp.getVarKeyList()) { clone.flagAsChanged(); //use this to make the new dataSource save the new group
variables.addVar(key, temp.getVarObject(key)); return clone;
} }
flagAsChanged();
if (GroupManager.isLoaded()) { /**
GroupManager.BukkitPermissions.updateAllPlayers(); * an unmodifiable list of inherits list
GroupManagerEventHandler.callEvent(this, Action.GROUP_INFO_CHANGED); * You can't manage the list by here
} * Lol... version 0.6 had a problem because this.
} *
} * @return the inherits
*/
public List<String> getInherits() {
return Collections.unmodifiableList(inherits);
}
/**
* @param inherit the inherits to set
*/
public void addInherits(Group inherit) {
if (!isGlobal()) {
if (!this.getDataSource().groupExists(inherit.getName())) {
getDataSource().addGroup(inherit);
}
if (!inherits.contains(inherit.getName().toLowerCase())) {
inherits.add(inherit.getName().toLowerCase());
}
flagAsChanged();
if (GroupManager.isLoaded()) {
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManagerEventHandler.callEvent(this, Action.GROUP_INHERITANCE_CHANGED);
}
}
}
public boolean removeInherits(String inherit) {
if (!isGlobal()) {
if (this.inherits.contains(inherit.toLowerCase())) {
this.inherits.remove(inherit.toLowerCase());
flagAsChanged();
GroupManagerEventHandler.callEvent(this, Action.GROUP_INHERITANCE_CHANGED);
return true;
}
}
return false;
}
/**
* @return the variables
*/
public GroupVariables getVariables() {
return variables;
}
/**
*
* @param varList
*/
public void setVariables(Map<String, Object> varList) {
if (!isGlobal()) {
GroupVariables temp = new GroupVariables(this, varList);
variables.clearVars();
for (String key : temp.getVarKeyList()) {
variables.addVar(key, temp.getVarObject(key));
}
flagAsChanged();
if (GroupManager.isLoaded()) {
GroupManager.BukkitPermissions.updateAllPlayers();
GroupManagerEventHandler.callEvent(this, Action.GROUP_INFO_CHANGED);
}
}
}
} }

View File

@@ -12,76 +12,83 @@ import java.util.Map;
*/ */
public class GroupVariables extends Variables implements Cloneable { public class GroupVariables extends Variables implements Cloneable {
private Group owner; private Group owner;
public GroupVariables(Group owner) { public GroupVariables(Group owner) {
super(owner);
this.owner = owner;
addVar("prefix", "");
addVar("suffix", "");
addVar("build", false);
}
public GroupVariables(Group owner, Map<String, Object> varList) { super(owner);
super(owner); this.owner = owner;
variables = varList; addVar("prefix", "");
if (variables.get("prefix") == null) { addVar("suffix", "");
variables.put("prefix", ""); addVar("build", false);
owner.flagAsChanged(); }
}
//thisGrp.prefix = infoNode.get("prefix").toString();
if (variables.get("suffix") == null) { public GroupVariables(Group owner, Map<String, Object> varList) {
variables.put("suffix", "");
owner.flagAsChanged();
}
//thisGrp.suffix = infoNode.get("suffix").toString();
if (variables.get("build") == null) { super(owner);
variables.put("build", false); variables = varList;
owner.flagAsChanged(); if (variables.get("prefix") == null) {
} variables.put("prefix", "");
this.owner = owner; owner.flagAsChanged();
} }
//thisGrp.prefix = infoNode.get("prefix").toString();
/** if (variables.get("suffix") == null) {
* A clone of all vars here. variables.put("suffix", "");
* @return GroupVariables clone owner.flagAsChanged();
*/ }
protected GroupVariables clone(Group newOwner) { //thisGrp.suffix = infoNode.get("suffix").toString();
GroupVariables clone = new GroupVariables(newOwner);
for (String key : variables.keySet()) {
clone.variables.put(key, variables.get(key));
}
newOwner.flagAsChanged();
return clone;
}
/** if (variables.get("build") == null) {
* Remove a var from the list variables.put("build", false);
* @param name owner.flagAsChanged();
*/ }
@Override this.owner = owner;
public void removeVar(String name) { }
try {
this.variables.remove(name);
} catch (Exception e) {
}
if (name.equals("prefix")) {
addVar("prefix", "");
} else if (name.equals("suffix")) {
addVar("suffix", "");
} else if (name.equals("build")) {
addVar("build", false);
}
owner.flagAsChanged();
}
/** /**
* @return the owner * A clone of all vars here.
*/ *
@Override * @return GroupVariables clone
public Group getOwner() { */
return owner; protected GroupVariables clone(Group newOwner) {
}
GroupVariables clone = new GroupVariables(newOwner);
for (String key : variables.keySet()) {
clone.variables.put(key, variables.get(key));
}
newOwner.flagAsChanged();
return clone;
}
/**
* Remove a var from the list
*
* @param name
*/
@Override
public void removeVar(String name) {
try {
this.variables.remove(name);
} catch (Exception e) {
}
if (name.equals("prefix")) {
addVar("prefix", "");
} else if (name.equals("suffix")) {
addVar("suffix", "");
} else if (name.equals("build")) {
addVar("build", false);
}
owner.flagAsChanged();
}
/**
* @return the owner
*/
@Override
public Group getOwner() {
return owner;
}
} }

View File

@@ -16,7 +16,6 @@ import java.util.Map;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
/** /**
* *
* @author gabrielcouto/ElgarL * @author gabrielcouto/ElgarL
@@ -40,6 +39,7 @@ public class User extends DataUnit implements Cloneable {
* @param name * @param name
*/ */
public User(WorldDataHolder source, String name) { public User(WorldDataHolder source, String name) {
super(source, name); super(source, name);
this.group = source.getDefaultGroup().getName(); this.group = source.getDefaultGroup().getName();
} }
@@ -50,6 +50,7 @@ public class User extends DataUnit implements Cloneable {
*/ */
@Override @Override
public User clone() { public User clone() {
User clone = new User(getDataSource(), this.getName()); User clone = new User(getDataSource(), this.getName());
clone.group = this.group; clone.group = this.group;
for (String perm : this.getPermissionList()) { for (String perm : this.getPermissionList()) {
@@ -67,6 +68,7 @@ public class User extends DataUnit implements Cloneable {
* @return null if given dataSource already contains the same user * @return null if given dataSource already contains the same user
*/ */
public User clone(WorldDataHolder dataSource) { public User clone(WorldDataHolder dataSource) {
if (dataSource.isUserDeclared(this.getName())) { if (dataSource.isUserDeclared(this.getName())) {
return null; return null;
} }
@@ -85,6 +87,7 @@ public class User extends DataUnit implements Cloneable {
} }
public Group getGroup() { public Group getGroup() {
Group result = getDataSource().getGroup(group); Group result = getDataSource().getGroup(group);
if (result == null) { if (result == null) {
this.setGroup(getDataSource().getDefaultGroup()); this.setGroup(getDataSource().getDefaultGroup());
@@ -97,6 +100,7 @@ public class User extends DataUnit implements Cloneable {
* @return the group * @return the group
*/ */
public String getGroupName() { public String getGroupName() {
Group result = getDataSource().getGroup(group); Group result = getDataSource().getGroup(group);
if (result == null) { if (result == null) {
group = getDataSource().getDefaultGroup().getName(); group = getDataSource().getDefaultGroup().getName();
@@ -110,6 +114,7 @@ public class User extends DataUnit implements Cloneable {
*/ */
@Deprecated @Deprecated
public void setGroup(String group) { public void setGroup(String group) {
this.group = group; this.group = group;
flagAsChanged(); flagAsChanged();
if (GroupManager.isLoaded()) if (GroupManager.isLoaded())
@@ -122,6 +127,7 @@ public class User extends DataUnit implements Cloneable {
* the group to set * the group to set
*/ */
public void setGroup(Group group) { public void setGroup(Group group) {
setGroup(group, true); setGroup(group, true);
} }
@@ -131,6 +137,7 @@ public class User extends DataUnit implements Cloneable {
* *
*/ */
public void setGroup(Group group, Boolean updatePerms) { public void setGroup(Group group, Boolean updatePerms) {
if (!this.getDataSource().groupExists(group.getName())) { if (!this.getDataSource().groupExists(group.getName())) {
getDataSource().addGroup(group); getDataSource().addGroup(group);
} }
@@ -157,6 +164,7 @@ public class User extends DataUnit implements Cloneable {
} }
public boolean addSubGroup(Group subGroup) { public boolean addSubGroup(Group subGroup) {
// Don't allow adding a subgroup if it's already set as the primary. // Don't allow adding a subgroup if it's already set as the primary.
if (this.group.equalsIgnoreCase(subGroup.getName())) { if (this.group.equalsIgnoreCase(subGroup.getName())) {
return false; return false;
@@ -185,18 +193,22 @@ public class User extends DataUnit implements Cloneable {
} }
public int subGroupsSize() { public int subGroupsSize() {
return subGroups.size(); return subGroups.size();
} }
public boolean isSubGroupsEmpty() { public boolean isSubGroupsEmpty() {
return subGroups.isEmpty(); return subGroups.isEmpty();
} }
public boolean containsSubGroup(Group subGroup) { public boolean containsSubGroup(Group subGroup) {
return subGroups.contains(subGroup.getName()); return subGroups.contains(subGroup.getName());
} }
public boolean removeSubGroup(Group subGroup) { public boolean removeSubGroup(Group subGroup) {
try { try {
if (subGroups.remove(subGroup.getName())) { if (subGroups.remove(subGroup.getName())) {
flagAsChanged(); flagAsChanged();
@@ -212,6 +224,7 @@ public class User extends DataUnit implements Cloneable {
} }
public ArrayList<Group> subGroupListCopy() { public ArrayList<Group> subGroupListCopy() {
ArrayList<Group> val = new ArrayList<Group>(); ArrayList<Group> val = new ArrayList<Group>();
for (String gstr : subGroups) { for (String gstr : subGroups) {
Group g = getDataSource().getGroup(gstr); Group g = getDataSource().getGroup(gstr);
@@ -225,6 +238,7 @@ public class User extends DataUnit implements Cloneable {
} }
public ArrayList<String> subGroupListStringCopy() { public ArrayList<String> subGroupListStringCopy() {
return new ArrayList<String>(subGroups); return new ArrayList<String>(subGroups);
} }
@@ -232,6 +246,7 @@ public class User extends DataUnit implements Cloneable {
* @return the variables * @return the variables
*/ */
public UserVariables getVariables() { public UserVariables getVariables() {
return variables; return variables;
} }
@@ -240,6 +255,7 @@ public class User extends DataUnit implements Cloneable {
* @param varList * @param varList
*/ */
public void setVariables(Map<String, Object> varList) { public void setVariables(Map<String, Object> varList) {
//UserVariables temp = new UserVariables(this, varList); //UserVariables temp = new UserVariables(this, varList);
variables.clearVars(); variables.clearVars();
for (String key : varList.keySet()) { for (String key : varList.keySet()) {
@@ -254,6 +270,7 @@ public class User extends DataUnit implements Cloneable {
} }
public User updatePlayer(Player player) { public User updatePlayer(Player player) {
if (player != null) { if (player != null) {
bukkitPlayer = player; bukkitPlayer = player;
} }
@@ -261,6 +278,7 @@ public class User extends DataUnit implements Cloneable {
} }
public Player getBukkitPlayer() { public Player getBukkitPlayer() {
if (bukkitPlayer == null) { if (bukkitPlayer == null) {
bukkitPlayer = Bukkit.getPlayer(this.getName()); bukkitPlayer = Bukkit.getPlayer(this.getName());
} }

View File

@@ -12,37 +12,42 @@ import java.util.Map;
*/ */
public class UserVariables extends Variables { public class UserVariables extends Variables {
private User owner; private User owner;
public UserVariables(User owner) { public UserVariables(User owner) {
super(owner);
this.owner = owner;
}
public UserVariables(User owner, Map<String, Object> varList) { super(owner);
super(owner); this.owner = owner;
this.variables = varList; }
this.owner = owner;
}
/** public UserVariables(User owner, Map<String, Object> varList) {
* A clone of all vars here.
* @return UserVariables clone
*/
protected UserVariables clone(User newOwner) {
UserVariables clone = new UserVariables(newOwner);
for (String key : variables.keySet()) {
clone.variables.put(key, variables.get(key));
}
newOwner.flagAsChanged();
return clone;
}
/** super(owner);
* @return the owner this.variables = varList;
*/ this.owner = owner;
@Override }
public User getOwner() {
return owner; /**
} * A clone of all vars here.
*
* @return UserVariables clone
*/
protected UserVariables clone(User newOwner) {
UserVariables clone = new UserVariables(newOwner);
for (String key : variables.keySet()) {
clone.variables.put(key, variables.get(key));
}
newOwner.flagAsChanged();
return clone;
}
/**
* @return the owner
*/
@Override
public User getOwner() {
return owner;
}
} }

View File

@@ -9,7 +9,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
*A class that holds variables of a user/group. * A class that holds variables of a user/group.
* In groups, it holds the contents of INFO node. * In groups, it holds the contents of INFO node.
* Like: * Like:
* prefix * prefix
@@ -20,167 +20,189 @@ import java.util.Set;
*/ */
public abstract class Variables implements Cloneable { public abstract class Variables implements Cloneable {
private DataUnit owner; private DataUnit owner;
protected Map<String, Object> variables = new HashMap<String, Object>(); protected Map<String, Object> variables = new HashMap<String, Object>();
public Variables(DataUnit owner) { public Variables(DataUnit owner) {
this.owner = owner;
}
/** this.owner = owner;
* Add var to the the INFO node. }
* examples:
* addVar("build",true);
* addVar("prefix","c");
* @param name key name of the var
* @param o the object value of the var
*/
public void addVar(String name, Object o) {
if (o == null) {
return;
}
if (variables.containsKey(name)) {
variables.remove(name);
}
variables.put(name, o);
owner.flagAsChanged();
}
/** /**
* Returns the object inside the var * Add var to the the INFO node.
* @param name * examples:
* @return a Object if exists. null if doesn't exists * addVar("build",true);
*/ * addVar("prefix","c");
public Object getVarObject(String name) { *
return variables.get(name); * @param name key name of the var
} * @param o the object value of the var
*/
public void addVar(String name, Object o) {
/** if (o == null) {
* Get the String value for the given var name return;
* @param name the var key name }
* @return "" if null. or the toString() value of object if (variables.containsKey(name)) {
*/ variables.remove(name);
public String getVarString(String name) { }
Object o = variables.get(name); variables.put(name, o);
try { owner.flagAsChanged();
return o == null ? "" : o.toString(); }
} catch (Exception e) {
return "";
}
}
/** /**
* * Returns the object inside the var
* @param name *
* @return false if null. or a Boolean.parseBoolean of the string * @param name
*/ * @return a Object if exists. null if doesn't exists
public Boolean getVarBoolean(String name) { */
Object o = variables.get(name); public Object getVarObject(String name) {
try {
return o == null ? false : Boolean.parseBoolean(o.toString());
} catch (Exception e) {
return false;
}
}
/** return variables.get(name);
* }
* @param name
* @return -1 if null. or a parseInt of the string
*/
public Integer getVarInteger(String name) {
Object o = variables.get(name);
try {
return o == null ? -1 : Integer.parseInt(o.toString());
} catch (Exception e) {
return -1;
}
}
/** /**
* * Get the String value for the given var name
* @param name *
* @return -1 if null. or a parseDouble of the string * @param name the var key name
*/ * @return "" if null. or the toString() value of object
public Double getVarDouble(String name) { */
Object o = variables.get(name); public String getVarString(String name) {
try {
return o == null ? -1.0D : Double.parseDouble(o.toString());
} catch (Exception e) {
return -1.0D;
}
}
/** Object o = variables.get(name);
* All variable keys this is holding try {
* @return Set of all variable names. return o == null ? "" : o.toString();
*/ } catch (Exception e) {
public Set<String> getVarKeyList() { return "";
return variables.keySet(); }
} }
/** /**
* verify is a var exists *
* @param name the key name of the var * @param name
* @return true if that var exists * @return false if null. or a Boolean.parseBoolean of the string
*/ */
public boolean hasVar(String name) { public Boolean getVarBoolean(String name) {
return variables.containsKey(name);
}
/** Object o = variables.get(name);
* Returns the quantity of vars this is holding try {
* @return the number of vars return o == null ? false : Boolean.parseBoolean(o.toString());
*/ } catch (Exception e) {
public int getSize() { return false;
return variables.size(); }
} }
/** /**
* Remove a var from the list *
* @param name * @param name
*/ * @return -1 if null. or a parseInt of the string
public void removeVar(String name) { */
try { public Integer getVarInteger(String name) {
variables.remove(name);
} catch (Exception e) {
}
owner.flagAsChanged();
}
public static Object parseVariableValue(String value) { Object o = variables.get(name);
try { try {
Integer i = Integer.parseInt(value); return o == null ? -1 : Integer.parseInt(o.toString());
return i; } catch (Exception e) {
} catch (NumberFormatException e) { return -1;
} }
try { }
Double d = Double.parseDouble(value);
return d;
} catch (NumberFormatException e) {
}
if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("on")) {
return true;
} else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no") || value.equalsIgnoreCase("off")) {
return false;
}
return value;
} /**
*
* @param name
* @return -1 if null. or a parseDouble of the string
*/
public Double getVarDouble(String name) {
public void clearVars() { Object o = variables.get(name);
variables.clear(); try {
owner.flagAsChanged(); return o == null ? -1.0D : Double.parseDouble(o.toString());
} } catch (Exception e) {
return -1.0D;
}
}
/** /**
* @return the owner * All variable keys this is holding
*/ *
public DataUnit getOwner() { * @return Set of all variable names.
return owner; */
} public Set<String> getVarKeyList() {
public boolean isEmpty() { return variables.keySet();
return variables.isEmpty(); }
}
/**
* verify is a var exists
*
* @param name the key name of the var
* @return true if that var exists
*/
public boolean hasVar(String name) {
return variables.containsKey(name);
}
/**
* Returns the quantity of vars this is holding
*
* @return the number of vars
*/
public int getSize() {
return variables.size();
}
/**
* Remove a var from the list
*
* @param name
*/
public void removeVar(String name) {
try {
variables.remove(name);
} catch (Exception e) {
}
owner.flagAsChanged();
}
public static Object parseVariableValue(String value) {
try {
Integer i = Integer.parseInt(value);
return i;
} catch (NumberFormatException e) {
}
try {
Double d = Double.parseDouble(value);
return d;
} catch (NumberFormatException e) {
}
if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("on")) {
return true;
} else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no") || value.equalsIgnoreCase("off")) {
return false;
}
return value;
}
public void clearVars() {
variables.clear();
owner.flagAsChanged();
}
/**
* @return the owner
*/
public DataUnit getOwner() {
return owner;
}
public boolean isEmpty() {
return variables.isEmpty();
}
} }

View File

@@ -6,8 +6,6 @@ import java.util.Map;
import org.anjocaido.groupmanager.data.Group; import org.anjocaido.groupmanager.data.Group;
/** /**
* This container holds all Groups loaded from the relevant groupsFile. * This container holds all Groups loaded from the relevant groupsFile.
* *
@@ -31,9 +29,11 @@ public class GroupsDataHolder {
* Constructor * Constructor
*/ */
protected GroupsDataHolder() { protected GroupsDataHolder() {
} }
public void setDataSource(WorldDataHolder dataSource) { public void setDataSource(WorldDataHolder dataSource) {
this.dataSource = dataSource; this.dataSource = dataSource;
//push this data source to the users, so they pull the correct groups data. //push this data source to the users, so they pull the correct groups data.
for (Group group : groups.values()) for (Group group : groups.values())
@@ -44,6 +44,7 @@ public class GroupsDataHolder {
* @return the defaultGroup * @return the defaultGroup
*/ */
public Group getDefaultGroup() { public Group getDefaultGroup() {
return defaultGroup; return defaultGroup;
} }
@@ -51,6 +52,7 @@ public class GroupsDataHolder {
* @param defaultGroup the defaultGroup to set * @param defaultGroup the defaultGroup to set
*/ */
public void setDefaultGroup(Group defaultGroup) { public void setDefaultGroup(Group defaultGroup) {
this.defaultGroup = defaultGroup; this.defaultGroup = defaultGroup;
} }
@@ -58,6 +60,7 @@ public class GroupsDataHolder {
* @return the groups * @return the groups
*/ */
public Map<String, Group> getGroups() { public Map<String, Group> getGroups() {
return groups; return groups;
} }
@@ -65,6 +68,7 @@ public class GroupsDataHolder {
* @param groups the groups to set * @param groups the groups to set
*/ */
public void setGroups(Map<String, Group> groups) { public void setGroups(Map<String, Group> groups) {
this.groups = groups; this.groups = groups;
} }
@@ -72,6 +76,7 @@ public class GroupsDataHolder {
* @return the groupsFile * @return the groupsFile
*/ */
public File getGroupsFile() { public File getGroupsFile() {
return groupsFile; return groupsFile;
} }
@@ -79,6 +84,7 @@ public class GroupsDataHolder {
* @param groupsFile the groupsFile to set * @param groupsFile the groupsFile to set
*/ */
public void setGroupsFile(File groupsFile) { public void setGroupsFile(File groupsFile) {
this.groupsFile = groupsFile; this.groupsFile = groupsFile;
} }
@@ -86,6 +92,7 @@ public class GroupsDataHolder {
* @return the haveGroupsChanged * @return the haveGroupsChanged
*/ */
public boolean HaveGroupsChanged() { public boolean HaveGroupsChanged() {
return haveGroupsChanged; return haveGroupsChanged;
} }
@@ -93,6 +100,7 @@ public class GroupsDataHolder {
* @param haveGroupsChanged the haveGroupsChanged to set * @param haveGroupsChanged the haveGroupsChanged to set
*/ */
public void setGroupsChanged(boolean haveGroupsChanged) { public void setGroupsChanged(boolean haveGroupsChanged) {
this.haveGroupsChanged = haveGroupsChanged; this.haveGroupsChanged = haveGroupsChanged;
} }
@@ -100,6 +108,7 @@ public class GroupsDataHolder {
* @return the timeStampGroups * @return the timeStampGroups
*/ */
public long getTimeStampGroups() { public long getTimeStampGroups() {
return timeStampGroups; return timeStampGroups;
} }
@@ -107,6 +116,7 @@ public class GroupsDataHolder {
* @param timeStampGroups the timeStampGroups to set * @param timeStampGroups the timeStampGroups to set
*/ */
public void setTimeStampGroups(long timeStampGroups) { public void setTimeStampGroups(long timeStampGroups) {
this.timeStampGroups = timeStampGroups; this.timeStampGroups = timeStampGroups;
} }

View File

@@ -16,190 +16,200 @@ import org.anjocaido.groupmanager.data.User;
*/ */
public class OverloadedWorldHolder extends WorldDataHolder { public class OverloadedWorldHolder extends WorldDataHolder {
/** /**
* *
*/ */
protected Map<String, User> overloadedUsers = new HashMap<String, User>(); protected Map<String, User> overloadedUsers = new HashMap<String, User>();
/** /**
* *
* @param ph * @param ph
*/ */
public OverloadedWorldHolder(WorldDataHolder ph) { public OverloadedWorldHolder(WorldDataHolder ph) {
super(ph.getName());
this.setGroupsFile(ph.getGroupsFile());
this.setUsersFile(ph.getUsersFile());
//this.setDefaultGroup(ph.getDefaultGroup());
this.groups = ph.groups;
this.users = ph.users;
}
/** super(ph.getName());
* this.setGroupsFile(ph.getGroupsFile());
* @param userName this.setUsersFile(ph.getUsersFile());
* @return user object or a new user if none exists. //this.setDefaultGroup(ph.getDefaultGroup());
*/ this.groups = ph.groups;
@Override this.users = ph.users;
public User getUser(String userName) { }
//OVERLOADED CODE
String userNameLowered = userName.toLowerCase();
if (overloadedUsers.containsKey(userNameLowered)) {
return overloadedUsers.get(userNameLowered);
}
//END CODE
if (getUsers().containsKey(userNameLowered)) {
return getUsers().get(userNameLowered);
}
User newUser = createUser(userName);
setUsersChanged(true);
return newUser;
}
/** /**
* *
* @param theUser * @param userName
*/ * @return user object or a new user if none exists.
@Override */
public void addUser(User theUser) { @Override
if (theUser.getDataSource() != this) { public User getUser(String userName) {
theUser = theUser.clone(this);
}
if (theUser == null) {
return;
}
if ((theUser.getGroup() == null) || (!getGroups().containsKey(theUser.getGroupName().toLowerCase()))) {
theUser.setGroup(getDefaultGroup());
}
//OVERLOADED CODE
if (overloadedUsers.containsKey(theUser.getName().toLowerCase())) {
overloadedUsers.remove(theUser.getName().toLowerCase());
overloadedUsers.put(theUser.getName().toLowerCase(), theUser);
return;
}
//END CODE
removeUser(theUser.getName());
getUsers().put(theUser.getName().toLowerCase(), theUser);
setUsersChanged(true);
}
/** //OVERLOADED CODE
* String userNameLowered = userName.toLowerCase();
* @param userName if (overloadedUsers.containsKey(userNameLowered)) {
* @return true if removed/false if not found. return overloadedUsers.get(userNameLowered);
*/ }
@Override //END CODE
public boolean removeUser(String userName) { if (getUsers().containsKey(userNameLowered)) {
//OVERLOADED CODE return getUsers().get(userNameLowered);
if (overloadedUsers.containsKey(userName.toLowerCase())) { }
overloadedUsers.remove(userName.toLowerCase()); User newUser = createUser(userName);
return true; setUsersChanged(true);
} return newUser;
//END CODE }
if (getUsers().containsKey(userName.toLowerCase())) {
getUsers().remove(userName.toLowerCase());
setUsersChanged(true);
return true;
}
return false;
}
@Override /**
public boolean removeGroup(String groupName) { *
if (groupName.equals(getDefaultGroup())) { * @param theUser
return false; */
} @Override
for (String key : getGroups().keySet()) { public void addUser(User theUser) {
if (groupName.equalsIgnoreCase(key)) {
getGroups().remove(key);
for (String userKey : getUsers().keySet()) {
User user = getUsers().get(userKey);
if (user.getGroupName().equalsIgnoreCase(key)) {
user.setGroup(getDefaultGroup());
}
} if (theUser.getDataSource() != this) {
//OVERLOADED CODE theUser = theUser.clone(this);
for (String userKey : overloadedUsers.keySet()) { }
User user = overloadedUsers.get(userKey); if (theUser == null) {
if (user.getGroupName().equalsIgnoreCase(key)) { return;
user.setGroup(getDefaultGroup()); }
} if ((theUser.getGroup() == null) || (!getGroups().containsKey(theUser.getGroupName().toLowerCase()))) {
theUser.setGroup(getDefaultGroup());
}
//OVERLOADED CODE
if (overloadedUsers.containsKey(theUser.getName().toLowerCase())) {
overloadedUsers.remove(theUser.getName().toLowerCase());
overloadedUsers.put(theUser.getName().toLowerCase(), theUser);
return;
}
//END CODE
removeUser(theUser.getName());
getUsers().put(theUser.getName().toLowerCase(), theUser);
setUsersChanged(true);
}
} /**
//END OVERLOAD *
setGroupsChanged(true); * @param userName
return true; * @return true if removed/false if not found.
} */
} @Override
return false; public boolean removeUser(String userName) {
}
/** //OVERLOADED CODE
* if (overloadedUsers.containsKey(userName.toLowerCase())) {
* @return Collection of all users overloadedUsers.remove(userName.toLowerCase());
*/ return true;
@Override }
public Collection<User> getUserList() { //END CODE
Collection<User> overloadedList = new ArrayList<User>(); if (getUsers().containsKey(userName.toLowerCase())) {
Collection<User> normalList = getUsers().values(); getUsers().remove(userName.toLowerCase());
for (User u : normalList) { setUsersChanged(true);
if (overloadedUsers.containsKey(u.getName().toLowerCase())) { return true;
overloadedList.add(overloadedUsers.get(u.getName().toLowerCase())); }
} else { return false;
overloadedList.add(u); }
}
}
return overloadedList;
}
/** @Override
* public boolean removeGroup(String groupName) {
* @param userName
* @return true if user is overloaded.
*/
public boolean isOverloaded(String userName) {
return overloadedUsers.containsKey(userName.toLowerCase());
}
/** if (groupName.equals(getDefaultGroup())) {
* return false;
* @param userName }
*/ for (String key : getGroups().keySet()) {
public void overloadUser(String userName) { if (groupName.equalsIgnoreCase(key)) {
if (!isOverloaded(userName)) { getGroups().remove(key);
User theUser = getUser(userName); for (String userKey : getUsers().keySet()) {
theUser = theUser.clone(); User user = getUsers().get(userKey);
if (overloadedUsers.containsKey(theUser.getName().toLowerCase())) { if (user.getGroupName().equalsIgnoreCase(key)) {
overloadedUsers.remove(theUser.getName().toLowerCase()); user.setGroup(getDefaultGroup());
} }
overloadedUsers.put(theUser.getName().toLowerCase(), theUser);
}
}
/** }
* //OVERLOADED CODE
* @param userName for (String userKey : overloadedUsers.keySet()) {
*/ User user = overloadedUsers.get(userKey);
public void removeOverload(String userName) { if (user.getGroupName().equalsIgnoreCase(key)) {
overloadedUsers.remove(userName.toLowerCase()); user.setGroup(getDefaultGroup());
} }
/** }
* Gets the user in normal state. Surpassing the overload state. //END OVERLOAD
* It doesn't affect permissions. But it enables plugins change the setGroupsChanged(true);
* actual user permissions even in overload mode. return true;
* }
* @param userName }
* @return user object return false;
*/ }
public User surpassOverload(String userName) {
if (!isOverloaded(userName)) { /**
return getUser(userName); *
} * @return Collection of all users
if (getUsers().containsKey(userName.toLowerCase())) { */
return getUsers().get(userName.toLowerCase()); @Override
} public Collection<User> getUserList() {
User newUser = createUser(userName);
return newUser; Collection<User> overloadedList = new ArrayList<User>();
} Collection<User> normalList = getUsers().values();
for (User u : normalList) {
if (overloadedUsers.containsKey(u.getName().toLowerCase())) {
overloadedList.add(overloadedUsers.get(u.getName().toLowerCase()));
} else {
overloadedList.add(u);
}
}
return overloadedList;
}
/**
*
* @param userName
* @return true if user is overloaded.
*/
public boolean isOverloaded(String userName) {
return overloadedUsers.containsKey(userName.toLowerCase());
}
/**
*
* @param userName
*/
public void overloadUser(String userName) {
if (!isOverloaded(userName)) {
User theUser = getUser(userName);
theUser = theUser.clone();
if (overloadedUsers.containsKey(theUser.getName().toLowerCase())) {
overloadedUsers.remove(theUser.getName().toLowerCase());
}
overloadedUsers.put(theUser.getName().toLowerCase(), theUser);
}
}
/**
*
* @param userName
*/
public void removeOverload(String userName) {
overloadedUsers.remove(userName.toLowerCase());
}
/**
* Gets the user in normal state. Surpassing the overload state.
* It doesn't affect permissions. But it enables plugins change the
* actual user permissions even in overload mode.
*
* @param userName
* @return user object
*/
public User surpassOverload(String userName) {
if (!isOverloaded(userName)) {
return getUser(userName);
}
if (getUsers().containsKey(userName.toLowerCase())) {
return getUsers().get(userName.toLowerCase());
}
User newUser = createUser(userName);
return newUser;
}
} }

View File

@@ -6,8 +6,6 @@ import java.util.Map;
import org.anjocaido.groupmanager.data.User; import org.anjocaido.groupmanager.data.User;
/** /**
* This container holds all Users loaded from the relevant usersFile. * This container holds all Users loaded from the relevant usersFile.
* *
@@ -30,9 +28,11 @@ public class UsersDataHolder {
* Constructor * Constructor
*/ */
protected UsersDataHolder() { protected UsersDataHolder() {
} }
public void setDataSource(WorldDataHolder dataSource) { public void setDataSource(WorldDataHolder dataSource) {
this.dataSource = dataSource; this.dataSource = dataSource;
//push this data source to the users, so they pull the correct groups data. //push this data source to the users, so they pull the correct groups data.
for (User user : users.values()) for (User user : users.values())
@@ -44,6 +44,7 @@ public class UsersDataHolder {
* @return the users * @return the users
*/ */
public Map<String, User> getUsers() { public Map<String, User> getUsers() {
return users; return users;
} }
@@ -51,6 +52,7 @@ public class UsersDataHolder {
* @param users the users to set * @param users the users to set
*/ */
public void setUsers(Map<String, User> users) { public void setUsers(Map<String, User> users) {
this.users = users; this.users = users;
} }
@@ -58,6 +60,7 @@ public class UsersDataHolder {
* @return the usersFile * @return the usersFile
*/ */
public File getUsersFile() { public File getUsersFile() {
return usersFile; return usersFile;
} }
@@ -65,6 +68,7 @@ public class UsersDataHolder {
* @param usersFile the usersFile to set * @param usersFile the usersFile to set
*/ */
public void setUsersFile(File usersFile) { public void setUsersFile(File usersFile) {
this.usersFile = usersFile; this.usersFile = usersFile;
} }
@@ -72,6 +76,7 @@ public class UsersDataHolder {
* @return the haveUsersChanged * @return the haveUsersChanged
*/ */
public boolean HaveUsersChanged() { public boolean HaveUsersChanged() {
return haveUsersChanged; return haveUsersChanged;
} }
@@ -79,6 +84,7 @@ public class UsersDataHolder {
* @param haveUsersChanged the haveUsersChanged to set * @param haveUsersChanged the haveUsersChanged to set
*/ */
public void setUsersChanged(boolean haveUsersChanged) { public void setUsersChanged(boolean haveUsersChanged) {
this.haveUsersChanged = haveUsersChanged; this.haveUsersChanged = haveUsersChanged;
} }
@@ -86,6 +92,7 @@ public class UsersDataHolder {
* @return the timeStampUsers * @return the timeStampUsers
*/ */
public long getTimeStampUsers() { public long getTimeStampUsers() {
return timeStampUsers; return timeStampUsers;
} }
@@ -93,6 +100,7 @@ public class UsersDataHolder {
* @param timeStampUsers the timeStampUsers to set * @param timeStampUsers the timeStampUsers to set
*/ */
public void setTimeStampUsers(long timeStampUsers) { public void setTimeStampUsers(long timeStampUsers) {
this.timeStampUsers = timeStampUsers; this.timeStampUsers = timeStampUsers;
} }

View File

@@ -6,79 +6,82 @@ import org.bukkit.Bukkit;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
/** /**
* @author ElgarL * @author ElgarL
* *
*/ */
public class GMGroupEvent extends Event { public class GMGroupEvent extends Event {
/** /**
* *
*/ */
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
@Override @Override
public HandlerList getHandlers() { public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() { return handlers;
return handlers; }
}
////////////////////////////// public static HandlerList getHandlerList() {
return handlers;
}
//////////////////////////////
protected Group group; protected Group group;
protected String groupName; protected String groupName;
protected Action action; protected Action action;
public GMGroupEvent(Group group, Action action) { public GMGroupEvent(Group group, Action action) {
super();
this.group = group; super();
this.action = action;
this.groupName = group.getName();
}
public GMGroupEvent(String groupName, Action action) { this.group = group;
super(); this.action = action;
this.groupName = group.getName();
}
this.groupName = groupName; public GMGroupEvent(String groupName, Action action) {
this.action = action;
}
public Action getAction(){ super();
return this.action;
}
public Group getGroup() { this.groupName = groupName;
return group; this.action = action;
} }
public String getGroupName() { public Action getAction() {
return groupName;
}
public enum Action { return this.action;
GROUP_PERMISSIONS_CHANGED, }
GROUP_INHERITANCE_CHANGED,
GROUP_INFO_CHANGED,
GROUP_ADDED,
GROUP_REMOVED,
}
public void schedule(final GMGroupEvent event) { public Group getGroup() {
return group;
}
public String getGroupName() {
return groupName;
}
public enum Action {
GROUP_PERMISSIONS_CHANGED, GROUP_INHERITANCE_CHANGED, GROUP_INFO_CHANGED, GROUP_ADDED, GROUP_REMOVED,
}
public void schedule(final GMGroupEvent event) {
if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("GroupManager"), new Runnable() { if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("GroupManager"), new Runnable() {
@Override @Override
public void run() { public void run() {
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
} }
}, 1) == -1) }, 1) == -1)
GroupManager.logger.warning("Could not schedule GM Event."); GroupManager.logger.warning("Could not schedule GM Event.");
} }
} }

View File

@@ -5,57 +5,58 @@ import org.bukkit.Bukkit;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
/** /**
* @author ElgarL * @author ElgarL
* *
*/ */
public class GMSystemEvent extends Event { public class GMSystemEvent extends Event {
/** /**
* *
*/ */
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
@Override @Override
public HandlerList getHandlers() { public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() { return handlers;
return handlers; }
}
////////////////////////////// public static HandlerList getHandlerList() {
return handlers;
}
//////////////////////////////
protected Action action; protected Action action;
public GMSystemEvent(Action action) { public GMSystemEvent(Action action) {
super();
this.action = action; super();
}
public Action getAction(){ this.action = action;
return this.action; }
}
public enum Action { public Action getAction() {
RELOADED,
SAVED,
DEFAULT_GROUP_CHANGED,
VALIDATE_TOGGLE,
}
public void schedule(final GMSystemEvent event) { return this.action;
}
public enum Action {
RELOADED, SAVED, DEFAULT_GROUP_CHANGED, VALIDATE_TOGGLE,
}
public void schedule(final GMSystemEvent event) {
if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("GroupManager"), new Runnable() { if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("GroupManager"), new Runnable() {
@Override @Override
public void run() { public void run() {
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
} }
}, 1) == -1) }, 1) == -1)
GroupManager.logger.warning("Could not schedule GM Event."); GroupManager.logger.warning("Could not schedule GM Event.");
} }
} }

View File

@@ -6,81 +6,82 @@ import org.bukkit.Bukkit;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
/** /**
* @author ElgarL * @author ElgarL
* *
*/ */
public class GMUserEvent extends Event { public class GMUserEvent extends Event {
/** /**
* *
*/ */
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
@Override @Override
public HandlerList getHandlers() { public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() { return handlers;
return handlers; }
}
////////////////////////////// public static HandlerList getHandlerList() {
return handlers;
}
//////////////////////////////
protected User user; protected User user;
protected String userName; protected String userName;
protected Action action; protected Action action;
public GMUserEvent(User user, Action action) { public GMUserEvent(User user, Action action) {
super();
this.user = user; super();
this.action = action;
this.userName = user.getName();
}
public GMUserEvent(String userName, Action action) { this.user = user;
super(); this.action = action;
this.userName = user.getName();
}
this.userName = userName; public GMUserEvent(String userName, Action action) {
this.action = action;
}
public Action getAction(){ super();
return this.action;
}
public User getUser() { this.userName = userName;
return user; this.action = action;
} }
public String getUserName() { public Action getAction() {
return userName;
}
public enum Action { return this.action;
USER_PERMISSIONS_CHANGED, }
USER_INHERITANCE_CHANGED,
USER_INFO_CHANGED,
USER_GROUP_CHANGED,
USER_SUBGROUP_CHANGED,
USER_ADDED,
USER_REMOVED,
}
public void schedule(final GMUserEvent event) { public User getUser() {
return user;
}
public String getUserName() {
return userName;
}
public enum Action {
USER_PERMISSIONS_CHANGED, USER_INHERITANCE_CHANGED, USER_INFO_CHANGED, USER_GROUP_CHANGED, USER_SUBGROUP_CHANGED, USER_ADDED, USER_REMOVED,
}
public void schedule(final GMUserEvent event) {
if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("GroupManager"), new Runnable() { if (Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Bukkit.getPluginManager().getPlugin("GroupManager"), new Runnable() {
@Override @Override
public void run() { public void run() {
Bukkit.getServer().getPluginManager().callEvent(event); Bukkit.getServer().getPluginManager().callEvent(event);
} }
}, 1) == -1) }, 1) == -1)
GroupManager.logger.warning("Could not schedule GM Event."); GroupManager.logger.warning("Could not schedule GM Event.");
} }
} }

View File

@@ -6,11 +6,10 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldInitEvent; import org.bukkit.event.world.WorldInitEvent;
/** /**
* @author ElgarL * @author ElgarL
* *
* Handle new world creation from other plugins * Handle new world creation from other plugins
* *
*/ */
public class GMWorldListener implements Listener { public class GMWorldListener implements Listener {
@@ -18,17 +17,20 @@ public class GMWorldListener implements Listener {
private final GroupManager plugin; private final GroupManager plugin;
public GMWorldListener(GroupManager instance) { public GMWorldListener(GroupManager instance) {
plugin = instance; plugin = instance;
registerEvents(); registerEvents();
} }
private void registerEvents() { private void registerEvents() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
} plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onWorldInit(WorldInitEvent event) { public void onWorldInit(WorldInitEvent event) {
String worldName = event.getWorld().getName();
String worldName = event.getWorld().getName();
if (GroupManager.isLoaded() && !plugin.getWorldsHolder().isInList(worldName)) { if (GroupManager.isLoaded() && !plugin.getWorldsHolder().isInList(worldName)) {
GroupManager.logger.info("New world detected..."); GroupManager.logger.info("New world detected...");

View File

@@ -3,40 +3,51 @@ package org.anjocaido.groupmanager.events;
import org.anjocaido.groupmanager.data.Group; import org.anjocaido.groupmanager.data.Group;
import org.anjocaido.groupmanager.data.User; import org.anjocaido.groupmanager.data.User;
/** /**
* @author ElgarL * @author ElgarL
* *
* Handles all Event generation. * Handles all Event generation.
* *
*/ */
public class GroupManagerEventHandler { public class GroupManagerEventHandler {
protected static void callEvent(GMGroupEvent event) { protected static void callEvent(GMGroupEvent event) {
event.schedule(event); event.schedule(event);
} }
protected static void callEvent(GMUserEvent event) { protected static void callEvent(GMUserEvent event) {
event.schedule(event); event.schedule(event);
} }
protected static void callEvent(GMSystemEvent event) { protected static void callEvent(GMSystemEvent event) {
event.schedule(event); event.schedule(event);
} }
public static void callEvent(Group group, GMGroupEvent.Action action) { public static void callEvent(Group group, GMGroupEvent.Action action) {
callEvent(new GMGroupEvent(group, action)); callEvent(new GMGroupEvent(group, action));
} }
public static void callEvent(String groupName, GMGroupEvent.Action action) { public static void callEvent(String groupName, GMGroupEvent.Action action) {
callEvent(new GMGroupEvent(groupName, action)); callEvent(new GMGroupEvent(groupName, action));
} }
public static void callEvent(User user, GMUserEvent.Action action) { public static void callEvent(User user, GMUserEvent.Action action) {
callEvent(new GMUserEvent(user, action)); callEvent(new GMUserEvent(user, action));
} }
public static void callEvent(String userName, GMUserEvent.Action action) { public static void callEvent(String userName, GMUserEvent.Action action) {
callEvent(new GMUserEvent(userName, action)); callEvent(new GMUserEvent(userName, action));
} }
public static void callEvent(GMSystemEvent.Action action) { public static void callEvent(GMSystemEvent.Action action) {
callEvent(new GMSystemEvent(action)); callEvent(new GMSystemEvent(action));
} }
} }

View File

@@ -39,6 +39,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @param holder * @param holder
*/ */
public AnjoPermissionsHandler(WorldDataHolder holder) { public AnjoPermissionsHandler(WorldDataHolder holder) {
ph = holder; ph = holder;
} }
@@ -51,6 +52,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean has(Player player, String permission) { public boolean has(Player player, String permission) {
return permission(player, permission); return permission(player, permission);
} }
@@ -63,6 +65,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean permission(Player player, String permission) { public boolean permission(Player player, String permission) {
return checkUserPermission(ph.getUser(player.getName()).updatePlayer(player), permission); return checkUserPermission(ph.getUser(player.getName()).updatePlayer(player), permission);
} }
@@ -74,6 +77,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return true if the player has the permission * @return true if the player has the permission
*/ */
public boolean permission(String playerName, String permission) { public boolean permission(String playerName, String permission) {
return checkUserPermission(ph.getUser(playerName), permission); return checkUserPermission(ph.getUser(playerName), permission);
} }
@@ -85,6 +89,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String getGroup(String userName) { public String getGroup(String userName) {
return ph.getUser(userName).getGroup().getName(); return ph.getUser(userName).getGroup().getName();
} }
@@ -97,6 +102,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public List<String> getAllPlayersPermissions(String userName) { public List<String> getAllPlayersPermissions(String userName) {
List<String> perms = new ArrayList<String>(); List<String> perms = new ArrayList<String>();
perms.addAll(getAllPlayersPermissions(userName, true)); perms.addAll(getAllPlayersPermissions(userName, true));
@@ -143,8 +149,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
boolean negated = (perm.startsWith("-")); boolean negated = (perm.startsWith("-"));
// Perm doesn't already exists and there is no negation for it // Perm doesn't already exists and there is no negation for it
// or It's a negated perm where a normal perm doesn't exists (don't allow inheritance to negate higher perms) // or It's a negated perm where a normal perm doesn't exists (don't allow inheritance to negate higher perms)
if ((!negated && !playerPermArray.contains(perm) && !playerPermArray.contains("-" + perm)) if ((!negated && !playerPermArray.contains(perm) && !playerPermArray.contains("-" + perm)) || (negated && !playerPermArray.contains(perm.substring(1)) && !playerPermArray.contains("-" + perm)))
|| (negated && !playerPermArray.contains(perm.substring(1)) && !playerPermArray.contains("-" + perm)))
playerPermArray.add(perm); playerPermArray.add(perm);
} }
} }
@@ -155,7 +160,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
return playerPermArray; return playerPermArray;
} }
private Set<String> populatePerms (List<String> permsList, boolean includeChildren) { private Set<String> populatePerms(List<String> permsList, boolean includeChildren) {
// Create a new array so it's modifiable. // Create a new array so it's modifiable.
List<String> perms = new ArrayList<String>(permsList); List<String> perms = new ArrayList<String>(permsList);
@@ -171,37 +176,38 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
for (String perm : perms) { for (String perm : perms) {
/**
* all permission sets are passed here pre-sorted, alphabetically.
* This means negated nodes will be processed before all permissions
* other than *.
*/
boolean negated = perm.startsWith("-");
if (!permArray.contains(perm)) {
permArray.add(perm);
if ((negated) && (permArray.contains(perm.substring(1))))
permArray.remove(perm.substring(1));
/** /**
* all permission sets are passed here pre-sorted, alphabetically. * Process child nodes if required,
* This means negated nodes will be processed before all permissions * or this is a negated node AND we used * to include all
* other than *. * permissions,
* in which case we need to remove all children of that node.
*/ */
boolean negated = perm.startsWith("-"); if ((includeChildren) || (negated && allPerms)) {
if (!permArray.contains(perm)) { Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet<String>());
permArray.add(perm);
if ((negated) && (permArray.contains(perm.substring(1)))) if (children != null) {
permArray.remove(perm.substring(1)); if (negated)
if (allPerms) {
/** // Remove children of negated nodes
* Process child nodes if required, for (String child : children.keySet())
* or this is a negated node AND we used * to include all permissions, if (children.get(child))
* in which case we need to remove all children of that node. if (permArray.contains(child))
*/ permArray.remove(child);
if ((includeChildren) || (negated && allPerms)) {
Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet<String>());
if (children != null) {
if (negated)
if (allPerms) {
// Remove children of negated nodes
for (String child : children.keySet())
if (children.get(child))
if (permArray.contains(child))
permArray.remove(child);
} else { } else {
@@ -211,9 +217,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
if ((!permArray.contains(child)) && (!permArray.contains("-" + child))) if ((!permArray.contains(child)) && (!permArray.contains("-" + child)))
permArray.add(child); permArray.add(child);
} }
}
} }
} }
}
} }
return permArray; return permArray;
@@ -236,6 +242,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean inGroup(String name, String group) { public boolean inGroup(String name, String group) {
if (hasGroupInInheritance(ph.getUser(name).getGroup(), group)) { if (hasGroupInInheritance(ph.getUser(name).getGroup(), group)) {
return true; return true;
} }
@@ -326,6 +333,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String getGroupPrefix(String groupName) { public String getGroupPrefix(String groupName) {
Group g = ph.getGroup(groupName); Group g = ph.getGroup(groupName);
if (g == null) { if (g == null) {
return ""; return "";
@@ -341,6 +349,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String getGroupSuffix(String groupName) { public String getGroupSuffix(String groupName) {
Group g = ph.getGroup(groupName); Group g = ph.getGroup(groupName);
if (g == null) { if (g == null) {
return ""; return "";
@@ -357,6 +366,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean canGroupBuild(String groupName) { public boolean canGroupBuild(String groupName) {
Group g = ph.getGroup(groupName); Group g = ph.getGroup(groupName);
if (g == null) { if (g == null) {
return false; return false;
@@ -374,6 +384,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String getGroupPermissionString(String groupName, String variable) { public String getGroupPermissionString(String groupName, String variable) {
Group start = ph.getGroup(groupName); Group start = ph.getGroup(groupName);
if (start == null) { if (start == null) {
return null; return null;
@@ -395,6 +406,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public int getGroupPermissionInteger(String groupName, String variable) { public int getGroupPermissionInteger(String groupName, String variable) {
Group start = ph.getGroup(groupName); Group start = ph.getGroup(groupName);
if (start == null) { if (start == null) {
return -1; return -1;
@@ -416,6 +428,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean getGroupPermissionBoolean(String group, String variable) { public boolean getGroupPermissionBoolean(String group, String variable) {
Group start = ph.getGroup(group); Group start = ph.getGroup(group);
if (start == null) { if (start == null) {
return false; return false;
@@ -437,6 +450,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public double getGroupPermissionDouble(String group, String variable) { public double getGroupPermissionDouble(String group, String variable) {
Group start = ph.getGroup(group); Group start = ph.getGroup(group);
if (start == null) { if (start == null) {
return -1; return -1;
@@ -457,6 +471,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String getUserPermissionString(String user, String variable) { public String getUserPermissionString(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return ""; return "";
@@ -473,6 +488,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public int getUserPermissionInteger(String user, String variable) { public int getUserPermissionInteger(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return -1; return -1;
@@ -489,6 +505,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean getUserPermissionBoolean(String user, String variable) { public boolean getUserPermissionBoolean(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return false; return false;
@@ -505,6 +522,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public double getUserPermissionDouble(String user, String variable) { public double getUserPermissionDouble(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return -1; return -1;
@@ -523,6 +541,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String getPermissionString(String user, String variable) { public String getPermissionString(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return ""; return "";
@@ -562,6 +581,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public int getPermissionInteger(String user, String variable) { public int getPermissionInteger(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return -1; return -1;
@@ -601,6 +621,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public boolean getPermissionBoolean(String user, String variable) { public boolean getPermissionBoolean(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return false; return false;
@@ -640,6 +661,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public double getPermissionDouble(String user, String variable) { public double getPermissionDouble(String user, String variable) {
User auser = ph.getUser(user); User auser = ph.getUser(user);
if (auser == null) { if (auser == null) {
return -1.0D; return -1.0D;
@@ -676,6 +698,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return PermissionCheckResult * @return PermissionCheckResult
*/ */
public PermissionCheckResult checkUserOnlyPermission(User user, String permission) { public PermissionCheckResult checkUserOnlyPermission(User user, String permission) {
user.sortPermissions(); user.sortPermissions();
PermissionCheckResult result = new PermissionCheckResult(); PermissionCheckResult result = new PermissionCheckResult();
result.askedPermission = permission; result.askedPermission = permission;
@@ -699,6 +722,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return the node if permission is found. if not found, return null * @return the node if permission is found. if not found, return null
*/ */
public PermissionCheckResult checkGroupOnlyPermission(Group group, String permission) { public PermissionCheckResult checkGroupOnlyPermission(Group group, String permission) {
group.sortPermissions(); group.sortPermissions();
PermissionCheckResult result = new PermissionCheckResult(); PermissionCheckResult result = new PermissionCheckResult();
result.owner = group; result.owner = group;
@@ -721,6 +745,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return true if permission was found. false if not, or was negated. * @return true if permission was found. false if not, or was negated.
*/ */
public boolean checkUserPermission(User user, String permission) { public boolean checkUserPermission(User user, String permission) {
PermissionCheckResult result = checkFullGMPermission(user, permission, true); PermissionCheckResult result = checkFullGMPermission(user, permission, true);
if (result.resultType == PermissionCheckResult.Type.EXCEPTION || result.resultType == PermissionCheckResult.Type.FOUND) { if (result.resultType == PermissionCheckResult.Type.EXCEPTION || result.resultType == PermissionCheckResult.Type.FOUND) {
return true; return true;
@@ -752,6 +777,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return PermissionCheckResult * @return PermissionCheckResult
*/ */
public PermissionCheckResult checkFullGMPermission(User user, String targetPermission, Boolean checkBukkit) { public PermissionCheckResult checkFullGMPermission(User user, String targetPermission, Boolean checkBukkit) {
PermissionCheckResult result = new PermissionCheckResult(); PermissionCheckResult result = new PermissionCheckResult();
result.accessLevel = targetPermission; result.accessLevel = targetPermission;
result.resultType = PermissionCheckResult.Type.NOTFOUND; result.resultType = PermissionCheckResult.Type.NOTFOUND;
@@ -813,6 +839,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Deprecated @Deprecated
public Group nextGroupWithVariable(Group start, String variable, List<Group> alreadyChecked) { public Group nextGroupWithVariable(Group start, String variable, List<Group> alreadyChecked) {
return nextGroupWithVariable(start, variable); return nextGroupWithVariable(start, variable);
} }
@@ -829,6 +856,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return The group if found. Null if not. * @return The group if found. Null if not.
*/ */
public Group nextGroupWithVariable(Group start, String targetVariable) { public Group nextGroupWithVariable(Group start, String targetVariable) {
if (start == null || targetVariable == null) { if (start == null || targetVariable == null) {
return null; return null;
} }
@@ -870,6 +898,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Deprecated @Deprecated
public boolean searchGroupInInheritance(Group start, String askedGroup, List<Group> alreadyChecked) { public boolean searchGroupInInheritance(Group start, String askedGroup, List<Group> alreadyChecked) {
return hasGroupInInheritance(start, askedGroup); return hasGroupInInheritance(start, askedGroup);
} }
@@ -885,6 +914,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return true if it inherits the group. * @return true if it inherits the group.
*/ */
public boolean hasGroupInInheritance(Group start, String askedGroup) { public boolean hasGroupInInheritance(Group start, String askedGroup) {
if (start == null || askedGroup == null) { if (start == null || askedGroup == null) {
return false; return false;
} }
@@ -920,6 +950,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Deprecated @Deprecated
public boolean checkGroupPermissionWithInheritance(Group start, String permission, List<Group> alreadyChecked) { public boolean checkGroupPermissionWithInheritance(Group start, String permission, List<Group> alreadyChecked) {
PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission); PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission);
if (result.resultType.equals(Type.EXCEPTION) || result.resultType.equals(Type.FOUND)) { if (result.resultType.equals(Type.EXCEPTION) || result.resultType.equals(Type.FOUND)) {
return true; return true;
@@ -942,6 +973,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return PermissionCheckResult * @return PermissionCheckResult
*/ */
public PermissionCheckResult checkGroupPermissionWithInheritance(Group start, String targetPermission) { public PermissionCheckResult checkGroupPermissionWithInheritance(Group start, String targetPermission) {
if (start == null || targetPermission == null) { if (start == null || targetPermission == null) {
return null; return null;
} }
@@ -982,6 +1014,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Deprecated @Deprecated
public Group nextGroupWithPermission(Group start, String permission, List<Group> alreadyChecked) { public Group nextGroupWithPermission(Group start, String permission, List<Group> alreadyChecked) {
PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission); PermissionCheckResult result = checkGroupPermissionWithInheritance(start, permission);
if (result.resultType.equals(Type.EXCEPTION) || result.resultType.equals(Type.FOUND)) { if (result.resultType.equals(Type.EXCEPTION) || result.resultType.equals(Type.FOUND)) {
return (Group) checkGroupPermissionWithInheritance(start, permission).owner; return (Group) checkGroupPermissionWithInheritance(start, permission).owner;
@@ -1003,6 +1036,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Deprecated @Deprecated
public ArrayList<String> listAllGroupsInherited(Group start, ArrayList<String> alreadyChecked) { public ArrayList<String> listAllGroupsInherited(Group start, ArrayList<String> alreadyChecked) {
return listAllGroupsInherited(start); return listAllGroupsInherited(start);
} }
@@ -1016,6 +1050,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return the group that passed on test. null if no group passed. * @return the group that passed on test. null if no group passed.
*/ */
public ArrayList<String> listAllGroupsInherited(Group start) { public ArrayList<String> listAllGroupsInherited(Group start) {
if (start == null) { if (start == null) {
return null; return null;
} }
@@ -1055,6 +1090,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
* @return PermissionCheckResult.Type * @return PermissionCheckResult.Type
*/ */
public PermissionCheckResult.Type comparePermissionString(String userAccessLevel, String fullPermissionName) { public PermissionCheckResult.Type comparePermissionString(String userAccessLevel, String fullPermissionName) {
int userAccessLevelLength; int userAccessLevelLength;
if (userAccessLevel == null || fullPermissionName == null || fullPermissionName.length() == 0 || (userAccessLevelLength = userAccessLevel.length()) == 0) { if (userAccessLevel == null || fullPermissionName == null || fullPermissionName.length() == 0 || (userAccessLevelLength = userAccessLevel.length()) == 0) {
return PermissionCheckResult.Type.NOTFOUND; return PermissionCheckResult.Type.NOTFOUND;
@@ -1080,12 +1116,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
} }
if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') { if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') {
return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset - 1) ? return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset - 1) ? result : PermissionCheckResult.Type.NOTFOUND;
result : PermissionCheckResult.Type.NOTFOUND;
} else { } else {
return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, Math.max(userAccessLevelLength - userAccessLevelOffset, fullPermissionName.length() - fullPermissionNameOffset)) ? result : PermissionCheckResult.Type.NOTFOUND;
Math.max(userAccessLevelLength - userAccessLevelOffset, fullPermissionName.length() - fullPermissionNameOffset)) ?
result : PermissionCheckResult.Type.NOTFOUND;
} }
} }
@@ -1099,6 +1132,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@Override @Override
public String[] getGroups(String userName) { public String[] getGroups(String userName) {
ArrayList<String> allGroups = listAllGroupsInherited(ph.getUser(userName).getGroup()); ArrayList<String> allGroups = listAllGroupsInherited(ph.getUser(userName).getGroup());
for (Group subg : ph.getUser(userName).subGroupListCopy()) { for (Group subg : ph.getUser(userName).subGroupListCopy()) {
allGroups.addAll(listAllGroupsInherited(subg)); allGroups.addAll(listAllGroupsInherited(subg));
@@ -1120,6 +1154,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
private Group breadthFirstSearch(Group start, String targerPermission) { private Group breadthFirstSearch(Group start, String targerPermission) {
if (start == null || targerPermission == null) { if (start == null || targerPermission == null) {
return null; return null;
} }
@@ -1149,11 +1184,13 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
@Override @Override
public Group getDefaultGroup() { public Group getDefaultGroup() {
return ph.getDefaultGroup(); return ph.getDefaultGroup();
} }
@Override @Override
public String getInfoString(String entryName, String path, boolean isGroup) { public String getInfoString(String entryName, String path, boolean isGroup) {
if (isGroup) { if (isGroup) {
Group data = ph.getGroup(entryName); Group data = ph.getGroup(entryName);
if (data == null) { if (data == null) {
@@ -1171,6 +1208,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
@Override @Override
public int getInfoInteger(String entryName, String path, boolean isGroup) { public int getInfoInteger(String entryName, String path, boolean isGroup) {
if (isGroup) { if (isGroup) {
Group data = ph.getGroup(entryName); Group data = ph.getGroup(entryName);
if (data == null) { if (data == null) {
@@ -1188,6 +1226,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
@Override @Override
public double getInfoDouble(String entryName, String path, boolean isGroup) { public double getInfoDouble(String entryName, String path, boolean isGroup) {
if (isGroup) { if (isGroup) {
Group data = ph.getGroup(entryName); Group data = ph.getGroup(entryName);
if (data == null) { if (data == null) {
@@ -1206,6 +1245,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
@Override @Override
public boolean getInfoBoolean(String entryName, String path, boolean isGroup) { public boolean getInfoBoolean(String entryName, String path, boolean isGroup) {
if (isGroup) { if (isGroup) {
Group data = ph.getGroup(entryName); Group data = ph.getGroup(entryName);
if (data == null) { if (data == null) {
@@ -1223,21 +1263,25 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
@Override @Override
public void addUserInfo(String name, String path, Object data) { public void addUserInfo(String name, String path, Object data) {
ph.getUser(name).getVariables().addVar(path, data); ph.getUser(name).getVariables().addVar(path, data);
} }
@Override @Override
public void removeUserInfo(String name, String path) { public void removeUserInfo(String name, String path) {
ph.getUser(name).getVariables().removeVar(path); ph.getUser(name).getVariables().removeVar(path);
} }
@Override @Override
public void addGroupInfo(String name, String path, Object data) { public void addGroupInfo(String name, String path, Object data) {
ph.getGroup(name).getVariables().addVar(path, data); ph.getGroup(name).getVariables().addVar(path, data);
} }
@Override @Override
public void removeGroupInfo(String name, String path) { public void removeGroupInfo(String name, String path) {
ph.getGroup(name).getVariables().removeVar(path); ph.getGroup(name).getVariables().removeVar(path);
} }
} }

View File

@@ -1,18 +1,19 @@
/* /*
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 * as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
*/ * USA.
*/
package org.anjocaido.groupmanager.permissions; package org.anjocaido.groupmanager.permissions;
@@ -47,7 +48,6 @@ import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
/** /**
* *
* BukkitPermissions overrides to force GM reponses to Superperms * BukkitPermissions overrides to force GM reponses to Superperms
@@ -67,6 +67,7 @@ public class BukkitPermissions {
* @return the player_join * @return the player_join
*/ */
public boolean isPlayer_join() { public boolean isPlayer_join() {
return player_join; return player_join;
} }
@@ -74,6 +75,7 @@ public class BukkitPermissions {
* @param player_join the player_join to set * @param player_join the player_join to set
*/ */
public void setPlayer_join(boolean player_join) { public void setPlayer_join(boolean player_join) {
this.player_join = player_join; this.player_join = player_join;
} }
@@ -92,6 +94,7 @@ public class BukkitPermissions {
} }
public BukkitPermissions(GroupManager plugin) { public BukkitPermissions(GroupManager plugin) {
this.plugin = plugin; this.plugin = plugin;
this.collectPermissions(); this.collectPermissions();
this.registerEvents(); this.registerEvents();
@@ -101,35 +104,38 @@ public class BukkitPermissions {
} }
private void registerEvents() { private void registerEvents() {
PluginManager manager = plugin.getServer().getPluginManager(); PluginManager manager = plugin.getServer().getPluginManager();
manager.registerEvents(new PlayerEvents(), plugin); manager.registerEvents(new PlayerEvents(), plugin);
manager.registerEvents(new BukkitEvents(), plugin); manager.registerEvents(new BukkitEvents(), plugin);
} }
public void collectPermissions() { public void collectPermissions() {
registeredPermissions.clear(); registeredPermissions.clear();
for (Permission perm : Bukkit.getPluginManager().getPermissions()) { for (Permission perm : Bukkit.getPluginManager().getPermissions()) {
registeredPermissions.put(perm.getName().toLowerCase(), perm); registeredPermissions.put(perm.getName().toLowerCase(), perm);
} }
} }
public void updatePermissions(Player player) { public void updatePermissions(Player player) {
this.updatePermissions(player, null); this.updatePermissions(player, null);
} }
/** /**
* Push all permissions which are registered with GM for this player, on this world to Bukkit * Push all permissions which are registered with GM for this player, on
* this world to Bukkit
* and make it update for the child nodes. * and make it update for the child nodes.
* *
* @param player * @param player
* @param world * @param world
*/ */
public void updatePermissions(Player player, String world) { public void updatePermissions(Player player, String world) {
if (player == null || !GroupManager.isLoaded()) { if (player == null || !GroupManager.isLoaded()) {
return; return;
} }
@@ -159,13 +165,14 @@ public class BukkitPermissions {
Boolean value = false; Boolean value = false;
for (String permission : playerPermArray) { for (String permission : playerPermArray) {
value = (!permission.startsWith("-")); value = (!permission.startsWith("-"));
newPerms.put((value? permission : permission.substring(1)), value); newPerms.put((value ? permission : permission.substring(1)), value);
} }
/** /**
* This is put in place until such a time as Bukkit pull 466 is implemented * This is put in place until such a time as Bukkit pull 466 is
* https://github.com/Bukkit/Bukkit/pull/466 * implemented
*/ * https://github.com/Bukkit/Bukkit/pull/466
*/
try { // Codename_B source try { // Codename_B source
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Map<String, Boolean> orig = (Map<String, Boolean>) permissions.get(attachment); Map<String, Boolean> orig = (Map<String, Boolean>) permissions.get(attachment);
@@ -194,15 +201,15 @@ public class BukkitPermissions {
List<String> result = new ArrayList<String>(); List<String> result = new ArrayList<String>();
for (String key : permList) { for (String key : permList) {
String a = key.charAt(0) == '-'? key.substring(1):key; String a = key.charAt(0) == '-' ? key.substring(1) : key;
Map<String, Boolean> allchildren = GroupManager.BukkitPermissions.getAllChildren(a, new HashSet<String>()); Map<String, Boolean> allchildren = GroupManager.BukkitPermissions.getAllChildren(a, new HashSet<String>());
if (allchildren != null) { if (allchildren != null) {
ListIterator<String> itr = result.listIterator(); ListIterator<String> itr = result.listIterator();
while (itr.hasNext()){ while (itr.hasNext()) {
String node = (String) itr.next(); String node = (String) itr.next();
String b = node.charAt(0) == '-'? node.substring(1):node; String b = node.charAt(0) == '-' ? node.substring(1) : node;
// Insert the parent node before the child // Insert the parent node before the child
if (allchildren.containsKey(b)) { if (allchildren.containsKey(b)) {
@@ -219,7 +226,6 @@ public class BukkitPermissions {
return result; return result;
} }
/** /**
* Fetch all permissions which are registered with superperms. * Fetch all permissions which are registered with superperms.
* {can include child nodes) * {can include child nodes)
@@ -254,7 +260,8 @@ public class BukkitPermissions {
* null is empty * null is empty
* *
* @param node * @param node
* @param playerPermArray current list of perms to check against for negations * @param playerPermArray current list of perms to check against for
* negations
* @return Map of child permissions * @return Map of child permissions
*/ */
public Map<String, Boolean> getAllChildren(String node, Set<String> playerPermArray) { public Map<String, Boolean> getAllChildren(String node, Set<String> playerPermArray) {
@@ -269,7 +276,7 @@ public class BukkitPermissions {
Map<String, Boolean> children = getChildren(now); Map<String, Boolean> children = getChildren(now);
if ((children != null) && (!playerPermArray.contains("-"+now))) { if ((children != null) && (!playerPermArray.contains("-" + now))) {
for (String childName : children.keySet()) { for (String childName : children.keySet()) {
if (!alreadyVisited.containsKey(childName)) { if (!alreadyVisited.containsKey(childName)) {
stack.push(childName); stack.push(childName);
@@ -279,13 +286,15 @@ public class BukkitPermissions {
} }
} }
alreadyVisited.remove(node); alreadyVisited.remove(node);
if (!alreadyVisited.isEmpty()) return alreadyVisited; if (!alreadyVisited.isEmpty())
return alreadyVisited;
return null; return null;
} }
/** /**
* Returns a map of the child permissions (1 node deep) as registered with Bukkit. * Returns a map of the child permissions (1 node deep) as registered with
* Bukkit.
* null is empty * null is empty
* *
* @param node * @param node
@@ -308,6 +317,7 @@ public class BukkitPermissions {
* @return List<String> of permissions * @return List<String> of permissions
*/ */
public List<String> listPerms(Player player) { public List<String> listPerms(Player player) {
List<String> perms = new ArrayList<String>(); List<String> perms = new ArrayList<String>();
/* /*
@@ -332,6 +342,7 @@ public class BukkitPermissions {
* force Bukkit to update every OnlinePlayers permissions. * force Bukkit to update every OnlinePlayers permissions.
*/ */
public void updateAllPlayers() { public void updateAllPlayers() {
for (Player player : Bukkit.getServer().getOnlinePlayers()) { for (Player player : Bukkit.getServer().getOnlinePlayers()) {
updatePermissions(player); updatePermissions(player);
} }
@@ -341,6 +352,7 @@ public class BukkitPermissions {
* force Bukkit to update this Players permissions. * force Bukkit to update this Players permissions.
*/ */
public void updatePlayer(Player player) { public void updatePlayer(Player player) {
if (player != null) if (player != null)
this.updatePermissions(player, null); this.updatePermissions(player, null);
} }
@@ -351,6 +363,7 @@ public class BukkitPermissions {
* @param player * @param player
*/ */
private void removeAttachment(Player player) { private void removeAttachment(Player player) {
if (attachments.containsKey(player)) { if (attachments.containsKey(player)) {
try { try {
player.removeAttachment(attachments.get(player)); player.removeAttachment(attachments.get(player));
@@ -371,7 +384,7 @@ public class BukkitPermissions {
Iterator<Player> itr = attachments.keySet().iterator(); Iterator<Player> itr = attachments.keySet().iterator();
while (itr.hasNext()){ while (itr.hasNext()) {
Player player = itr.next(); Player player = itr.next();
try { try {
player.removeAttachment(attachments.get(player)); player.removeAttachment(attachments.get(player));
@@ -395,6 +408,7 @@ public class BukkitPermissions {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
setPlayer_join(true); setPlayer_join(true);
Player player = event.getPlayer(); Player player = event.getPlayer();
@@ -413,11 +427,13 @@ public class BukkitPermissions {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerChangeWorld(PlayerChangedWorldEvent event) { // has changed worlds public void onPlayerChangeWorld(PlayerChangedWorldEvent event) { // has changed worlds
updatePermissions(event.getPlayer(), event.getPlayer().getWorld().getName()); updatePermissions(event.getPlayer(), event.getPlayer().getWorld().getName());
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerKick(PlayerKickEvent event) { public void onPlayerKick(PlayerKickEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
/* /*
@@ -428,6 +444,7 @@ public class BukkitPermissions {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
if (!GroupManager.isLoaded()) if (!GroupManager.isLoaded())
return; return;
@@ -444,6 +461,7 @@ public class BukkitPermissions {
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
public void onPluginEnable(PluginEnableEvent event) { public void onPluginEnable(PluginEnableEvent event) {
if (!GroupManager.isLoaded()) if (!GroupManager.isLoaded())
return; return;
@@ -453,6 +471,7 @@ public class BukkitPermissions {
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
public void onPluginDisable(PluginDisableEvent event) { public void onPluginDisable(PluginDisableEvent event) {
collectPermissions(); collectPermissions();
// updateAllPlayers(); // updateAllPlayers();
} }

View File

@@ -21,218 +21,230 @@ import org.bukkit.entity.Player;
*/ */
public abstract class PermissionsReaderInterface { public abstract class PermissionsReaderInterface {
/** /**
* *
* @param player * @param player
* @param string * @param string
* @return true if has permission * @return true if has permission
*/ */
public abstract boolean has(Player player, String string); public abstract boolean has(Player player, String string);
/** /**
* *
* @param player * @param player
* @param string * @param string
* @return true if has permission * @return true if has permission
*/ */
public abstract boolean permission(Player player, String string); public abstract boolean permission(Player player, String string);
/** /**
* *
* @param userName * @param userName
* @return group name for this player. * @return group name for this player.
*/ */
public abstract String getGroup(String userName); public abstract String getGroup(String userName);
/** /**
* *
* @param userName * @param userName
* @param groupName * @param groupName
* @return true if in group * @return true if in group
*/ */
public abstract boolean inGroup(String userName, String groupName); public abstract boolean inGroup(String userName, String groupName);
/** /**
* *
* @param groupName * @param groupName
* @return String of prefix * @return String of prefix
*/ */
public abstract String getGroupPrefix(String groupName); public abstract String getGroupPrefix(String groupName);
/** /**
* *
* @param groupName * @param groupName
* @return String of suffix * @return String of suffix
*/ */
public abstract String getGroupSuffix(String groupName); public abstract String getGroupSuffix(String groupName);
/** /**
* *
* @param groupName * @param groupName
* @return true if can build * @return true if can build
*/ */
public abstract boolean canGroupBuild(String groupName); public abstract boolean canGroupBuild(String groupName);
/** /**
* *
* @param groupName * @param groupName
* @param node * @param node
* @return String value * @return String value
*/ */
public abstract String getGroupPermissionString(String groupName, String node); public abstract String getGroupPermissionString(String groupName, String node);
/** /**
* *
* @param groupName * @param groupName
* @param node * @param node
* @return integer value * @return integer value
*/ */
public abstract int getGroupPermissionInteger(String groupName, String node); public abstract int getGroupPermissionInteger(String groupName, String node);
/** /**
* *
* @param groupName * @param groupName
* @param node * @param node
* @return boolean value * @return boolean value
*/ */
public abstract boolean getGroupPermissionBoolean(String groupName, String node); public abstract boolean getGroupPermissionBoolean(String groupName, String node);
/** /**
* *
* @param groupName * @param groupName
* @param node * @param node
* @return double value * @return double value
*/ */
public abstract double getGroupPermissionDouble(String groupName, String node); public abstract double getGroupPermissionDouble(String groupName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return String value * @return String value
*/ */
public abstract String getUserPermissionString(String userName, String node); public abstract String getUserPermissionString(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return integer value * @return integer value
*/ */
public abstract int getUserPermissionInteger(String userName, String node); public abstract int getUserPermissionInteger(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return boolean value * @return boolean value
*/ */
public abstract boolean getUserPermissionBoolean(String userName, String node); public abstract boolean getUserPermissionBoolean(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return double value * @return double value
*/ */
public abstract double getUserPermissionDouble(String userName, String node); public abstract double getUserPermissionDouble(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return String value * @return String value
*/ */
public abstract String getPermissionString(String userName, String node); public abstract String getPermissionString(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return integer value * @return integer value
*/ */
public abstract int getPermissionInteger(String userName, String node); public abstract int getPermissionInteger(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return boolean value * @return boolean value
*/ */
public abstract boolean getPermissionBoolean(String userName, String node); public abstract boolean getPermissionBoolean(String userName, String node);
/** /**
* *
* @param userName * @param userName
* @param node * @param node
* @return double value * @return double value
*/ */
public abstract double getPermissionDouble(String userName, String node); public abstract double getPermissionDouble(String userName, String node);
///////////////////////////// /////////////////////////////
/** /**
* Gets the appropriate prefix for the user. * Gets the appropriate prefix for the user.
* This method is a utility method for chat plugins to get the user's prefix * This method is a utility method for chat plugins to get the user's prefix
* without having to look at every one of the user's ancestors. * without having to look at every one of the user's ancestors.
* Returns an empty string if user has no parent groups. * Returns an empty string if user has no parent groups.
* *
* @param user Player's name * @param user Player's name
* @return Player's prefix * @return Player's prefix
*/ */
public abstract String getUserPrefix(String user); public abstract String getUserPrefix(String user);
/** /**
* Gets the appropriate suffix for the user. * Gets the appropriate suffix for the user.
* This method is a utility method for chat plugins to get the user's suffix * This method is a utility method for chat plugins to get the user's suffix
* without having to look at every one of the user's ancestors. * without having to look at every one of the user's ancestors.
* Returns an empty string if user has no parent groups. * Returns an empty string if user has no parent groups.
* *
* @param user Player's name * @param user Player's name
* @return Player's suffix * @return Player's suffix
*/ */
public abstract String getUserSuffix(String user); public abstract String getUserSuffix(String user);
/** /**
* Returns the group object representing the default group of the given world. * Returns the group object representing the default group of the given
* This method will return null if the object does not exist or the world has no default group. * world.
* @return Group object representing default world, or null if it doesn't exist or is not defined. * This method will return null if the object does not exist or the world
*/ * has no default group.
public abstract Group getDefaultGroup(); *
* @return Group object representing default world, or null if it doesn't
* exist or is not defined.
*/
public abstract Group getDefaultGroup();
/** /**
* Gets a array of the names of all parent groups in the same world. * Gets a array of the names of all parent groups in the same world.
* @param name Target user's name *
* @return An array containing the names of all parent groups (including ancestors) that are in the same world * @param name Target user's name
*/ * @return An array containing the names of all parent groups (including
public abstract String[] getGroups(String name); * ancestors) that are in the same world
*/
public abstract String[] getGroups(String name);
public abstract String getInfoString(String entryName, String path, boolean isGroup); public abstract String getInfoString(String entryName, String path, boolean isGroup);
//public abstract String getInfoString(String entryName, String path, boolean isGroup, Comparator<String> comparator);
public abstract int getInfoInteger(String entryName, String path, boolean isGroup); //public abstract String getInfoString(String entryName, String path, boolean isGroup, Comparator<String> comparator);
//public abstract int getInfoInteger(String entryName, String path, boolean isGroup, Comparator<Integer> comparator);
/** public abstract int getInfoInteger(String entryName, String path, boolean isGroup);
* Gets a double from the Info node without inheritance.
* @param entryName
* @param path
* @param isGroup
* @return -1 if not found
*/
public abstract double getInfoDouble(String entryName, String path, boolean isGroup);
//public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator<Double> comparator);
public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup); //public abstract int getInfoInteger(String entryName, String path, boolean isGroup, Comparator<Integer> comparator);
//public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup, Comparator<Boolean> comparator);
public abstract void addUserInfo(String name, String path, Object data); /**
* Gets a double from the Info node without inheritance.
*
* @param entryName
* @param path
* @param isGroup
* @return -1 if not found
*/
public abstract double getInfoDouble(String entryName, String path, boolean isGroup);
public abstract void removeUserInfo(String name, String path); //public abstract double getInfoDouble(String entryName, String path, boolean isGroup, Comparator<Double> comparator);
public abstract void addGroupInfo(String name, String path, Object data); public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup);
public abstract void removeGroupInfo(String name, String path); //public abstract boolean getInfoBoolean(String entryName, String path, boolean isGroup, Comparator<Boolean> comparator);
//////////////////////////////
public abstract void addUserInfo(String name, String path, Object data);
public abstract void removeUserInfo(String name, String path);
public abstract void addGroupInfo(String name, String path, Object data);
public abstract void removeGroupInfo(String name, String path);
//////////////////////////////
public abstract List<String> getAllPlayersPermissions(String userName); public abstract List<String> getAllPlayersPermissions(String userName);

View File

@@ -14,13 +14,14 @@ import java.util.logging.LogRecord;
*/ */
public class GMLoggerHandler extends ConsoleHandler { public class GMLoggerHandler extends ConsoleHandler {
@Override @Override
public void publish(LogRecord record) { public void publish(LogRecord record) {
String message = "GroupManager - " + record.getLevel() + " - " + record.getMessage();
if (record.getLevel().equals(Level.SEVERE) || record.getLevel().equals(Level.WARNING)) { String message = "GroupManager - " + record.getLevel() + " - " + record.getMessage();
System.err.println(message); if (record.getLevel().equals(Level.SEVERE) || record.getLevel().equals(Level.WARNING)) {
} else { System.err.println(message);
System.out.println(message); } else {
} System.out.println(message);
} }
}
} }

View File

@@ -6,47 +6,10 @@ package org.anjocaido.groupmanager.utils;
/** /**
* Just a list of commands for this plugin * Just a list of commands for this plugin
*
* @author gabrielcouto * @author gabrielcouto
*/ */
public enum GroupManagerPermissions { public enum GroupManagerPermissions {
manuadd, manuadd, manudel, manuaddsub, manudelsub, mangadd, mangdel, manuaddp, manudelp, manulistp, manucheckp, mangaddp, mangdelp, manglistp, mangcheckp, mangaddi, mangdeli, manuaddv, manudelv, manulistv, manucheckv, mangaddv, mangdelv, manglistv, mangcheckv, manwhois, tempadd, tempdel, templist, tempdelall, mansave, manload, listgroups, manpromote, mandemote, mantogglevalidate, mantogglesave, manworld, manselect, manclear
manudel,
manuaddsub,
manudelsub,
mangadd,
mangdel,
manuaddp,
manudelp,
manulistp,
manucheckp,
mangaddp,
mangdelp,
manglistp,
mangcheckp,
mangaddi,
mangdeli,
manuaddv,
manudelv,
manulistv,
manucheckv,
mangaddv,
mangdelv,
manglistv,
mangcheckv,
manwhois,
tempadd,
tempdel,
templist,
tempdelall,
mansave,
manload,
listgroups,
manpromote,
mandemote,
mantogglevalidate,
mantogglesave,
manworld,
manselect,
manclear
} }

View File

@@ -12,56 +12,56 @@ import org.anjocaido.groupmanager.data.DataUnit;
*/ */
public class PermissionCheckResult { public class PermissionCheckResult {
/** /**
* It should be the owner of the access level found. * It should be the owner of the access level found.
* *
* Use instanceof to find the owner type * Use instanceof to find the owner type
*/ */
public DataUnit owner; public DataUnit owner;
/** /**
* The permission node found in the DataUnit. * The permission node found in the DataUnit.
*/ */
public String accessLevel; public String accessLevel;
/** /**
* The full name of the permission you are looking for * The full name of the permission you are looking for
*/ */
public String askedPermission; public String askedPermission;
/** /**
* The result conclusion of the search. * The result conclusion of the search.
* It determines if the owner can do, or not. * It determines if the owner can do, or not.
* *
* It even determines if it has an owner. * It even determines if it has an owner.
*/ */
public Type resultType = Type.NOTFOUND; public Type resultType = Type.NOTFOUND;
/** /**
* The type of result the search can give. * The type of result the search can give.
*/ */
public enum Type { public enum Type {
/** /**
* If found a matching node starting with '+'. * If found a matching node starting with '+'.
* It means the user CAN do the permission. * It means the user CAN do the permission.
*/ */
EXCEPTION, EXCEPTION,
/** /**
* If found a matching node starting with '-'. * If found a matching node starting with '-'.
* It means the user CANNOT do the permission. * It means the user CANNOT do the permission.
*/ */
NEGATION, NEGATION,
/** /**
* If just found a common matching node. * If just found a common matching node.
* IT means the user CAN do the permission. * IT means the user CAN do the permission.
*/ */
FOUND, FOUND,
/** /**
* If no matchin node was found. * If no matchin node was found.
* It means the user CANNOT do the permission. * It means the user CANNOT do the permission.
* *
* owner field and accessLevel field should not be considered, * owner field and accessLevel field should not be considered,
* when type is * when type is
* NOTFOUND * NOTFOUND
*/ */
NOTFOUND NOTFOUND
} }
} }

View File

@@ -12,38 +12,41 @@ import java.util.Comparator;
*/ */
public class StringPermissionComparator implements Comparator<String> { public class StringPermissionComparator implements Comparator<String> {
@Override @Override
public int compare(String permA, String permB) { public int compare(String permA, String permB) {
boolean ap = permA.startsWith("+");
boolean bp = permB.startsWith("+");
boolean am = permA.startsWith("-");
boolean bm = permB.startsWith("-");
if (ap && bp) {
return 0;
}
if (ap && !bp) {
return -1;
}
if (!ap && bp) {
return 1;
}
if (am && bm) {
return 0;
}
if (am && !bm) {
return -1;
}
if (!am && bm) {
return 1;
}
return permA.compareToIgnoreCase(permB);
}
private static StringPermissionComparator instance;
public static StringPermissionComparator getInstance() { boolean ap = permA.startsWith("+");
if (instance == null) { boolean bp = permB.startsWith("+");
instance = new StringPermissionComparator(); boolean am = permA.startsWith("-");
} boolean bm = permB.startsWith("-");
return instance; if (ap && bp) {
} return 0;
}
if (ap && !bp) {
return -1;
}
if (!ap && bp) {
return 1;
}
if (am && bm) {
return 0;
}
if (am && !bm) {
return -1;
}
if (!am && bm) {
return 1;
}
return permA.compareToIgnoreCase(permB);
}
private static StringPermissionComparator instance;
public static StringPermissionComparator getInstance() {
if (instance == null) {
instance = new StringPermissionComparator();
}
return instance;
}
} }

View File

@@ -22,7 +22,6 @@ import java.util.List;
import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.GroupManager;
import org.anjocaido.groupmanager.data.Group; import org.anjocaido.groupmanager.data.Group;
/** /**
* *
* @author gabrielcouto * @author gabrielcouto
@@ -36,35 +35,38 @@ public abstract class Tasks {
* @return stack trace as a string * @return stack trace as a string
*/ */
public static String getStackTraceAsString(Exception exception) { public static String getStackTraceAsString(Exception exception) {
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw); PrintWriter pw = new PrintWriter(sw);
exception.printStackTrace(pw); exception.printStackTrace(pw);
return sw.toString(); return sw.toString();
} }
public static void copy(InputStream src, File dst) throws IOException { public static void copy(InputStream src, File dst) throws IOException {
InputStream in = src;
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out InputStream in = src;
byte[] buf = new byte[1024]; OutputStream out = new FileOutputStream(dst);
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
try {
in.close();
} catch (Exception e) {
}
}
public static void copy(File src, File dst) throws IOException { // Transfer bytes from in to out
InputStream in = new FileInputStream(src); byte[] buf = new byte[1024];
copy(in, dst); int len;
} while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
try {
in.close();
} catch (Exception e) {
}
}
/** public static void copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
copy(in, dst);
}
/**
* Appends a string to a file * Appends a string to a file
* *
* @param data * @param data
@@ -86,82 +88,88 @@ public abstract class Tasks {
out.close(); out.close();
} }
public static void removeOldFiles(GroupManager gm, File folder) { public static void removeOldFiles(GroupManager gm, File folder) {
if (folder.isDirectory()) {
long oldTime = System.currentTimeMillis() - (((long)gm.getGMConfig().getBackupDuration()*60*60)*1000);
for (File olds : folder.listFiles()) {
if (olds.isFile()) {
if (olds.lastModified() < oldTime) {
try {
olds.delete();
} catch (Exception e) {
}
}
}
}
}
}
public static String getDateString() { if (folder.isDirectory()) {
GregorianCalendar now = new GregorianCalendar(); long oldTime = System.currentTimeMillis() - (((long) gm.getGMConfig().getBackupDuration() * 60 * 60) * 1000);
String date = ""; for (File olds : folder.listFiles()) {
date += now.get(Calendar.DAY_OF_MONTH); if (olds.isFile()) {
date += "-"; if (olds.lastModified() < oldTime) {
date += now.get(Calendar.HOUR); try {
date += "-"; olds.delete();
date += now.get(Calendar.MINUTE); } catch (Exception e) {
return date; }
} }
}
}
}
}
public static String getStringListInString(List<String> list) { public static String getDateString() {
if (list == null) {
return "";
}
String result = "";
for (int i = 0; i < list.size(); i++) {
result += list.get(i);
if (i < list.size() - 1) {
result += ", ";
}
}
return result;
}
public static String getStringArrayInString(String[] list) { GregorianCalendar now = new GregorianCalendar();
if (list == null) { String date = "";
return ""; date += now.get(Calendar.DAY_OF_MONTH);
} date += "-";
String result = ""; date += now.get(Calendar.HOUR);
for (int i = 0; i < list.length; i++) { date += "-";
result += list[i]; date += now.get(Calendar.MINUTE);
if (i < ((list.length) - 1)) { return date;
result += ", "; }
}
}
return result;
}
public static String getGroupListInString(List<Group> list) { public static String getStringListInString(List<String> list) {
if (list == null) {
return "";
}
String result = "";
for (int i = 0; i < list.size(); i++) {
result += list.get(i).getName();
if (i < list.size() - 1) {
result += ", ";
}
}
return result;
}
public static String join(String[] arr, String separator) { if (list == null) {
if (arr.length == 0) return "";
return ""; }
String out = arr[0].toString(); String result = "";
for (int i = 1; i < arr.length; i++) for (int i = 0; i < list.size(); i++) {
out += separator + arr[i]; result += list.get(i);
return out; if (i < list.size() - 1) {
} result += ", ";
}
}
return result;
}
public static String getStringArrayInString(String[] list) {
if (list == null) {
return "";
}
String result = "";
for (int i = 0; i < list.length; i++) {
result += list[i];
if (i < ((list.length) - 1)) {
result += ", ";
}
}
return result;
}
public static String getGroupListInString(List<Group> list) {
if (list == null) {
return "";
}
String result = "";
for (int i = 0; i < list.size(); i++) {
result += list.get(i).getName();
if (i < list.size() - 1) {
result += ", ";
}
}
return result;
}
public static String join(String[] arr, String separator) {
if (arr.length == 0)
return "";
String out = arr[0].toString();
for (int i = 1; i < arr.length; i++)
out += separator + arr[i];
return out;
}
} }