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