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.HashSet; 022import java.util.List; 023import java.util.Set; 024 025import org.apache.fulcrum.security.entity.User; 026import org.apache.fulcrum.security.model.turbine.entity.TurbineUser; 027import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole; 028import org.apache.fulcrum.security.torque.om.TorqueTurbineUserGroupRole; 029import org.apache.fulcrum.security.torque.om.TorqueTurbineUserGroupRolePeer; 030import org.apache.fulcrum.security.torque.om.TorqueTurbineUserPeer; 031import org.apache.fulcrum.security.torque.security.turbine.TorqueAbstractTurbineTurbineSecurityEntity; 032import org.apache.fulcrum.security.util.DataBackendException; 033import org.apache.torque.TorqueException; 034import org.apache.torque.criteria.Criteria; 035import org.apache.torque.om.SimpleKey; 036/** 037 * This abstract class provides the SecurityInterface to the managers. 038 * 039 * An implementing class is required to implement {@link User} at least. Most probably the OM classes allow to implement {@link TurbineUser}, which includes User. 040 * 041 * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> 042 * @version $Id:$ 043 */ 044public abstract class FulcrumAbstractTurbineUser extends TorqueAbstractTurbineTurbineSecurityEntity 045{ 046 /** Serial version */ 047 private static final long serialVersionUID = -7255623655281852566L; 048 049 /** 050 * Forward reference to generated code 051 * 052 * Get a list of association objects, pre-populated with their TorqueTurbineRole 053 * objects. 054 * 055 * @param criteria Criteria to define the selection of records 056 * @param con a database connection 057 * @throws TorqueException if any database error occurs 058 * 059 * @return a list of User/Group/Role relations 060 */ 061 protected List<TorqueTurbineUserGroupRole> getTorqueTurbineUserGroupRolesJoinTorqueTurbineGroup(Criteria criteria, Connection con) 062 throws TorqueException 063 { 064 criteria.and(TorqueTurbineUserGroupRolePeer.USER_ID, getEntityId() ); 065 return TorqueTurbineUserGroupRolePeer.doSelectJoinTorqueTurbineGroup(criteria, con); 066 } 067 068 /* (non-Javadoc) 069 * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection) 070 */ 071 @Override 072 public void retrieveAttachedObjects( Connection con ) 073 throws DataBackendException 074 { 075 retrieveAttachedObjects( con, false ); 076 } 077 078 /* (non-Javadoc) 079 * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#retrieveAttachedObjects(java.sql.Connection, java.lang.Boolean) 080 */ 081 @Override 082 public void retrieveAttachedObjects(Connection con, Boolean lazy) throws DataBackendException 083 { 084 try { 085 if (!lazy) { 086 Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>(); 087 List<TorqueTurbineUserGroupRole> ugrs = getTorqueTurbineUserGroupRolesJoinTorqueTurbineGroup(new Criteria(), con); 088 089 for (TorqueTurbineUserGroupRole ttugr : ugrs) 090 { 091 TurbineUserGroupRole ugr = new TurbineUserGroupRole(); 092 ugr.setUser((User) this); 093 ugr.setRole(ttugr.getTorqueTurbineRole()); 094 ugr.setGroup(ttugr.getTorqueTurbineGroup(con)); 095 userGroupRoleSet.add(ugr); 096 } 097 setUserGroupRoleSet(userGroupRoleSet); 098 } 099 } catch (TorqueException e ) { 100 throw new DataBackendException( e.getMessage(),e ); 101 } 102 } 103 104 /* (non-Javadoc) 105 * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#update(java.sql.Connection) 106 */ 107 @Override 108 public void update(Connection con) throws TorqueException 109 { 110 try 111 { 112 Set<TurbineUserGroupRole> userGroupRoleSet = getUserGroupRoleSet(); 113 if (userGroupRoleSet != null) 114 { 115 Criteria criteria = new Criteria(); 116 117 /* remove old entries */ 118 criteria.where(TorqueTurbineUserGroupRolePeer.USER_ID, getEntityId()); 119 TorqueTurbineUserGroupRolePeer.doDelete(criteria, con); 120 121 for (TurbineUserGroupRole ugr : userGroupRoleSet) 122 { 123 TorqueTurbineUserGroupRole ttugr = new TorqueTurbineUserGroupRole(); 124 ttugr.setGroupId((Integer)ugr.getGroup().getId()); 125 ttugr.setUserId((Integer)ugr.getUser().getId()); 126 ttugr.setRoleId((Integer)ugr.getRole().getId()); 127 ttugr.save(con); 128 } 129 } 130 save(con); 131 } 132 catch (Exception e) 133 { 134 throw new TorqueException(e); 135 } 136 } 137 138 139 /* (non-Javadoc) 140 * @see org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity#delete() 141 */ 142 @Override 143 public void delete() throws TorqueException 144 { 145 TorqueTurbineUserPeer.doDelete(SimpleKey.keyFor(getEntityId())); 146 } 147}