001package org.apache.fulcrum.security.torque.dynamic; 002/* 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 */ 020import java.sql.Connection; 021import java.util.List; 022import java.util.Set; 023 024import org.apache.fulcrum.security.entity.Group; 025import org.apache.fulcrum.security.entity.Permission; 026import org.apache.fulcrum.security.model.dynamic.entity.DynamicRole; 027import org.apache.fulcrum.security.torque.om.TorqueDynamicGroupRole; 028import org.apache.fulcrum.security.torque.om.TorqueDynamicGroupRolePeer; 029import org.apache.fulcrum.security.torque.om.TorqueDynamicPermissionPeer; 030import org.apache.fulcrum.security.torque.om.TorqueDynamicRolePeer; 031import org.apache.fulcrum.security.torque.om.TorqueDynamicRolePermission; 032import org.apache.fulcrum.security.torque.om.TorqueDynamicRolePermissionPeer; 033import org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity; 034import org.apache.fulcrum.security.util.DataBackendException; 035import org.apache.fulcrum.security.util.GroupSet; 036import org.apache.fulcrum.security.util.PermissionSet; 037import org.apache.torque.TorqueException; 038import org.apache.torque.criteria.Criteria; 039import org.apache.torque.om.SimpleKey; 040/** 041 * This abstract class provides the SecurityInterface to the managers. 042 * 043 * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> 044 * @version $Id:$ 045 */ 046public abstract class TorqueAbstractDynamicRole extends TorqueAbstractSecurityEntity 047 implements DynamicRole 048{ 049 /** Serial version */ 050 private static final long serialVersionUID = 2163956770966574224L; 051 052 /** a cache of group objects */ 053 private Set<Group> groupSet = null; 054 055 /** a cache of permission objects */ 056 private Set<Permission> permissionSet = null; 057 058 /** 059 * Forward reference to generated code 060 * 061 * Get a list of association objects, pre-populated with their TorqueDynamicPermission 062 * objects. 063 * 064 * @param criteria Criteria to define the selection of records 065 * @param con a database connection 066 * @throws TorqueException if any database error occurs 067 * 068 * @return a list of Role/Permission relations 069 */ 070 protected List<TorqueDynamicRolePermission> getTorqueDynamicRolePermissionsJoinTorqueDynamicPermission(Criteria criteria, Connection con) 071 throws TorqueException 072 { 073 criteria.and(TorqueDynamicRolePermissionPeer.ROLE_ID, getEntityId() ); 074 return TorqueDynamicRolePermissionPeer.doSelectJoinTorqueDynamicPermission(criteria, con); 075 } 076 077 /** 078 * Forward reference to generated code 079 * 080 * Get a list of association objects, pre-populated with their TorqueDynamicGroup 081 * objects. 082 * 083 * @param criteria Criteria to define the selection of records 084 * @param con a database connection 085 * @throws TorqueException if any database error occurs 086 * 087 * @return a list of Group/Role relations 088 */ 089 protected List<TorqueDynamicGroupRole> getTorqueDynamicGroupRolesJoinTorqueDynamicGroup(Criteria criteria, Connection con) 090 throws TorqueException 091 { 092 criteria.and(TorqueDynamicGroupRolePeer.ROLE_ID, getEntityId() ); 093 return TorqueDynamicGroupRolePeer.doSelectJoinTorqueDynamicGroup(criteria, con); 094 } 095 096 /** 097 * @see org.apache.fulcrum.security.model.dynamic.entity.DynamicRole#addGroup(org.apache.fulcrum.security.entity.Group) 098 */ 099 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 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 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}