/*!
* Copyright 2010 - 2015 Pentaho Corporation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.pentaho.di.repository.pur;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.repository.IUser;
import org.pentaho.di.repository.pur.model.IEEUser;
import org.pentaho.di.repository.pur.model.IRole;
import org.pentaho.di.ui.repository.pur.services.IRoleSupportSecurityManager;
import org.pentaho.platform.api.engine.security.userroledao.UserRoleInfo;
import org.pentaho.platform.security.userroledao.ws.ProxyPentahoRole;
import org.pentaho.platform.security.userroledao.ws.ProxyPentahoUser;
import org.pentaho.platform.security.userroledao.ws.UserRoleSecurityInfo;
public class UserRoleLookupCache implements java.io.Serializable {
private static final long serialVersionUID = -5922614423981595812L; /* EESOURCE: UPDATE SERIALVERUID */
Set<IUser> userInfoSet;
Set<IRole> roleInfoSet;
IRoleSupportSecurityManager rsm;
public UserRoleLookupCache( UserRoleInfo userRoleInfo, IRoleSupportSecurityManager rsm ) {
this.rsm = rsm;
userInfoSet = new HashSet<IUser>();
for ( String user : userRoleInfo.getUsers() ) {
userInfoSet.add( createUserInfo( user ) );
}
roleInfoSet = new HashSet<IRole>();
for ( String role : userRoleInfo.getRoles() ) {
roleInfoSet.add( createRoleInfo( role ) );
}
}
public UserRoleLookupCache( UserRoleSecurityInfo userRoleSecurityInfo, IRoleSupportSecurityManager rsm ) {
this.rsm = rsm;
userInfoSet = new HashSet<IUser>();
for ( ProxyPentahoUser user : userRoleSecurityInfo.getUsers() ) {
userInfoSet.add( createUserInfo( user ) );
}
roleInfoSet = new HashSet<IRole>();
for ( ProxyPentahoRole role : userRoleSecurityInfo.getRoles() ) {
roleInfoSet.add( createRoleInfo( role ) );
}
}
public IUser lookupUser( ProxyPentahoUser proxyUser ) {
for ( IUser user : userInfoSet ) {
if ( user.getLogin().equals( proxyUser.getName() ) ) {
return user;
}
}
return addUserToLookupSet( proxyUser );
}
public IRole lookupRole( ProxyPentahoRole proxyRole ) {
for ( IRole role : roleInfoSet ) {
if ( role.getName().equals( proxyRole.getName() ) ) {
return role;
}
}
return addRoleToLookupSet( proxyRole );
}
public void insertUserToLookupSet( IUser user ) {
userInfoSet.add( user );
}
public void insertRoleToLookupSet( IRole role ) {
roleInfoSet.add( role );
}
public void updateUserInLookupSet( IUser user ) {
IUser userInfoToUpdate = null;
for ( IUser userInfo : userInfoSet ) {
if ( userInfo.getLogin().equals( user.getLogin() ) ) {
userInfoToUpdate = userInfo;
break;
}
}
userInfoToUpdate.setDescription( user.getDescription() );
if ( !StringUtils.isEmpty( user.getPassword() ) ) {
userInfoToUpdate.setPassword( user.getPassword() );
}
if ( user instanceof IEEUser ) {
( (IEEUser) userInfoToUpdate ).setRoles( ( (IEEUser) user ).getRoles() );
}
}
public void updateRoleInLookupSet( IRole role ) {
IRole roleInfoToUpdate = null;
for ( IRole roleInfo : roleInfoSet ) {
if ( roleInfo.getName().equals( role.getName() ) ) {
roleInfoToUpdate = roleInfo;
break;
}
}
roleInfoToUpdate.setDescription( role.getDescription() );
roleInfoToUpdate.setUsers( role.getUsers() );
}
public void removeUsersFromLookupSet( List<IUser> users ) {
for ( IUser user : users ) {
removeUserFromLookupSet( user );
}
}
public void removeRolesFromLookupSet( List<IRole> roles ) {
for ( IRole role : roles ) {
removeRoleFromLookupSet( role );
}
}
private void removeUserFromLookupSet( IUser user ) {
IUser userToRemove = null;
for ( IUser userInfo : userInfoSet ) {
if ( userInfo.getLogin().equals( user.getLogin() ) ) {
userToRemove = userInfo;
break;
}
userInfoSet.remove( userToRemove );
}
}
private void removeRoleFromLookupSet( IRole role ) {
IRole roleToRemove = null;
for ( IRole roleInfo : roleInfoSet ) {
if ( roleInfo.getName().equals( role.getName() ) ) {
roleToRemove = roleInfo;
break;
}
roleInfoSet.remove( roleToRemove );
}
}
private IUser addUserToLookupSet( ProxyPentahoUser user ) {
IUser userInfo = createUserInfo( user );
userInfoSet.add( userInfo );
return userInfo;
}
private IRole addRoleToLookupSet( ProxyPentahoRole role ) {
IRole roleInfo = createRoleInfo( role );
roleInfoSet.add( roleInfo );
return roleInfo;
}
private IUser createUserInfo( ProxyPentahoUser user ) {
IUser userInfo = null;
try {
userInfo = this.rsm.constructUser();
userInfo.setDescription( user.getDescription() );
userInfo.setLogin( user.getName() );
userInfo.setName( user.getName() );
userInfo.setPassword( user.getPassword() );
} catch ( KettleException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userInfo;
}
private IRole createRoleInfo( ProxyPentahoRole role ) {
IRole roleInfo = null;
try {
roleInfo = rsm.constructRole();
} catch ( KettleException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
roleInfo.setDescription( role.getDescription() );
roleInfo.setName( role.getName() );
return roleInfo;
}
private IUser createUserInfo( String user ) {
IUser userInfo = null;
try {
userInfo = this.rsm.constructUser();
userInfo.setName( user );
} catch ( KettleException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userInfo;
}
private IRole createRoleInfo( String role ) {
IRole roleInfo = null;
try {
roleInfo = rsm.constructRole();
} catch ( KettleException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
roleInfo.setName( role );
return roleInfo;
}
}