1 6 package com.nightlabs.ipanema.config; 7 8 import java.io.Serializable ; 9 import java.util.ArrayList ; 10 import java.util.Collection ; 11 import java.util.HashMap ; 12 import java.util.Iterator ; 13 import java.util.List ; 14 import java.util.Map ; 15 16 import javax.jdo.FetchPlan; 17 import javax.jdo.PersistenceManager; 18 19 import com.nightlabs.ipanema.config.id.ConfigID; 20 import com.nightlabs.ipanema.security.User; 21 22 26 public class UserConfigSetup implements Serializable { 27 28 public static final String UNASSIGNED_GROUP_ID = "__NOT_ASSIGNED_TO_CONFIG_GROUP__"; 29 30 public UserConfigSetup(String organisationID) { 31 super(); 32 this.organisationID = organisationID; 33 } 34 35 private String organisationID; 36 37 42 private Map configsByGroup = new HashMap (); 43 44 private List configGroups = new ArrayList (); 45 46 public List getConfigGroups() { 47 return configGroups; 48 } 49 50 public void moveConfigToGroup(UserConfig config, String groupUserConfigID) { 51 for (Iterator iter = configsByGroup.entrySet().iterator(); iter.hasNext();) { 53 Map.Entry entry = (Map.Entry ) iter.next(); 54 boolean breakGlobal = false; 55 List configList = (List )entry.getValue(); 56 for (Iterator iterator = configList.iterator(); iterator.hasNext();) { 57 UserConfig _config = (UserConfig) iterator.next(); 58 if (_config.getUserConfigID().equals(config.getUserConfigID())) { 59 iterator.remove(); 60 breakGlobal = true; 61 break; 62 } 63 } 64 if (breakGlobal) 65 break; 66 } 67 List configList = (List )configsByGroup.get(groupUserConfigID); 69 if (configList == null) { 70 configList = new ArrayList (); 71 configsByGroup.put(groupUserConfigID, configList); 72 } 73 configList.add(config); 74 } 75 76 public List getConfigsForGroup(String groupUserConfigID) { 77 List configList = (List )configsByGroup.get(groupUserConfigID); 78 if (configList == null) { 79 configList = new ArrayList (); 80 configsByGroup.put(groupUserConfigID, configList); 81 } 82 return configList; 83 } 84 85 public UserConfigGroup getGroupForConfig(UserConfig userConfig) { 86 for (Iterator iter = configsByGroup.entrySet().iterator(); iter.hasNext();) { 87 Map.Entry entry = (Map.Entry ) iter.next(); 88 String groupUserConfigID = (String )entry.getKey(); 89 List configList = (List )entry.getValue(); 90 for (Iterator iterator = configList.iterator(); iterator.hasNext();) { 91 UserConfig _config = (UserConfig) iterator.next(); 92 if (_config.getUserConfigID().equals(userConfig.getUserConfigID())) { 93 if (!groupUserConfigID.equals(UNASSIGNED_GROUP_ID)) { 94 for (Iterator groupIterator = configGroups.iterator(); groupIterator.hasNext();) { 96 UserConfigGroup group = (UserConfigGroup) groupIterator.next(); 97 if (group.getUserConfigID().equals(groupUserConfigID)) 98 return group; 99 } 100 } 101 else 102 return null; 103 } 104 } 105 } 106 return null; 107 } 108 109 110 protected static UserConfigSetup getUserConfigSetup(PersistenceManager pm, String organisationID, String [] groupsFetchGropus, String [] configsFetchGroups) { 111 UserConfigSetup result = new UserConfigSetup(organisationID); 112 Collection groups = (Collection )pm.newQuery(UserConfigGroup.class).execute(); 113 pm.getFetchPlan().clearGroups(); 114 if (groupsFetchGropus != null) 115 pm.getFetchPlan().setGroups(groupsFetchGropus); 116 else 117 pm.getFetchPlan().setGroups(new String [] {FetchPlan.DEFAULT, FetchPlan.VALUES}); 118 result.configGroups.addAll(pm.detachCopyAll(groups)); 119 120 Collection configs = ensureAllUsersHaveConfig(pm); 121 Map tmpMap = new HashMap (); 122 123 for (Iterator iter = configs.iterator(); iter.hasNext();) { 124 UserConfig config = (UserConfig) iter.next(); 125 String groupKey = null; 126 if (config.getUserConfigGroup() != null) 127 groupKey = config.getUserConfigGroup().getUserConfigID(); 128 else 129 groupKey = UNASSIGNED_GROUP_ID; 130 131 List configList = (List )tmpMap.get(groupKey); 132 if (configList == null) { 133 configList = new ArrayList (); 134 tmpMap.put(groupKey, configList); 135 } 136 configList.add(config); 137 } 138 139 pm.getFetchPlan().clearGroups(); 140 if (groupsFetchGropus != null) 141 pm.getFetchPlan().setGroups(configsFetchGroups); 142 else 143 pm.getFetchPlan().setGroups(new String [] {FetchPlan.DEFAULT, FetchPlan.VALUES}); 144 145 for (Iterator iter = tmpMap.entrySet().iterator(); iter.hasNext();) { 146 Map.Entry entry = (Map.Entry ) iter.next(); 147 List detachedList = new ArrayList (); 148 detachedList.addAll(pm.detachCopyAll((Collection )entry.getValue())); 149 result.configsByGroup.put(entry.getKey(), detachedList); 150 } 151 152 return result; 153 } 154 155 162 protected static Collection ensureAllUsersHaveConfig(PersistenceManager pm) { 163 Collection users = User.getUsersByType(pm, User.USERTYPE_USER, User.SYSTEM_USERID); 164 Collection configs = new ArrayList (); 165 for (Iterator iter = users.iterator(); iter.hasNext();) { 166 User user = (User) iter.next(); 167 configs.add(UserConfig.getUserConfig(pm, user)); 168 } 169 return configs; 170 } 171 172 protected static void storeUserConfigSetup(PersistenceManager pm, UserConfigSetup setup) { 173 for (Iterator iter = setup.configsByGroup.entrySet().iterator(); iter.hasNext();) { 174 Map.Entry entry = (Map.Entry ) iter.next(); 175 String userConfigID = (String )entry.getKey(); 176 UserConfigGroup group = null; 177 if (!UNASSIGNED_GROUP_ID.equals(userConfigID)) { 178 ConfigID groupID = ConfigID.create(setup.organisationID, userConfigID, UserConfig.class.getName()); 179 group = (UserConfigGroup)pm.getObjectById(groupID); 180 } 181 List configList = (List )entry.getValue(); 182 for (Iterator iterator = configList.iterator(); iterator.hasNext();) { 183 UserConfig config = (UserConfig) iterator.next(); 184 ConfigID configID = ConfigID.create(config.getOrganisationID(), config.getUserConfigID(), UserConfig.class.getName()); 185 UserConfig persistentConfig = (UserConfig)pm.getObjectById(configID); 186 persistentConfig.setUserConfigGroup(group); 187 } 188 } 189 } 190 191 192 } 193 | Popular Tags |