/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright 2008 - 2009 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.pac.server;
import java.util.List;
import org.pentaho.pac.common.PentahoSecurityException;
import org.pentaho.pac.common.roles.DuplicateRoleException;
import org.pentaho.pac.common.roles.NonExistingRoleException;
import org.pentaho.pac.common.users.DuplicateUserException;
import org.pentaho.pac.common.users.NonExistingUserException;
import org.pentaho.pac.server.common.DAOException;
import org.pentaho.pac.server.common.DAOFactory;
import org.pentaho.pac.server.i18n.Messages;
import org.pentaho.platform.engine.security.userroledao.AlreadyExistsException;
import org.pentaho.platform.engine.security.userroledao.IPentahoRole;
import org.pentaho.platform.engine.security.userroledao.IPentahoUser;
import org.pentaho.platform.engine.security.userroledao.IUserRoleDao;
import org.pentaho.platform.engine.security.userroledao.NotFoundException;
import org.pentaho.platform.engine.security.userroledao.UncategorizedUserRoleDaoException;
/*package private */ class UserRoleMgmtService implements IUserRoleMgmtService {
IUserRoleDao userRoleDAO = null;
public UserRoleMgmtService() {
userRoleDAO = DAOFactory.getUserRoleDAO();
}
public void createRole(IPentahoRole newRole) throws DuplicateRoleException, DAOException, PentahoSecurityException {
if (hasCreateRolePerm(newRole)) {
try {
userRoleDAO.createRole(newRole);
} catch (AlreadyExistsException e) {
throw new DuplicateRoleException(Messages.getErrorString("PacService.ERROR_0049_ROLE_ALREADY_EXIST", newRole.getName()), e); //$NON-NLS-1$
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0050_UNRECOGNIZED_ROLE_CREATION",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
} else {
throw new PentahoSecurityException(Messages.getErrorString("PacService.ERROR_0002_NO_CREATE_ROLE_PERMISSION",newRole.getName())); //$NON-NLS-1$
}
}
public void createUser(IPentahoUser newUser) throws DuplicateUserException, DAOException, PentahoSecurityException {
if (hasCreateUserPerm(newUser)) {
try {
userRoleDAO.createUser(newUser);
} catch (AlreadyExistsException e) {
throw new DuplicateUserException(Messages.getErrorString("PacService.ERROR_0051_USER_ALREADY_EXIST", newUser.getUsername()), e); //$NON-NLS-1$
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0052_UNRECOGNIZED_USER_CREATION",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
} else {
throw new PentahoSecurityException(Messages.getErrorString("PacService.ERROR_0005_NO_CREATE_USER_PERMISSION",newUser.getUsername())); //$NON-NLS-1$
}
}
public void deleteRole(String roleName) throws NonExistingRoleException, DAOException, PentahoSecurityException {
IPentahoRole role;
try {
role = userRoleDAO.getRole(roleName);
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0053_UNRECOGNIZED_ROLE_DELETION",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
if (role != null) {
deleteRole(role);
} else {
throw new NonExistingRoleException(Messages.getErrorString("PacService.ERROR_0010_ROLE_DELETION_FAILED_NO_ROLE",roleName)); //$NON-NLS-1$
}
}
public void deleteRole(IPentahoRole role) throws NonExistingRoleException, DAOException, PentahoSecurityException {
if (hasDeleteRolePerm(role)) {
try {
userRoleDAO.deleteRole(role);
} catch (NotFoundException e) {
throw new NonExistingRoleException(Messages.getErrorString("PacService.ERROR_0010_ROLE_DELETION_FAILED_NO_ROLE",role.getName()), e); //$NON-NLS-1$
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0053_UNRECOGNIZED_ROLE_DELETION",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
} else {
throw new PentahoSecurityException(Messages.getErrorString("PacService.ERROR_0012_ROLE_DELETION_FAILED_NO_PERMISSION",role.getName())); //$NON-NLS-1$
}
}
public void deleteUser(String userName) throws NonExistingUserException, DAOException, PentahoSecurityException {
IPentahoUser user;
try {
user = userRoleDAO.getUser(userName);
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0054_UNRECOGNIZED_USER_DELETION",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
if (user != null) {
deleteUser(user);
} else {
throw new NonExistingUserException(Messages.getErrorString("PacService.ERROR_0013_USER_DELETION_FAILED_NO_USER",userName)); //$NON-NLS-1$
}
}
public void deleteUser(IPentahoUser user) throws NonExistingUserException, DAOException, PentahoSecurityException {
if (hasDeleteUserPerm(user)) {
try {
userRoleDAO.deleteUser(user);
} catch (NotFoundException e) {
throw new NonExistingUserException(Messages.getErrorString("PacService.ERROR_0013_USER_DELETION_FAILED_NO_USER",user.getUsername())); //$NON-NLS-1$
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0054_UNRECOGNIZED_USER_DELETION",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
} else {
throw new PentahoSecurityException(Messages.getErrorString("PacService.ERROR_0015_USER_DELETION_FAILED_NO_PERMISSION",user.getUsername())); //$NON-NLS-1$
}
}
public IPentahoRole getRole(String name) throws DAOException {
try {
return userRoleDAO.getRole(name);
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0055_UNRECOGNIZED_ROLE_RETRIEVAL",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
}
public List<IPentahoRole> getRoles() throws DAOException {
try {
return userRoleDAO.getRoles();
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0057_UNRECOGNIZED_ROLES_RETRIEVAL",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
}
public IPentahoUser getUser(String name) throws DAOException {
try {
return userRoleDAO.getUser(name);
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0056_UNRECOGNIZED_USER_RETRIEVAL",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
}
public List<IPentahoUser> getUsers() throws DAOException {
try {
return userRoleDAO.getUsers();
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0058_UNRECOGNIZED_USERS_RETRIEVAL",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
}
public void updateRole(IPentahoRole role) throws DAOException, PentahoSecurityException, NonExistingRoleException {
if (hasUpdateRolePerm(role)) {
try {
userRoleDAO.updateRole(role);
} catch (NotFoundException e) {
throw new NonExistingRoleException(Messages.getErrorString("PacService.ERROR_0036_ROLE_UPDATE_FAILED_DOES_NOT_EXIST",role.getName()), e); //$NON-NLS-1$
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0059_UNRECOGNIZED_ROLES_UPDATE",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
} else {
throw new PentahoSecurityException(Messages.getErrorString("PacService.ERROR_0035_ROLE_UPDATE_FAILED_NO_PERMISSION",role.getName())); //$NON-NLS-1$
}
}
public void updateUser(IPentahoUser user) throws DAOException, PentahoSecurityException, NonExistingUserException {
if (hasUpdateUserPerm(user)) {
try {
userRoleDAO.updateUser(user);
} catch (NotFoundException e) {
throw new NonExistingUserException(Messages.getErrorString("PacService.ERROR_0039_USER_UPDATE_FAILED_DOES_NOT_EXIST",user.getUsername()), e); //$NON-NLS-1$
} catch (UncategorizedUserRoleDaoException e) {
throw new DAOException(Messages.getErrorString("PacService.ERROR_0060_UNRECOGNIZED_USERS_UPDATE",e.getLocalizedMessage()), e); //$NON-NLS-1$
}
} else {
throw new PentahoSecurityException(Messages.getErrorString("PacService.ERROR_0061_USER_UPDATE_FAILED_NO_PERMISSION",user.getUsername())); //$NON-NLS-1$
}
}
public void refreshUserRoleDAO() throws DAOException{
userRoleDAO = DAOFactory.getUserRoleDAO();
}
protected boolean hasCreateUserPerm(IPentahoUser user) {
return true;
}
protected boolean hasCreateRolePerm(IPentahoRole role) {
return true;
}
protected boolean hasUpdateUserPerm(IPentahoUser user) {
return true;
}
protected boolean hasUpdateRolePerm(IPentahoRole role) {
return true;
}
protected boolean hasDeleteUserPerm(IPentahoUser user) {
return true;
}
protected boolean hasDeleteRolePerm(IPentahoRole role) {
return true;
}
}