KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > config > UserConfigSetup


1 /*
2  * Created on Apr 20, 2005
3  * by alex
4  *
5  */

6 package com.nightlabs.ipanema.config;
7
8 import java.io.Serializable JavaDoc;
9 import java.util.ArrayList JavaDoc;
10 import java.util.Collection JavaDoc;
11 import java.util.HashMap JavaDoc;
12 import java.util.Iterator JavaDoc;
13 import java.util.List JavaDoc;
14 import java.util.Map JavaDoc;
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 /**
23  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
24  *
25  */

26 public class UserConfigSetup implements Serializable JavaDoc {
27
28     public static final String JavaDoc UNASSIGNED_GROUP_ID = "__NOT_ASSIGNED_TO_CONFIG_GROUP__";
29     
30     public UserConfigSetup(String JavaDoc organisationID) {
31         super();
32         this.organisationID = organisationID;
33     }
34     
35     private String JavaDoc organisationID;
36     
37     /**
38      * key: String userConfigID of userGroup
39      * value: List userConfigs
40      * value: UserConfig
41      */

42     private Map JavaDoc configsByGroup = new HashMap JavaDoc();
43     
44     private List JavaDoc configGroups = new ArrayList JavaDoc();
45
46     public List JavaDoc getConfigGroups() {
47         return configGroups;
48     }
49     
50     public void moveConfigToGroup(UserConfig config, String JavaDoc groupUserConfigID) {
51         // find and remove it in the map
52
for (Iterator JavaDoc iter = configsByGroup.entrySet().iterator(); iter.hasNext();) {
53             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) iter.next();
54             boolean breakGlobal = false;
55             List JavaDoc configList = (List JavaDoc)entry.getValue();
56             for (Iterator JavaDoc 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         // add to the right place
68
List JavaDoc configList = (List JavaDoc)configsByGroup.get(groupUserConfigID);
69         if (configList == null) {
70             configList = new ArrayList JavaDoc();
71             configsByGroup.put(groupUserConfigID, configList);
72         }
73         configList.add(config);
74     }
75     
76     public List JavaDoc getConfigsForGroup(String JavaDoc groupUserConfigID) {
77         List JavaDoc configList = (List JavaDoc)configsByGroup.get(groupUserConfigID);
78         if (configList == null) {
79             configList = new ArrayList JavaDoc();
80             configsByGroup.put(groupUserConfigID, configList);
81         }
82         return configList;
83     }
84     
85     public UserConfigGroup getGroupForConfig(UserConfig userConfig) {
86         for (Iterator JavaDoc iter = configsByGroup.entrySet().iterator(); iter.hasNext();) {
87             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) iter.next();
88             String JavaDoc groupUserConfigID = (String JavaDoc)entry.getKey();
89             List JavaDoc configList = (List JavaDoc)entry.getValue();
90             for (Iterator JavaDoc 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                         // find the group
95
for (Iterator JavaDoc 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 JavaDoc organisationID, String JavaDoc[] groupsFetchGropus, String JavaDoc[] configsFetchGroups) {
111         UserConfigSetup result = new UserConfigSetup(organisationID);
112         Collection JavaDoc groups = (Collection JavaDoc)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 JavaDoc[] {FetchPlan.DEFAULT, FetchPlan.VALUES});
118         result.configGroups.addAll(pm.detachCopyAll(groups));
119         
120         Collection JavaDoc configs = ensureAllUsersHaveConfig(pm);
121         Map JavaDoc tmpMap = new HashMap JavaDoc();
122         
123         for (Iterator JavaDoc iter = configs.iterator(); iter.hasNext();) {
124             UserConfig config = (UserConfig) iter.next();
125             String JavaDoc groupKey = null;
126             if (config.getUserConfigGroup() != null)
127                 groupKey = config.getUserConfigGroup().getUserConfigID();
128             else
129                 groupKey = UNASSIGNED_GROUP_ID;
130             
131             List JavaDoc configList = (List JavaDoc)tmpMap.get(groupKey);
132             if (configList == null) {
133                 configList = new ArrayList JavaDoc();
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 JavaDoc[] {FetchPlan.DEFAULT, FetchPlan.VALUES});
144         
145         for (Iterator JavaDoc iter = tmpMap.entrySet().iterator(); iter.hasNext();) {
146             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) iter.next();
147             List JavaDoc detachedList = new ArrayList JavaDoc();
148             detachedList.addAll(pm.detachCopyAll((Collection JavaDoc)entry.getValue()));
149             result.configsByGroup.put(entry.getKey(), detachedList);
150         }
151         
152         return result;
153     }
154     
155     /**
156      * Ensures all users (userType = USERTYPE_USER) have a UserConfig assigned
157      * and returns all UserConfigs.
158      *
159      * @param pm
160      * @return
161      */

162     protected static Collection JavaDoc ensureAllUsersHaveConfig(PersistenceManager pm) {
163         Collection JavaDoc users = User.getUsersByType(pm, User.USERTYPE_USER, User.SYSTEM_USERID);
164         Collection JavaDoc configs = new ArrayList JavaDoc();
165         for (Iterator JavaDoc 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 JavaDoc iter = setup.configsByGroup.entrySet().iterator(); iter.hasNext();) {
174             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) iter.next();
175             String JavaDoc userConfigID = (String JavaDoc)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 JavaDoc configList = (List JavaDoc)entry.getValue();
182             for (Iterator JavaDoc 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