1 package org.apache.fulcrum.security.torque.turbine;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import java.sql.Connection;
21 import java.util.HashSet;
22 import java.util.List;
23 import java.util.Set;
24
25 import org.apache.fulcrum.security.entity.Permission;
26 import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
27 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
28 import org.apache.fulcrum.security.torque.om.TurbineRolePeer;
29 import org.apache.fulcrum.security.torque.om.TurbineRolePermission;
30 import org.apache.fulcrum.security.torque.om.TurbineRolePermissionPeer;
31 import org.apache.fulcrum.security.torque.om.TurbineUserGroupRolePeer;
32 import org.apache.fulcrum.security.torque.peer.TurbineRolePermissionPeerMapper;
33 import org.apache.fulcrum.security.torque.peer.TurbineUserGroupRoleModelPeerMapper;
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
44
45
46
47 public abstract class DefaultAbstractTurbineRole extends TorqueAbstractTurbineTurbineSecurityEntity
48 implements TurbineRole
49 {
50
51 private static final long serialVersionUID = -1782236723198646728L;
52
53
54 private Set<Permission> permissionSet = null;
55
56
57
58
59
60
61
62
63
64
65
66
67
68 protected <T extends TurbineRolePermissionPeerMapper> List<T> getTurbineRolePermissionsJoinTurbinePermission(Criteria criteria, Connection con)
69 throws TorqueException
70 {
71 criteria.and(TurbineRolePermissionPeer.ROLE_ID, getEntityId() );
72 return (List<T>) TurbineRolePermissionPeer.doSelectJoinTurbinePermission(criteria, con);
73 }
74
75
76
77
78
79
80
81
82
83
84
85
86
87 protected <T extends TurbineUserGroupRoleModelPeerMapper> List<T> getTurbineUserGroupRolesJoinTurbineGroup(Criteria criteria, Connection con)
88 throws TorqueException, DataBackendException
89 {
90 criteria.and(TurbineUserGroupRolePeer.ROLE_ID, getEntityId() );
91 return (List<T>) TurbineUserGroupRolePeer.doSelectJoinTurbineGroup(criteria, con);
92 }
93
94
95
96
97 @Override
98 public void addPermission(Permission permission)
99 {
100 getPermissions().add(permission);
101 }
102
103
104
105
106 @Override
107 public PermissionSet getPermissions()
108 {
109 if (permissionSet == null)
110 {
111 permissionSet = new PermissionSet();
112 }
113 else if(!(permissionSet instanceof PermissionSet))
114 {
115 permissionSet = new PermissionSet(permissionSet);
116 }
117
118 return (PermissionSet)permissionSet;
119 }
120
121
122
123
124 @Override
125 @SuppressWarnings("unchecked")
126 public <T extends Permission> Set<T> getPermissionsAsSet()
127 {
128 return (Set<T>)permissionSet;
129 }
130
131
132
133
134 @Override
135 public void removePermission(Permission permission)
136 {
137 getPermissions().remove(permission);
138 }
139
140
141
142
143 @Override
144 public void setPermissions(PermissionSet permissionSet)
145 {
146 if (permissionSet != null)
147 {
148 this.permissionSet = permissionSet;
149 }
150 else
151 {
152 this.permissionSet = new PermissionSet();
153 }
154 }
155
156
157
158
159 @Override
160 public <T extends Permission> void setPermissionsAsSet(Set<T> permissions)
161 {
162 setPermissions(new PermissionSet(permissions));
163 }
164
165 @Override
166 public void retrieveAttachedObjects( Connection con )
167 throws DataBackendException
168 {
169 retrieveAttachedObjects( con, false );
170 }
171
172
173
174
175
176 @Override
177 public void retrieveAttachedObjects( Connection con, Boolean lazy )
178 throws DataBackendException
179 {
180 this.permissionSet = new PermissionSet();
181
182 try {
183 List<TurbineRolePermissionPeerMapper> rolepermissions = getTurbineRolePermissionsJoinTurbinePermission(new Criteria(), con);
184
185 for (TurbineRolePermissionPeerMapper ttrp : rolepermissions)
186 {
187 permissionSet.add(ttrp.getTurbinePermission());
188 }
189
190 if (!lazy) {
191 Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
192
193 List<TurbineUserGroupRoleModelPeerMapper> ugrs = getTurbineUserGroupRolesJoinTurbineGroup(new Criteria(), con);
194
195 for (TurbineUserGroupRoleModelPeerMapper ttugr : ugrs)
196 {
197 TurbineUserGroupRolee/om/TurbineUserGroupRole.html#TurbineUserGroupRole">TurbineUserGroupRole ugr = new TurbineUserGroupRole();
198 ugr.setRole(this);
199 ugr.setGroup(ttugr.getTurbineGroup());
200 ugr.setUser(ttugr.getTurbineUser(con));
201 userGroupRoleSet.add(ugr);
202 }
203
204 setUserGroupRoleSet(userGroupRoleSet);
205
206 }
207 } catch (TorqueException e ) {
208 throw new DataBackendException( e.getMessage(),e );
209 }
210 }
211
212
213
214
215 @Override
216 public <T extends TurbineUserGroupRole> Set<T> getUserGroupRoleSet() throws DataBackendException
217 {
218 if (super.getUserGroupRoleSet() == null || super.getUserGroupRoleSet().isEmpty()) {
219 Connection con = null;
220 try
221 {
222 con = Transaction.begin();
223
224 retrieveAttachedObjects( con, false );
225
226 Transaction.commit(con);
227 con = null;
228 }
229 catch (TorqueException e)
230 {
231 throw new DataBackendException("Error retrieving group information", e);
232 }
233 finally
234 {
235 if (con != null)
236 {
237 Transaction.safeRollback(con);
238 }
239 }
240 }
241
242 return super.getUserGroupRoleSet();
243 }
244
245
246
247
248
249 @Override
250 public void update(Connection con) throws TorqueException
251 {
252 if (permissionSet != null && !permissionSet.isEmpty())
253 {
254 Criteria criteria = new Criteria();
255
256
257 criteria.where(TurbineRolePermissionPeer.ROLE_ID, getEntityId());
258 TurbineRolePermissionPeer.doDelete(criteria, con);
259
260 for (Permission p : permissionSet)
261 {
262 TurbineRolePermissione/om/TurbineRolePermission.html#TurbineRolePermission">TurbineRolePermission rp = new TurbineRolePermission();
263 rp.setPermissionId((Integer)p.getId());
264 rp.setRoleId(getEntityId());
265 rp.save(con);
266 }
267 }
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295 }
296
297
298
299
300 @Override
301 public void delete() throws TorqueException
302 {
303 TurbineRolePeer.doDelete(SimpleKey.keyFor(getEntityId()));
304 }
305 }