View Javadoc
1   package org.apache.fulcrum.security.torque.turbine;
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.Role;
25  import org.apache.fulcrum.security.model.turbine.entity.TurbinePermission;
26  import org.apache.fulcrum.security.torque.om.TorqueTurbinePermissionPeer;
27  import org.apache.fulcrum.security.torque.om.TorqueTurbineRolePermission;
28  import org.apache.fulcrum.security.torque.om.TorqueTurbineRolePermissionPeer;
29  import org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity;
30  import org.apache.fulcrum.security.util.DataBackendException;
31  import org.apache.fulcrum.security.util.RoleSet;
32  import org.apache.torque.TorqueException;
33  import org.apache.torque.criteria.Criteria;
34  import org.apache.torque.om.SimpleKey;
35  /**
36   * This abstract class provides the SecurityInterface to the managers.
37   *
38   * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
39   * @version $Id:$
40   */
41  public abstract class FulcrumAbstractTurbinePermission extends TorqueAbstractSecurityEntity
42      implements TurbinePermission
43  {
44      /** Serial version */
45  	private static final long serialVersionUID = -5313324873688923207L;
46  
47  	/** a cache of role objects */
48      private Set<Role> roleSet = null;
49  
50      /**
51       * Forward reference to generated code
52       *
53       * Get a list of association objects, pre-populated with their TorqueTurbineRole
54       * objects.
55       *
56       * @param criteria Criteria to define the selection of records
57       * @param con a database connection
58       * @throws TorqueException  if any database error occurs
59       *
60       * @return a list of Role/Permission relations
61       */
62      protected List<TorqueTurbineRolePermission> getTorqueTurbineRolePermissionsJoinTorqueTurbineRole(Criteria criteria, Connection con)
63          throws TorqueException
64      {
65          criteria.and(TorqueTurbineRolePermissionPeer.PERMISSION_ID, getEntityId() );
66          return TorqueTurbineRolePermissionPeer.doSelectJoinTorqueTurbineRole(criteria, con);
67      }
68  
69      /**
70       * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#addRole(org.apache.fulcrum.security.entity.Role)
71       */
72      public void addRole(Role role)
73      {
74          getRoles().add(role);
75      }
76  
77      /**
78       * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#getRoles()
79       */
80      public RoleSet getRoles()
81      {
82          if (roleSet == null)
83          {
84              roleSet = new RoleSet();
85          }
86          else if(!(roleSet instanceof RoleSet))
87          {
88              roleSet = new RoleSet(roleSet);
89          }
90  
91          return (RoleSet)roleSet;
92      }
93  
94      /**
95       * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#getRolesAsSet()
96       */
97      @SuppressWarnings("unchecked")
98  	public <T extends Role> Set<T> getRolesAsSet()
99      {
100         return (Set<T>)roleSet;
101     }
102 
103     /**
104      * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#removeRole(org.apache.fulcrum.security.entity.Role)
105      */
106     public void removeRole(Role role)
107     {
108         getRoles().remove(role);
109     }
110 
111     /**
112      * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#setRoles(org.apache.fulcrum.security.util.RoleSet)
113      */
114     public void setRoles(RoleSet roleSet)
115     {
116         if (roleSet != null)
117         {
118             this.roleSet = roleSet;
119         }
120         else
121         {
122             this.roleSet = new RoleSet();
123         }
124     }
125 
126     /**
127      * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#setRolesAsSet(java.util.Set)
128      */
129     public <T extends Role> void setRolesAsSet(Set<T> roles)
130     {
131         setRoles(new RoleSet(roles));
132     }
133 
134     /**
135      * @return the database name
136      */
137     public String getDatabaseName()
138     {
139         return TorqueTurbinePermissionPeer.DATABASE_NAME;
140     }
141     
142     /* (non-Javadoc)
143      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection)
144      */
145     @Override
146     public void retrieveAttachedObjects( Connection con )
147         throws DataBackendException
148     {
149         retrieveAttachedObjects( con, false );
150     }
151 
152     /* (non-Javadoc)
153      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection, java.lang.Boolean)
154      */
155     @Override
156     public void retrieveAttachedObjects( Connection con, Boolean lazy )
157         throws DataBackendException
158     {
159         this.roleSet = new RoleSet();
160 
161         try {
162             List<TorqueTurbineRolePermission> rolepermissions = getTorqueTurbineRolePermissionsJoinTorqueTurbineRole(new Criteria(), con);
163     
164             for (TorqueTurbineRolePermission ttrp : rolepermissions)
165             {
166                 roleSet.add(ttrp.getTorqueTurbineRole());
167             }
168         } catch (TorqueException e ) {
169             throw new DataBackendException( e.getMessage(),e );
170         }
171     }
172 
173     /* (non-Javadoc)
174      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#update(java.sql.Connection)
175      */
176     public void update(Connection con) throws TorqueException
177     {
178         if (roleSet != null)
179         {
180             Criteria criteria = new Criteria();
181 
182             /* remove old entries */
183             criteria.where(TorqueTurbineRolePermissionPeer.PERMISSION_ID, getEntityId());
184             TorqueTurbineRolePermissionPeer.doDelete(criteria, con);
185 
186             for (Role r : roleSet)
187             {
188                 TorqueTurbineRolePermissionorqueTurbineRolePermission.html#TorqueTurbineRolePermission">TorqueTurbineRolePermission rp = new TorqueTurbineRolePermission();
189                 rp.setRoleId((Integer)r.getId());
190                 rp.setPermissionId(getEntityId());
191                 rp.save(con);
192             }
193         }
194 
195         try
196         {
197             save(con);
198         }
199         catch (Exception e)
200         {
201             throw new TorqueException(e);
202         }
203     }
204 
205     /* (non-Javadoc)
206      * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#delete()
207      */
208     public void delete() throws TorqueException
209     {
210         TorqueTurbinePermissionPeer.doDelete(SimpleKey.keyFor(getEntityId()));
211     }
212 }