KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > security > RoleGroup


1 /* ************************************************************************** *
2  * Copyright (C) 2004 NightLabs GmbH, Marco Schulze *
3  * All rights reserved. *
4  * http://www.NightLabs.de *
5  * *
6  * This program and the accompanying materials are free software; you can re- *
7  * distribute it and/or modify it under the terms of the GNU General Public *
8  * License as published by the Free Software Foundation; either ver 2 of the *
9  * License, or any later version. *
10  * *
11  * This module is distributed in the hope that it will be useful, but WITHOUT *
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FIT- *
13  * NESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more *
14  * details. *
15  * *
16  * You should have received a copy of the GNU General Public License along *
17  * with this module; if not, write to the Free Software Foundation, Inc.: *
18  * 59 Temple Place, Suite 330 *
19  * Boston MA 02111-1307 *
20  * USA *
21  * *
22  * Or get it online: *
23  * http://www.opensource.org/licenses/gpl-license.php *
24  * *
25  * In case, you want to use this module or parts of it in a proprietary pro- *
26  * ject, you can purchase it under the NightLabs Commercial License. Please *
27  * contact NightLabs GmbH under info AT nightlabs DOT com for more infos or *
28  * visit http://www.NightLabs.com *
29  * ************************************************************************** */

30
31 /*
32  * Created on 16.06.2004
33  */

34 package com.nightlabs.ipanema.security;
35
36 import java.io.Serializable JavaDoc;
37 import java.util.ArrayList JavaDoc;
38 import java.util.Collection JavaDoc;
39 import java.util.HashMap JavaDoc;
40 import java.util.Iterator JavaDoc;
41 import java.util.List JavaDoc;
42 import java.util.Map JavaDoc;
43
44 import javax.jdo.PersistenceManager;
45 import javax.jdo.Query;
46 import javax.jdo.spi.PersistenceCapable;
47
48 import org.apache.log4j.Logger;
49
50 import com.nightlabs.jdo.BaseObjectID;
51
52
53 /**
54  * @author marco
55  */

56
57 /**
58  * @jdo.persistence-capable
59  * identity-type = "application"
60  * objectid-class = "com.nightlabs.ipanema.security.id.RoleGroupID"
61  * detachable = "true"
62  *
63  * @jdo.inheritance strategy="new-table"
64  **/

65 public class RoleGroup implements Serializable JavaDoc
66 {
67     public static final Logger LOGGER = Logger.getLogger(RoleGroup.class);
68     
69     public static RoleGroupSearchResult searchRoleGroups (
70             PersistenceManager pm,
71             String JavaDoc searchStr, boolean exact, int itemsPerPage, int pageIndex)
72         throws SecurityException JavaDoc
73     {
74         if ("".equals(searchStr))
75             searchStr = null;
76         
77         if (itemsPerPage <= 0) {
78             itemsPerPage = Integer.MAX_VALUE;
79             pageIndex = 0;
80         }
81         
82         if (pageIndex < 0)
83             pageIndex = 0;
84         
85         Query query = pm.newQuery(pm.getExtent(RoleGroup.class, true));
86         query.declareImports("import java.lang.String");
87         query.declareParameters("String searchStr");
88         StringBuffer JavaDoc filter = new StringBuffer JavaDoc();
89         if (searchStr != null) {
90             searchStr = searchStr.toLowerCase();
91             if (exact)
92                 filter.append("this.roleGroupID.toLowerCase() == searchStr");
93             else
94                 filter.append("this.roleGroupID.toLowerCase().indexOf(searchStr) >= 0");
95         }
96         query.setFilter(filter.toString());
97         query.setOrdering("this.roleGroupID ascending");
98         Collection JavaDoc c = (Collection JavaDoc)query.execute(searchStr);
99         int itemsFound = c.size();
100         Iterator JavaDoc it = c.iterator();
101         List JavaDoc items = new ArrayList JavaDoc();
102         int idx = 0;
103         int firstIdx = 0; int lastIdx = Integer.MAX_VALUE;
104         if (pageIndex >= 0)
105             firstIdx = itemsPerPage * pageIndex;
106         lastIdx = firstIdx + itemsPerPage - 1;
107
108         while (it.hasNext()) {
109             RoleGroup roleGroup = (RoleGroup)it.next();
110             if (idx >= firstIdx)
111                 items.add(roleGroup);
112
113             ++idx;
114             if (idx > lastIdx)
115                 break;
116         } // while (it.hasNext()) {
117
return new RoleGroupSearchResult(itemsFound, itemsPerPage, pageIndex, items);
118     }
119     
120     /**
121      * @jdo.field persistence-modifier="persistent" primary-key="true"
122      * @jdo.column length="100"
123      */

124     private String JavaDoc roleGroupID;
125
126     /**
127      * key: String languageID<br/>
128      * value: String roleGroupName
129      *
130      * @jdo.field
131      * persistence-modifier="persistent"
132      * collection-type="map"
133      * key-type="java.lang.String"
134      * value-type="java.lang.String"
135      * default-fetch-group="true"
136      *
137      * @jdo.join
138      *
139      * @jdo.map-vendor-extension vendor-name="jpox" key="clear-on-delete" value="true"
140      * @jdo.map-vendor-extension vendor-name="jpox" key="key-length" value="max 100"
141      * @jdo.map-vendor-extension vendor-name="jpox" key="value-length" value="max 255"
142      */

143     private Map JavaDoc names = new HashMap JavaDoc();
144
145     /**
146      * key: String languageID<br/>
147      * value: String description
148      *
149      * @jdo.field
150      * persistence-modifier="persistent"
151      * collection-type="map"
152      * key-type="java.lang.String"
153      * value-type="java.lang.String"
154      * default-fetch-group="true"
155      *
156      * @jdo.join
157      *
158      * @jdo.map-vendor-extension vendor-name="jpox" key="clear-on-delete" value="true"
159      * @jdo.map-vendor-extension vendor-name="jpox" key="key-length" value="max 100"
160      * @jdo.map-vendor-extension vendor-name="jpox" key="value-length" value="max 255"
161      */

162     private Map JavaDoc descriptions = new HashMap JavaDoc();
163
164     /**
165      * key: String roleID<br/>
166      * value: Role role
167      * <br/><br/>
168      * RoleGroup (m) - (n) Role
169      *
170      * @jdo.field
171      * persistence-modifier="persistent"
172      * collection-type="map"
173      * key-type="java.lang.String"
174      * value-type="Role"
175      *
176      * @jdo.join
177      *
178      * @jdo.map-vendor-extension vendor-name="jpox" key="key-field" value="roleID"
179      */

180     private Map JavaDoc roles = new HashMap JavaDoc();
181
182     /**
183      * key: String authorityID<br/>
184      * value: RoleGroupRef roleGroupRef
185      * <br/><br/>
186      * RoleGroup (1) - (n) RoleGroupRef
187      *
188      * @jdo.field
189      * persistence-modifier="persistent"
190      * collection-type="map"
191      * key-type="java.lang.String"
192      * value-type="RoleGroupRef"
193      * mapped-by="roleGroup"
194      *
195      * @jdo.map-vendor-extension vendor-name="jpox" key="key-field" value="authorityID"
196      * @!jdo.map-vendor-extension vendor-name="jpox" key="owner-field" value="roleGroup"
197      */

198     private Map JavaDoc roleGroupRefs = new HashMap JavaDoc();
199
200     public RoleGroup() { }
201     
202     public RoleGroup(String JavaDoc _roleGroupID)
203     {
204         if (!BaseObjectID.isValidIDString(_roleGroupID))
205             throw new IllegalArgumentException JavaDoc("roleID \""+_roleGroupID+"\" is not a valid id!");
206         this.roleGroupID = _roleGroupID;
207     }
208
209     /**
210      * @return Returns the roleGroupID.
211      */

212     public String JavaDoc getRoleGroupID() {
213         return roleGroupID;
214     }
215     
216     /**
217      * @return Returns the name.
218      */

219     public String JavaDoc getName() {
220         return (String JavaDoc)names.get(EMPTYSTRING);
221     }
222     
223     protected static String JavaDoc EMPTYSTRING = "";
224     
225     /**
226      * @return Returns the name.
227      */

228     public String JavaDoc getName(String JavaDoc languageID) {
229         if (languageID == null)
230             languageID = EMPTYSTRING;
231         String JavaDoc res = (String JavaDoc)names.get(languageID);
232         if (res == null)
233             res = (String JavaDoc)names.get(EMPTYSTRING);
234         return res;
235     }
236     /**
237      * @param name The name to set.
238      */

239     public void setName(String JavaDoc languageID, String JavaDoc name) {
240         if (languageID == null)
241             languageID = EMPTYSTRING;
242         names.put(languageID, name);
243     }
244     
245     /**
246      * @return Returns the description.
247      */

248     public String JavaDoc getDescription() {
249         return (String JavaDoc)descriptions.get(EMPTYSTRING);
250     }
251     /**
252      * @return Returns the description.
253      */

254     public String JavaDoc getDescription(String JavaDoc languageID) {
255         if (languageID == null)
256             languageID = EMPTYSTRING;
257         String JavaDoc res = (String JavaDoc)descriptions.get(languageID);
258         if (res == null)
259             res = (String JavaDoc)descriptions.get(EMPTYSTRING);
260         return res;
261     }
262     /**
263      * @param description The description to set.
264      */

265     public void setDescription(String JavaDoc languageID, String JavaDoc description) {
266         if (languageID == null)
267             languageID = EMPTYSTRING;
268         descriptions.put(languageID, description);
269     }
270
271     /**
272      * @return Returns the roles.
273      */

274     public Collection JavaDoc getRoles() {
275         return roles.values();
276     }
277 // /**
278
// * @return Returns the users.
279
// */
280
// public Collection getUsers() {
281
// return users.values();
282
// }
283

284     /**
285      * @return Returns the roleGroupRefs.
286      */

287     public Collection JavaDoc getRoleGroupRefs() {
288         return roleGroupRefs.values();
289     }
290
291     /**
292      * This method will return <code>null</code>
293      * @param roleID
294      * @return
295      */

296     public Role getRole(String JavaDoc roleID)
297     {
298         return (Role)roles.get(roleID);
299     }
300
301 // public void addUser(User user)
302
// {
303
// user.addRoleGroup(this);
304
// }
305
//
306
// public void removeUser(User user)
307
// {
308
// user.removeRoleGroup(this);
309
// }
310

311 // /**
312
// * This method is called by the User if this roleGroup is added there. It
313
// * does not update the RoleRefs, because User.addRoleGroup(...) does that
314
// * already.
315
// *
316
// * @param user
317
// */
318
// protected void _addUser(User user)
319
// {
320
// String login = user.getLogin();
321
// if (users.containsKey(login)) {
322
// LOGGER.warn("_addUser("+user+"): user already exists in map!");
323
// return;
324
// }
325
// users.put(login, user);
326
// }
327

328 // /**
329
// * This method is called by the User if this roleGroup is removed there.
330
// * It does not update the RoleRefs, because User.removeRoleGroup(...) does
331
// * that already.
332
// *
333
// * @param user
334
// */
335
// protected void _removeUser(User user)
336
// {
337
// if (users.remove(user.getLogin()) == null)
338
// LOGGER.warn("_removeUser("+user+"): user did not exist in map!");
339
// }
340

341     public void addRole(Role role)
342     {
343         String JavaDoc roleID = role.getRoleID();
344         LOGGER.debug("addRole(...): before: if (roles.containsKey(roleID))");
345         if (roles.containsKey(roleID))
346             return;
347         LOGGER.debug("addRole(...): before: roles.put(roleID, role);");
348         roles.put(roleID, role);
349         LOGGER.debug("addRole(...): before: role._addRoleGroup(this);");
350         role._addRoleGroup(this);
351         
352         // Add this role to all userRefs of all roleGroupRefs
353
LOGGER.debug("addRole(...): before: for (Iterator it = getRoleGroupRefs().iterator(); it.hasNext(); ) {");
354         for (Iterator JavaDoc it = getRoleGroupRefs().iterator(); it.hasNext(); ) {
355             RoleGroupRef roleGroupRef = (RoleGroupRef)it.next();
356             roleGroupRef._addRole(role);
357         }
358
359 // // Add this role to all users of this roleGroup
360
// for (Iterator it = getUsers().iterator(); it.hasNext(); ) {
361
// User user = (User)it.next();
362
// user._addRole(role);
363
// } // for (Iterator it = users.iterator(); it.hasNext(); ) {
364
}
365
366     public void removeRole(Role role)
367     {
368         String JavaDoc roleID = role.getRoleID();
369         if (!roles.containsKey(roleID))
370             return;
371         role._removeRoleGroup(this);
372
373         // Remove this role from all userRefs of all roleGroupRefs
374
for (Iterator JavaDoc it = getRoleGroupRefs().iterator(); it.hasNext(); ) {
375             RoleGroupRef roleGroupRef = (RoleGroupRef)it.next();
376             roleGroupRef._removeRole(role);
377         }
378 // // Remove this role from all users of this roleGroup
379
// for (Iterator it = getUsers().iterator(); it.hasNext(); ) {
380
// User user = (User)it.next();
381
// user._removeRole(role);
382
// } // for (Iterator it = users.iterator(); it.hasNext(); ) {
383
}
384
385     public boolean containsRole(Role role)
386     {
387         return roles.containsKey(role.getRoleID());
388     }
389
390     public boolean containsRole(String JavaDoc roleID)
391     {
392         return roles.containsKey(roleID);
393     }
394     
395     protected void _addRoleGroupRef(RoleGroupRef roleGroupRef)
396     {
397         if (roleGroupRef == null)
398             throw new NullPointerException JavaDoc("roleGroupRef must not be null!");
399
400         if (!this.roleGroupID.equals(roleGroupRef.getRoleGroupID()))
401             throw new IllegalArgumentException JavaDoc("roleGroupRef.roleGroupID invalid!");
402
403         roleGroupRefs.put(roleGroupRef.getAuthorityID(), roleGroupRef);
404     }
405     
406     protected void _removeRoleGroupRef(String JavaDoc authorityID)
407     {
408         roleGroupRefs.remove(authorityID);
409     }
410
411     public RoleGroupRef getRoleGroupRef(String JavaDoc authorityID)
412     {
413         return (RoleGroupRef)roleGroupRefs.get(authorityID);
414     }
415
416     public static final int INCLUDE_NONE = 0;
417 // public static final int INCLUDE_USERS = 0x1;
418
public static final int INCLUDE_ROLES = 0x2;
419
420     public void makeTransient(int includeMask)
421     {
422         PersistenceManager pm = ((PersistenceCapable)this).jdoGetPersistenceManager();
423         if (pm == null)
424             return;
425         
426         pm.retrieve(this);
427
428 // Map tmpUsers = new HashMap();
429
// if ((includeMask & INCLUDE_USERS) != 0) {
430
// int userIncludeMask = 0;
431
//
432
// for (Iterator it = getUsers().iterator(); it.hasNext(); ) {
433
// User user = (User)it.next();
434
// user.makeTransient(userIncludeMask);
435
// tmpUsers.put(user.getLogin(), user);
436
// }
437
// }
438

439         Map JavaDoc tmpRoles = new HashMap JavaDoc();
440         if ((includeMask & INCLUDE_ROLES) != 0) {
441             int roleIncludeMask = 0;
442             
443             for (Iterator JavaDoc it = getRoles().iterator(); it.hasNext(); ) {
444                 Role role = (Role)it.next();
445                 role.makeTransient(roleIncludeMask);
446                 tmpRoles.put(role.getRoleID(), role);
447             }
448         }
449
450         pm.makeTransient(this);
451
452 // users = tmpUsers;
453
roles = tmpRoles;
454     }
455
456 }
457
Popular Tags