001package org.apache.fulcrum.security.torque.turbine; 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.Role; 025import org.apache.fulcrum.security.model.turbine.entity.TurbinePermission; 026import org.apache.fulcrum.security.torque.om.TorqueTurbinePermissionPeer; 027import org.apache.fulcrum.security.torque.om.TorqueTurbineRolePermission; 028import org.apache.fulcrum.security.torque.om.TorqueTurbineRolePermissionPeer; 029import org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity; 030import org.apache.fulcrum.security.util.DataBackendException; 031import org.apache.fulcrum.security.util.RoleSet; 032import org.apache.torque.TorqueException; 033import org.apache.torque.criteria.Criteria; 034import org.apache.torque.om.SimpleKey; 035/** 036 * This abstract class provides the SecurityInterface to the managers. 037 * 038 * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> 039 * @version $Id:$ 040 */ 041public abstract class FulcrumAbstractTurbinePermission extends TorqueAbstractSecurityEntity 042 implements TurbinePermission 043{ 044 /** Serial version */ 045 private static final long serialVersionUID = -5313324873688923207L; 046 047 /** a cache of role objects */ 048 private Set<Role> roleSet = null; 049 050 /** 051 * Forward reference to generated code 052 * 053 * Get a list of association objects, pre-populated with their TorqueTurbineRole 054 * objects. 055 * 056 * @param criteria Criteria to define the selection of records 057 * @param con a database connection 058 * @throws TorqueException if any database error occurs 059 * 060 * @return a list of Role/Permission relations 061 */ 062 protected List<TorqueTurbineRolePermission> getTorqueTurbineRolePermissionsJoinTorqueTurbineRole(Criteria criteria, Connection con) 063 throws TorqueException 064 { 065 criteria.and(TorqueTurbineRolePermissionPeer.PERMISSION_ID, getEntityId() ); 066 return TorqueTurbineRolePermissionPeer.doSelectJoinTorqueTurbineRole(criteria, con); 067 } 068 069 /** 070 * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#addRole(org.apache.fulcrum.security.entity.Role) 071 */ 072 public void addRole(Role role) 073 { 074 getRoles().add(role); 075 } 076 077 /** 078 * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#getRoles() 079 */ 080 public RoleSet getRoles() 081 { 082 if (roleSet == null) 083 { 084 roleSet = new RoleSet(); 085 } 086 else if(!(roleSet instanceof RoleSet)) 087 { 088 roleSet = new RoleSet(roleSet); 089 } 090 091 return (RoleSet)roleSet; 092 } 093 094 /** 095 * @see org.apache.fulcrum.security.model.turbine.entity.TurbinePermission#getRolesAsSet() 096 */ 097 @SuppressWarnings("unchecked") 098 public <T extends Role> Set<T> getRolesAsSet() 099 { 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 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}