View Javadoc

1   /**
2    * 2008, Digitalis Informatica. All rights reserved. Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos
3    * num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999 http://www.digitalis.pt
4    */
5   
6   package pt.digitalis.dif.controller.security.managers.impl;
7   
8   import java.util.HashMap;
9   import java.util.HashSet;
10  import java.util.List;
11  import java.util.Map;
12  import java.util.Set;
13  
14  import pt.digitalis.dif.controller.security.managers.IIdentityManagerPrivate;
15  import pt.digitalis.dif.controller.security.objects.IDIFGroup;
16  import pt.digitalis.dif.exception.security.IdentityManagerException;
17  
18  /**
19   * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a><br/>
20   * @created 2008/10/01
21   */
22  abstract public class AbstractIdentityManager implements IIdentityManagerPrivate {
23  
24      /** The 'N/A' String literal. */
25      final static public String N_A = "N/A";
26  
27      /** The managed attributes */
28      private List<String> managedAttributes;
29  
30      /** User parameters. Will be used to store the users parameters */
31      private Map<String, Map<String, Object>> parameters = new HashMap<String, Map<String, Object>>();
32  
33      /**
34       * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#addManagedAttribute(java.lang.String)
35       */
36      public void addManagedAttribute(String attribute)
37      {
38          getManagedAttributes().add(attribute);
39      }
40  
41      /**
42       * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#addManagedAttributes(java.lang.String)
43       */
44      public void addManagedAttributes(String attributes)
45      {
46          String[] separatedAttributes = attributes.split(",\\s*");
47          for (String attribute: separatedAttributes)
48          {
49              this.addManagedAttribute(attribute);
50          }
51      }
52  
53      /**
54       * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#containsUserParameter(java.lang.String,
55       *      java.lang.String)
56       */
57      public boolean containsUserParameter(String userID, String parameterID)
58      {
59          return this.parameters.containsKey(userID) ? this.parameters.get(userID).containsKey(parameterID) : false;
60      }
61  
62      /**
63       * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#countAllGroupsOfUser(java.lang.String,
64       *      boolean)
65       */
66      public int countAllGroupsOfUser(String userId, boolean parseGroupHierarchy) throws IdentityManagerException
67      {
68          int result = 0;
69          if (parseGroupHierarchy)
70          {
71              Set<String> groups = new HashSet<String>();
72              for (IDIFGroup group: this.getUserGroups(userId).values())
73              {
74                  groups.add(group.getID());
75                  IDIFGroup parentGroup = group.getParentGroup();
76                  while (parentGroup != null)
77                  {
78                      groups.add(parentGroup.getID());
79                      parentGroup = parentGroup.getParentGroup();
80                  }
81              }
82              result = groups.size();
83          }
84          else
85          {
86              result = countAllGroupsOfUser(userId);
87          }
88          return result;
89      }
90  
91      /**
92       * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#gatherManagedAttributes()
93       */
94      abstract public List<String> gatherManagedAttributes();
95  
96      /**
97       * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#getManagedAttributes()
98       */
99      public List<String> getManagedAttributes()
100     {
101         if (managedAttributes == null)
102             managedAttributes = gatherManagedAttributes();
103 
104         return managedAttributes;
105     }
106 
107     /**
108      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#getUserGroups(java.lang.String, boolean)
109      */
110     public Map<String, IDIFGroup> getUserGroups(String userID, boolean parseGroupHierarchy)
111             throws IdentityManagerException
112     {
113         Map<String, IDIFGroup> result = this.getUserGroups(userID);
114         if (parseGroupHierarchy)
115         {
116             Map<String, IDIFGroup> newGroups = new HashMap<String, IDIFGroup>();
117             for (IDIFGroup group: result.values())
118             {
119                 IDIFGroup parentGroup = group.getParentGroup();
120                 while (parentGroup != null)
121                 {
122                     newGroups.put(parentGroup.getID(), parentGroup);
123                     parentGroup = parentGroup.getParentGroup();
124                 }
125             }
126             result.putAll(newGroups);
127         }
128 
129         return result;
130     }
131 
132     /**
133      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#getUserGroupsIDs(java.lang.String, boolean)
134      */
135     public Set<String> getUserGroupsIDs(String userID, boolean parseGroupHierarchy) throws IdentityManagerException
136     {
137 
138         Set<String> result = new HashSet<String>();
139 
140         if (parseGroupHierarchy)
141         {
142             result.addAll(getUserGroups(userID, parseGroupHierarchy).keySet());
143         }
144         else
145         {
146             result.addAll(this.getUserGroupsIDs(userID));
147         }
148 
149         return result;
150     }
151 
152     /**
153      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#getUserParameter(java.lang.String,
154      *      java.lang.String)
155      */
156     public Object getUserParameter(String userID, String parameterID)
157     {
158         // Check that user exists
159         if (this.parameters.containsKey(userID) && this.parameters.get(userID).containsKey(parameterID))
160         {
161             return this.parameters.get(userID).get(parameterID);
162         }
163         else
164             return null;
165     }
166 
167     /**
168      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#getUserParameters(java.lang.String)
169      */
170     public Map<String, Object> getUserParameters(String userID)
171     {
172         // Check that user exists
173         if (this.parameters.containsKey(userID))
174         {
175             return this.parameters.get(userID);
176         }
177         else
178             return null;
179     }
180 
181     /**
182      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#isUserInGroup(java.lang.String,
183      *      java.lang.String, boolean)
184      */
185     public boolean isUserInGroup(String userID, String groupID, boolean parseGroupHierarchy)
186             throws IdentityManagerException
187     {
188         boolean result;
189         if (parseGroupHierarchy)
190         {
191             result = getUserGroupsIDs(userID, true).contains(groupID);
192         }
193         else
194         {
195             result = isUserInGroup(userID, groupID);
196         }
197         return result;
198     }
199 
200     /**
201      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#removeUserParameter(java.lang.String,
202      *      java.lang.String)
203      */
204     public void removeUserParameter(String userID, String parameterID)
205     {
206         this.parameters.get(userID).remove(parameterID);
207     }
208 
209     /**
210      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#setUserParameter(java.lang.String,
211      *      java.lang.String, java.lang.Object)
212      */
213     public void setUserParameter(String userID, String parameterID, Object parameterValue)
214     {
215 
216         // Initialize object if needed
217         if (this.parameters.get(userID) == null)
218             this.parameters.put(userID, new HashMap<String, Object>());
219 
220         // Add parameter
221         this.parameters.get(userID).put(parameterID, parameterValue);
222     }
223 
224     /**
225      * @see pt.digitalis.dif.controller.security.managers.IIdentityManager#setUserParameters(java.lang.String,
226      *      java.util.Map)
227      */
228     public void setUserParameters(String userID, Map<String, Object> parametersMap)
229     {
230         // Add parameter map
231         this.parameters.put(userID, parametersMap);
232     }
233 
234 }