summaryrefslogtreecommitdiffstats
path: root/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java
diff options
context:
space:
mode:
authorZenexer <Zenexer@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-03-30 04:03:21 +0000
committerZenexer <Zenexer@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-03-30 04:03:21 +0000
commitcb21bc4d7a67f0974c2773fdd0f5376f177c068e (patch)
treef1584fe391f77c648a1d7d25385ef16229b756de /EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java
downloadEssentials-cb21bc4d7a67f0974c2773fdd0f5376f177c068e.tar
Essentials-cb21bc4d7a67f0974c2773fdd0f5376f177c068e.tar.gz
Essentials-cb21bc4d7a67f0974c2773fdd0f5376f177c068e.tar.lz
Essentials-cb21bc4d7a67f0974c2773fdd0f5376f177c068e.tar.xz
Essentials-cb21bc4d7a67f0974c2773fdd0f5376f177c068e.zip
2.1 prerelease, part 2 of 3
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk2.1@1015 e251c2fe-e539-e718-e476-b85c1f46cddb
Diffstat (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java')
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java204
1 files changed, 204 insertions, 0 deletions
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java
new file mode 100644
index 000000000..f735ff5e6
--- /dev/null
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/OverloadedWorldHolder.java
@@ -0,0 +1,204 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.anjocaido.groupmanager.dataholder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import org.anjocaido.groupmanager.data.User;
+
+/**
+ *
+ * @author gabrielcouto
+ */
+public class OverloadedWorldHolder extends WorldDataHolder {
+
+ /**
+ *
+ */
+ protected Map<String, User> overloadedUsers = new HashMap<String, User>();
+
+ /**
+ *
+ * @param ph
+ */
+ public OverloadedWorldHolder(WorldDataHolder ph) {
+ super(ph.getName());
+ this.f = ph.f;
+ this.groupsFile = ph.groupsFile;
+ this.usersFile = ph.usersFile;
+ this.defaultGroup = ph.defaultGroup;
+ this.groups = ph.groups;
+ this.users = ph.users;
+ }
+
+ /**
+ *
+ * @param userName
+ * @return
+ */
+ @Override
+ public User getUser(String userName) {
+ //OVERLOADED CODE
+ if (overloadedUsers.containsKey(userName.toLowerCase())) {
+ return overloadedUsers.get(userName.toLowerCase());
+ }
+ //END CODE
+ if (users.containsKey(userName.toLowerCase())) {
+ return users.get(userName.toLowerCase());
+ }
+ User newUser = createUser(userName);
+ haveUsersChanged = true;
+ return newUser;
+ }
+
+ /**
+ *
+ * @param theUser
+ */
+ @Override
+ public void addUser(User theUser) {
+ if (theUser.getDataSource() != this) {
+ theUser = theUser.clone(this);
+ }
+ if (theUser == null) {
+ return;
+ }
+ if ((theUser.getGroup() == null) || (!groups.containsKey(theUser.getGroupName().toLowerCase()))) {
+ theUser.setGroup(defaultGroup);
+ }
+ //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());
+ users.put(theUser.getName().toLowerCase(), theUser);
+ haveUsersChanged = true;
+ }
+
+ /**
+ *
+ * @param userName
+ * @return
+ */
+ @Override
+ public boolean removeUser(String userName) {
+ //OVERLOADED CODE
+ if (overloadedUsers.containsKey(userName.toLowerCase())) {
+ overloadedUsers.remove(userName.toLowerCase());
+ return true;
+ }
+ //END CODE
+ if (users.containsKey(userName.toLowerCase())) {
+ users.remove(userName.toLowerCase());
+ haveUsersChanged = true;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean removeGroup(String groupName) {
+ if (groupName.equals(defaultGroup)) {
+ return false;
+ }
+ for (String key : groups.keySet()) {
+ if (groupName.equalsIgnoreCase(key)) {
+ groups.remove(key);
+ for (String userKey : users.keySet()) {
+ User user = users.get(userKey);
+ if (user.getGroupName().equalsIgnoreCase(key)) {
+ user.setGroup(defaultGroup);
+ }
+
+ }
+ //OVERLOADED CODE
+ for (String userKey : overloadedUsers.keySet()) {
+ User user = overloadedUsers.get(userKey);
+ if (user.getGroupName().equalsIgnoreCase(key)) {
+ user.setGroup(defaultGroup);
+ }
+
+ }
+ //END OVERLOAD
+ haveGroupsChanged = true;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ *
+ * @return
+ */
+ @Override
+ public Collection<User> getUserList() {
+ Collection<User> overloadedList = new ArrayList<User>();
+ Collection<User> normalList = users.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
+ */
+ 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
+ */
+ public User surpassOverload(String userName) {
+ if (!isOverloaded(userName)) {
+ return getUser(userName);
+ }
+ if (users.containsKey(userName.toLowerCase())) {
+ return users.get(userName.toLowerCase());
+ }
+ User newUser = createUser(userName);
+ return newUser;
+ }
+}