View Javadoc
1   package org.apache.fulcrum.security.torque.dynamic;
2   /*
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   */
20  import java.sql.Connection;
21  import java.util.List;
22  import java.util.Set;
23  
24  import org.apache.fulcrum.security.entity.Group;
25  import org.apache.fulcrum.security.entity.Permission;
26  import org.apache.fulcrum.security.model.dynamic.entity.DynamicRole;
27  import org.apache.fulcrum.security.torque.om.TorqueDynamicGroupRole;
28  import org.apache.fulcrum.security.torque.om.TorqueDynamicGroupRolePeer;
29  import org.apache.fulcrum.security.torque.om.TorqueDynamicPermissionPeer;
30  import org.apache.fulcrum.security.torque.om.TorqueDynamicRolePeer;
31  import org.apache.fulcrum.security.torque.om.TorqueDynamicRolePermission;
32  import org.apache.fulcrum.security.torque.om.TorqueDynamicRolePermissionPeer;
33  import org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity;
34  import org.apache.fulcrum.security.util.DataBackendException;
35  import org.apache.fulcrum.security.util.GroupSet;
36  import org.apache.fulcrum.security.util.PermissionSet;
37  import org.apache.torque.TorqueException;
38  import org.apache.torque.criteria.Criteria;
39  import org.apache.torque.om.SimpleKey;
40  /**
41   * This abstract class provides the SecurityInterface to the managers.
42   *
43   * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
44   * @version $Id:$
45   */
46  public abstract class TorqueAbstractDynamicRole extends TorqueAbstractSecurityEntity
47      implements DynamicRole
48  {
49      /** Serial version */
50  	private static final long serialVersionUID = 2163956770966574224L;
51  
52  	/** a cache of group objects */
53      private Set<Group> groupSet = null;
54  
55      /** a cache of permission objects */
56      private Set<Permission> permissionSet = null;
57  
58      /**
59       * Forward reference to generated code
60       *
61       * Get a list of association objects, pre-populated with their TorqueDynamicPermission
62       * objects.
63       *
64       * @param criteria Criteria to define the selection of records
65       * @param con a database connection
66       * @throws TorqueException  if any database error occurs
67       *
68       * @return a list of Role/Permission relations
69       */
70      protected List<TorqueDynamicRolePermission> getTorqueDynamicRolePermissionsJoinTorqueDynamicPermission(Criteria criteria, Connection con)
71          throws TorqueException
72      {
73          criteria.and(TorqueDynamicRolePermissionPeer.ROLE_ID, getEntityId() );
74          return TorqueDynamicRolePermissionPeer.doSelectJoinTorqueDynamicPermission(criteria, con);
75      }
76  
77      /**
78       * Forward reference to generated code
79       *
80       * Get a list of association objects, pre-populated with their TorqueDynamicGroup
81       * objects.
82       *
83       * @param criteria Criteria to define the selection of records
84       * @param con a database connection
85       * @throws TorqueException  if any database error occurs
86       *
87       * @return a list of Group/Role relations
88       */
89      protected List<TorqueDynamicGroupRole> getTorqueDynamicGroupRolesJoinTorqueDynamicGroup(Criteria criteria, Connection con)
90          throws TorqueException
91      {
92          criteria.and(TorqueDynamicGroupRolePeer.ROLE_ID, getEntityId() );
93          return TorqueDynamicGroupRolePeer.doSelectJoinTorqueDynamicGroup(criteria, con);
94      }
95  
96      /**
97       * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#addGroup(org.apache.fulcrum.security.entity.Group)
98       */
99      public void addGroup(Group group)
100     {
101         getGroups().add(group);
102     }
103 
104     /**
105      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#addPermission(org.apache.fulcrum.security.entity.Permission)
106      */
107     public void addPermission(Permission permission)
108     {
109         getPermissions().add(permission);
110     }
111 
112     /**
113      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#getGroups()
114      */
115     public GroupSet getGroups()
116     {
117         if (groupSet == null)
118         {
119             groupSet = new GroupSet();
120         }
121         else if(!(groupSet instanceof GroupSet))
122         {
123             groupSet = new GroupSet(groupSet);
124         }
125 
126         return (GroupSet)groupSet;
127     }
128 
129     /**
130      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#getGroupsAsSet()
131      */
132     @SuppressWarnings("unchecked")
133 	public <T extends Group> Set<T> getGroupsAsSet()
134     {
135         return (Set<T>)groupSet;
136     }
137 
138     /**
139      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#getPermissions()
140      */
141     public PermissionSet getPermissions()
142     {
143         if (permissionSet == null)
144         {
145             permissionSet = new PermissionSet();
146         }
147         else if(!(permissionSet instanceof PermissionSet))
148         {
149             permissionSet = new PermissionSet(permissionSet);
150         }
151 
152         return (PermissionSet)permissionSet;
153     }
154 
155     /**
156      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#getPermissionsAsSet()
157      */
158     @SuppressWarnings("unchecked")
159 	public <T extends Permission> Set<T> getPermissionsAsSet()
160     {
161         return (Set<T>)permissionSet;
162     }
163 
164     /**
165      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#removeGroup(org.apache.fulcrum.security.entity.Group)
166      */
167     public void removeGroup(Group group)
168     {
169         getGroups().remove(group);
170     }
171 
172     /**
173      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#removePermission(org.apache.fulcrum.security.entity.Permission)
174      */
175     public void removePermission(Permission permission)
176     {
177         getPermissions().remove(permission);
178     }
179 
180     /**
181      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#setGroups(org.apache.fulcrum.security.util.GroupSet)
182      */
183     public void setGroups(GroupSet groups)
184     {
185         if (groups != null)
186         {
187             this.groupSet = groups;
188         }
189         else
190         {
191             this.groupSet = new GroupSet();
192         }
193     }
194 
195     /**
196      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#setGroupsAsSet(java.util.Set)
197      */
198     public <T extends Group> void setGroupsAsSet(Set<T> groups)
199     {
200         setGroups(new GroupSet(groups));
201     }
202 
203     /**
204      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#setPermissions(org.apache.fulcrum.security.util.PermissionSet)
205      */
206     public void setPermissions(PermissionSet permissionSet)
207     {
208         if (permissionSet != null)
209         {
210             this.permissionSet = permissionSet;
211         }
212         else
213         {
214             this.permissionSet = new PermissionSet();
215         }
216     }
217 
218     /**
219      * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#setPermissionsAsSet(java.util.Set)
220      */
221     public <T extends Permission> void setPermissionsAsSet(Set<T> permissions)
222     {
223         setPermissions(new PermissionSet(permissions));
224     }
225 
226     /**
227      * @return the database name
228      */
229     public String getDatabaseName()
230     {
231         return TorqueDynamicPermissionPeer.DATABASE_NAME;
232     }
233     
234     @Override
235     public void retrieveAttachedObjects( Connection con )
236         throws DataBackendException
237     {
238         retrieveAttachedObjects( con, false );
239     }
240 
241     /**
242      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#retrieveAttachedObjects(Connection, Boolean)
243      */
244     @Override
245     public void retrieveAttachedObjects( Connection con, Boolean lazy )
246         throws DataBackendException
247     {
248         this.permissionSet = new PermissionSet();
249         
250         try {
251             List<TorqueDynamicRolePermission> rolepermissions = getTorqueDynamicRolePermissionsJoinTorqueDynamicPermission(new Criteria(), con);
252     
253             for (TorqueDynamicRolePermission tdrp : rolepermissions)
254             {
255                 permissionSet.add(tdrp.getTorqueDynamicPermission());
256             }
257     
258             this.groupSet = new GroupSet();
259     
260             List<TorqueDynamicGroupRole> grouproles = getTorqueDynamicGroupRolesJoinTorqueDynamicGroup(new Criteria(), con);
261     
262             for (TorqueDynamicGroupRole tdgr : grouproles)
263             {
264                 groupSet.add(tdgr.getTorqueDynamicGroup());
265             }
266         } catch (TorqueException e ) {
267             throw new DataBackendException( e.getMessage(),e );
268         }
269     }
270 
271     /**
272      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#update(java.sql.Connection)
273      */
274     public void update(Connection con) throws TorqueException
275     {
276         if (permissionSet != null)
277         {
278             Criteria criteria = new Criteria();
279 
280             /* remove old entries */
281             criteria.where(TorqueDynamicRolePermissionPeer.ROLE_ID, getEntityId());
282             TorqueDynamicRolePermissionPeer.doDelete(criteria, con);
283 
284             for (Permission p : permissionSet)
285             {
286                 TorqueDynamicRolePermissionorqueDynamicRolePermission.html#TorqueDynamicRolePermission">TorqueDynamicRolePermission rp = new TorqueDynamicRolePermission();
287                 rp.setPermissionId((Integer)p.getId());
288                 rp.setRoleId(getEntityId());
289                 rp.save(con);
290             }
291         }
292 
293         if (groupSet != null)
294         {
295             Criteria criteria = new Criteria();
296 
297             /* remove old entries */
298             criteria.where(TorqueDynamicGroupRolePeer.ROLE_ID, getEntityId());
299             TorqueDynamicGroupRolePeer.doDelete(criteria, con);
300 
301             for (Group g : groupSet)
302             {
303                 TorqueDynamicGroupRole/om/TorqueDynamicGroupRole.html#TorqueDynamicGroupRole">TorqueDynamicGroupRole gr = new TorqueDynamicGroupRole();
304                 gr.setGroupId((Integer)g.getId());
305                 gr.setRoleId(getEntityId());
306                 gr.save(con);
307             }
308         }
309 
310         try
311         {
312             save(con);
313         }
314         catch (Exception e)
315         {
316             throw new TorqueException(e);
317         }
318     }
319 
320     /**
321      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#delete()
322      */
323     public void delete() throws TorqueException
324     {
325         TorqueDynamicRolePeer.doDelete(SimpleKey.keyFor(getEntityId()));
326     }
327 }