1 package org.apache.fulcrum.security.torque.dynamic;
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.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
42
43
44
45
46 public abstract class TorqueAbstractDynamicRole extends TorqueAbstractSecurityEntity
47 implements DynamicRole
48 {
49
50 private static final long serialVersionUID = 2163956770966574224L;
51
52
53 private Set<Group> groupSet = null;
54
55
56 private Set<Permission> permissionSet = null;
57
58
59
60
61
62
63
64
65
66
67
68
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
79
80
81
82
83
84
85
86
87
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
98
99 public void addGroup(Group group)
100 {
101 getGroups().add(group);
102 }
103
104
105
106
107 public void addPermission(Permission permission)
108 {
109 getPermissions().add(permission);
110 }
111
112
113
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
131
132 @SuppressWarnings("unchecked")
133 public <T extends Group> Set<T> getGroupsAsSet()
134 {
135 return (Set<T>)groupSet;
136 }
137
138
139
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
157
158 @SuppressWarnings("unchecked")
159 public <T extends Permission> Set<T> getPermissionsAsSet()
160 {
161 return (Set<T>)permissionSet;
162 }
163
164
165
166
167 public void removeGroup(Group group)
168 {
169 getGroups().remove(group);
170 }
171
172
173
174
175 public void removePermission(Permission permission)
176 {
177 getPermissions().remove(permission);
178 }
179
180
181
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
197
198 public <T extends Group> void setGroupsAsSet(Set<T> groups)
199 {
200 setGroups(new GroupSet(groups));
201 }
202
203
204
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
220
221 public <T extends Permission> void setPermissionsAsSet(Set<T> permissions)
222 {
223 setPermissions(new PermissionSet(permissions));
224 }
225
226
227
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
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
273
274 public void update(Connection con) throws TorqueException
275 {
276 if (permissionSet != null)
277 {
278 Criteria criteria = new Criteria();
279
280
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
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
322
323 public void delete() throws TorqueException
324 {
325 TorqueDynamicRolePeer.doDelete(SimpleKey.keyFor(getEntityId()));
326 }
327 }