From 0185870205f745561d85efd7d1cfa82c8ac0f4a7 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Tue, 15 Jan 2013 16:08:43 +0100 Subject: [PATCH] Rename Perm --> PermUtil and improved permission management utilities. --- src/com/massivecraft/mcore5/Permission.java | 4 +- src/com/massivecraft/mcore5/cmd/MCommand.java | 4 +- .../mcore5/cmd/req/ReqHasPerm.java | 4 +- src/com/massivecraft/mcore5/util/Perm.java | 160 -------- .../massivecraft/mcore5/util/PermUtil.java | 377 ++++++++++++++++++ 5 files changed, 383 insertions(+), 166 deletions(-) delete mode 100644 src/com/massivecraft/mcore5/util/Perm.java create mode 100644 src/com/massivecraft/mcore5/util/PermUtil.java diff --git a/src/com/massivecraft/mcore5/Permission.java b/src/com/massivecraft/mcore5/Permission.java index 7d1d041f..e977d35d 100644 --- a/src/com/massivecraft/mcore5/Permission.java +++ b/src/com/massivecraft/mcore5/Permission.java @@ -2,7 +2,7 @@ package com.massivecraft.mcore5; import org.bukkit.command.CommandSender; -import com.massivecraft.mcore5.util.Perm; +import com.massivecraft.mcore5.util.PermUtil; public enum Permission { @@ -33,7 +33,7 @@ public enum Permission public boolean has(CommandSender sender, boolean informSenderIfNot) { - return Perm.has(sender, this.node, informSenderIfNot); + return PermUtil.has(sender, this.node, informSenderIfNot); } public boolean has(CommandSender sender) diff --git a/src/com/massivecraft/mcore5/cmd/MCommand.java b/src/com/massivecraft/mcore5/cmd/MCommand.java index 3e2ab8f1..b4c774fa 100644 --- a/src/com/massivecraft/mcore5/cmd/MCommand.java +++ b/src/com/massivecraft/mcore5/cmd/MCommand.java @@ -18,7 +18,7 @@ import com.massivecraft.mcore5.cmd.arg.ArgResult; import com.massivecraft.mcore5.cmd.req.IReq; import com.massivecraft.mcore5.cmd.req.ReqHasPerm; import com.massivecraft.mcore5.util.BukkitCommandUtil; -import com.massivecraft.mcore5.util.Perm; +import com.massivecraft.mcore5.util.PermUtil; import com.massivecraft.mcore5.util.Txt; public abstract class MCommand @@ -77,7 +77,7 @@ public abstract class MCommand String perm = this.getDescPermission(); if (perm != null) { - String pdesc = Perm.getPermissionDescription(this.getDescPermission()); + String pdesc = PermUtil.getPermissionDescription(this.getDescPermission()); if (pdesc != null) { return pdesc; diff --git a/src/com/massivecraft/mcore5/cmd/req/ReqHasPerm.java b/src/com/massivecraft/mcore5/cmd/req/ReqHasPerm.java index 8d3e5716..0da05d18 100644 --- a/src/com/massivecraft/mcore5/cmd/req/ReqHasPerm.java +++ b/src/com/massivecraft/mcore5/cmd/req/ReqHasPerm.java @@ -6,7 +6,7 @@ import lombok.Setter; import org.bukkit.command.CommandSender; import com.massivecraft.mcore5.cmd.MCommand; -import com.massivecraft.mcore5.util.Perm; +import com.massivecraft.mcore5.util.PermUtil; public class ReqHasPerm implements IReq { @@ -26,7 +26,7 @@ public class ReqHasPerm implements IReq @Override public String createErrorMessage(CommandSender sender, MCommand command) { - return Perm.getForbiddenMessage(this.perm); + return PermUtil.getForbiddenMessage(this.perm); } public static ReqHasPerm get(String perm) diff --git a/src/com/massivecraft/mcore5/util/Perm.java b/src/com/massivecraft/mcore5/util/Perm.java deleted file mode 100644 index 5c0de47e..00000000 --- a/src/com/massivecraft/mcore5/util/Perm.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.massivecraft.mcore5.util; - -import java.util.Map; -import java.util.Map.Entry; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -import com.massivecraft.mcore5.Lang; -import com.massivecraft.mcore5.MCore; - -public class Perm -{ - // -------------------------------------------- // - // HAS - // -------------------------------------------- // - - public static boolean has(CommandSender sender, Permission permission) - { - return has(sender, permission.getName()); - } - public static boolean has(CommandSender sender, String perm) - { - if (sender == null) return false; - return sender.hasPermission(perm); - } - - public static boolean has(CommandSender sender, Permission permission, boolean verbose) - { - return has(sender, permission.getName(), verbose); - } - public static boolean has(CommandSender sender, String perm, boolean verbose) - { - if (has(sender, perm)) - { - return true; - } - else if (verbose && sender != null) - { - sender.sendMessage(getForbiddenMessage(perm)); - } - return false; - } - - // -------------------------------------------- // - // DESCRIPTIONS AND MESSAGES - // -------------------------------------------- // - - public static String getPermissionDescription(String perm) - { - if (perm == null) return Lang.permDoThat; - Permission permission = Bukkit.getPluginManager().getPermission(perm); - return getPermissionDescription(permission); - } - - public static String getPermissionDescription(Permission perm) - { - if (perm == null) return Lang.permDoThat; - String desc = perm.getDescription(); - if (desc == null || desc.length() == 0) return Lang.permDoThat; - return desc; - } - - public static String getForbiddenMessage(String perm) - { - return Txt.parse(Lang.permForbidden, getPermissionDescription(perm)); - } - - // -------------------------------------------- // - // RANDOM UTILS - // -------------------------------------------- // - - public static T pickFirstVal(CommandSender me, Map perm2val) - { - if (perm2val == null) return null; - T ret = null; - - for ( Entry entry : perm2val.entrySet()) - { - ret = entry.getValue(); - if (has(me, entry.getKey())) break; - } - - return ret; - } - - // -------------------------------------------- // - // ENSURE HAS - // -------------------------------------------- // - - public static void ensureHas(Player player, String permissionName) - { - if (player.hasPermission(permissionName)) - { - return; - } - else - { - player.addAttachment(MCore.p, permissionName, true); - } - } - - public static void ensureHas(Player player, Permission permission) - { - ensureHas(player, permission.getName()); - } - - // -------------------------------------------- // - // GET CREATIVE - // -------------------------------------------- // - - public static Permission getCreative(String name) - { - return getCreative(name, null, null, null); - } - - public static Permission getCreative(String name, String description) - { - return getCreative(name, description, null, null); - } - - public static Permission getCreative(String name, PermissionDefault defaultValue) - { - return getCreative(name, null, defaultValue, null); - } - - public static Permission getCreative(String name, String description, PermissionDefault defaultValue) - { - return getCreative(name, description, defaultValue, null); - } - - public static Permission getCreative(String name, Map children) - { - return getCreative(name, null, null, children); - } - - public static Permission getCreative(String name, String description, Map children) - { - return getCreative(name, description, null, children); - } - - public static Permission getCreative(String name, PermissionDefault defaultValue, Map children) - { - return getCreative(name, null, defaultValue, children); - } - - public static Permission getCreative(String name, String description, PermissionDefault defaultValue, Map children) - { - Permission ret = Bukkit.getPluginManager().getPermission(name); - if (ret == null) - { - ret = new Permission(name, description, defaultValue, children); - Bukkit.getPluginManager().addPermission(ret); - } - return ret; - } -} diff --git a/src/com/massivecraft/mcore5/util/PermUtil.java b/src/com/massivecraft/mcore5/util/PermUtil.java new file mode 100644 index 00000000..3cb2cea6 --- /dev/null +++ b/src/com/massivecraft/mcore5/util/PermUtil.java @@ -0,0 +1,377 @@ +package com.massivecraft.mcore5.util; + +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; + +import com.massivecraft.mcore5.Lang; +import com.massivecraft.mcore5.MCore; + +public class PermUtil +{ + // -------------------------------------------- // + // HAS + // -------------------------------------------- // + + public static boolean has(CommandSender sender, Permission permission) + { + return has(sender, permission.getName()); + } + public static boolean has(CommandSender sender, String perm) + { + if (sender == null) return false; + return sender.hasPermission(perm); + } + + public static boolean has(CommandSender sender, Permission permission, boolean verbose) + { + return has(sender, permission.getName(), verbose); + } + public static boolean has(CommandSender sender, String perm, boolean verbose) + { + if (has(sender, perm)) + { + return true; + } + else if (verbose && sender != null) + { + sender.sendMessage(getForbiddenMessage(perm)); + } + return false; + } + + // -------------------------------------------- // + // DESCRIPTIONS AND MESSAGES + // -------------------------------------------- // + + public static String getPermissionDescription(String perm) + { + if (perm == null) return Lang.permDoThat; + Permission permission = Bukkit.getPluginManager().getPermission(perm); + return getPermissionDescription(permission); + } + + public static String getPermissionDescription(Permission perm) + { + if (perm == null) return Lang.permDoThat; + String desc = perm.getDescription(); + if (desc == null || desc.length() == 0) return Lang.permDoThat; + return desc; + } + + public static String getForbiddenMessage(String perm) + { + return Txt.parse(Lang.permForbidden, getPermissionDescription(perm)); + } + + // -------------------------------------------- // + // RANDOM UTILS + // -------------------------------------------- // + + public static T pickFirstVal(CommandSender me, Map perm2val) + { + if (perm2val == null) return null; + T ret = null; + + for ( Entry entry : perm2val.entrySet()) + { + ret = entry.getValue(); + if (has(me, entry.getKey())) break; + } + + return ret; + } + + // -------------------------------------------- // + // ENSURE HAS + // -------------------------------------------- // + + public static void ensureHas(Player player, String permissionName) + { + if (player.hasPermission(permissionName)) + { + return; + } + else + { + player.addAttachment(MCore.p, permissionName, true); + } + } + + public static void ensureHas(Player player, Permission permission) + { + ensureHas(player, permission.getName()); + } + + // -------------------------------------------- // + // EFFICIENT UPDATERS + // -------------------------------------------- // + // These setters offer bulk-ways of updating already created permissions. + // For the best performance you should enter all information into the Permission constructor when creating the Permission. + // At times you will however need to update permissions after they were created. + // In these cases the order and approach with witch you alter the fields matter a lot performance wise. + // These setter will ensure you get optimal performance. + + // ONE FIELD + + public static void set(Permission permission, String description) + { + // Recalculation need created: FALSE + // Recalculation auto-performed: FALSE + permission.setDescription(description); + } + + public static void set(Permission permission, PermissionDefault defaultValue) + { + if (defaultValue == null) return; + if (permission.getDefault() == defaultValue) return; + + // Recalculation need created: TRUE + // Recalculation auto-performed: TRUE + permission.setDefault(defaultValue); + } + + public static void set(Permission permission, Map children) + { + if (children == null) return; + if (permission.getChildren().equals(children)) return; + + // Recalculation need created: TRUE + // Recalculation auto-performed: FALSE + permission.getChildren().clear(); + permission.getChildren().putAll(children); + + // Manual Recalculation + permission.recalculatePermissibles(); + } + + // TWO FIELDS + + public static void set(Permission permission, String description, PermissionDefault defaultValue) + { + set(permission, defaultValue); + set(permission, description); + } + + public static void set(Permission permission, String description, Map children) + { + set(permission, children); + set(permission, description); + } + + public static void set(Permission permission, PermissionDefault defaultValue, Map children) + { + boolean childrenChanged = false; + boolean defaultChanged = false; + + if ( ! permission.getChildren().equals(children)) + { + // Recalculation need created: TRUE + // Recalculation auto-performed: FALSE + permission.getChildren().clear(); + permission.getChildren().putAll(children); + childrenChanged = true; + } + + if (permission.getDefault() != defaultValue) + { + // Recalculation need created: TRUE + // Recalculation auto-performed: TRUE + permission.setDefault(defaultValue); + defaultChanged = true; + } + + // Only recalculate if default wasn't changed since that would have caused a recalculation + if (childrenChanged && ! defaultChanged) + { + // Manual Recalculation + permission.recalculatePermissibles(); + } + } + + // THREE FIELDS + + public static void set(Permission permission, String description, PermissionDefault defaultValue, Map children) + { + set(permission, defaultValue, children); + set(permission, description); + } + + // -------------------------------------------- // + // GET PERMISSION + // -------------------------------------------- // + + // This is the original logic + // The other below are just copy pastes with argument permutation + public static Permission get(boolean create, boolean update, String name, String description, PermissionDefault defaultValue, Map children) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, description, defaultValue, children); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, description, defaultValue, children); + } + } + return ret; + } + + // ZERO FIELDS + + public static Permission get(boolean create, String name) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name); + Bukkit.getPluginManager().addPermission(ret); + } + } + return ret; + } + + // ONE FIELD + + public static Permission get(boolean create, boolean update, String name, String description) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, description); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, description); + } + } + return ret; + } + + public static Permission get(boolean create, boolean update, String name, PermissionDefault defaultValue) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, defaultValue); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, defaultValue); + } + } + return ret; + } + + public static Permission get(boolean create, boolean update, String name, Map children) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, children); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, children); + } + } + return ret; + } + + // TWO FIELDS + + public static Permission get(boolean create, boolean update, String name, String description, PermissionDefault defaultValue) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, description, defaultValue); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, description, defaultValue); + } + } + return ret; + } + + public static Permission get(boolean create, boolean update, String name, String description, Map children) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, description, children); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, description, children); + } + } + return ret; + } + + public static Permission get(boolean create, boolean update, String name, PermissionDefault defaultValue, Map children) + { + Permission ret = Bukkit.getPluginManager().getPermission(name); + if (ret == null) + { + if (create) + { + ret = new Permission(name, defaultValue, children); + Bukkit.getPluginManager().addPermission(ret); + } + } + else + { + if (update) + { + set(ret, defaultValue, children); + } + } + return ret; + } +}