/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.cms.controllers.kernel.impl.simple;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.log4j.Logger;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.OQLQuery;
import org.exolab.castor.jdo.PersistenceException;
import org.exolab.castor.jdo.QueryResults;
import org.infoglue.cms.entities.content.impl.simple.ContentImpl;
import org.infoglue.cms.entities.content.impl.simple.SmallestContentVersionImpl;
import org.infoglue.cms.entities.kernel.BaseEntityVO;
import org.infoglue.cms.entities.management.AccessRight;
import org.infoglue.cms.entities.management.AccessRightUser;
import org.infoglue.cms.entities.management.AccessRightUserVO;
import org.infoglue.cms.entities.management.GroupVO;
import org.infoglue.cms.entities.management.RoleVO;
import org.infoglue.cms.entities.management.SystemUser;
import org.infoglue.cms.entities.management.SystemUserVO;
import org.infoglue.cms.entities.management.TableCount;
import org.infoglue.cms.entities.management.impl.simple.AccessRightUserImpl;
import org.infoglue.cms.entities.management.impl.simple.FormEntryImpl;
import org.infoglue.cms.entities.management.impl.simple.RedirectImpl;
import org.infoglue.cms.entities.management.impl.simple.SubscriptionImpl;
import org.infoglue.cms.entities.management.impl.simple.SystemUserGroupImpl;
import org.infoglue.cms.entities.management.impl.simple.SystemUserImpl;
import org.infoglue.cms.entities.management.impl.simple.SystemUserRoleImpl;
import org.infoglue.cms.entities.management.impl.simple.UserContentTypeDefinitionImpl;
import org.infoglue.cms.entities.management.impl.simple.UserPropertiesImpl;
import org.infoglue.cms.entities.publishing.impl.simple.PublicationDetailImpl;
import org.infoglue.cms.entities.publishing.impl.simple.PublicationImpl;
import org.infoglue.cms.entities.structure.impl.simple.SmallSiteNodeImpl;
import org.infoglue.cms.entities.structure.impl.simple.SmallSiteNodeVersionImpl;
import org.infoglue.cms.entities.structure.impl.simple.SmallestSiteNodeImpl;
import org.infoglue.cms.entities.workflow.impl.simple.EventImpl;
import org.infoglue.cms.exception.Bug;
import org.infoglue.cms.exception.ConstraintException;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.cms.util.ConstraintExceptionBuffer;
import org.infoglue.cms.util.PasswordGenerator;
import org.infoglue.cms.util.mail.MailServiceFactory;
/**
* SystemUserController.java
* Created on 2002-aug-28
* @author Stefan Sik, ss@frovi.com
*
* This class is a helper class for the use case handle SystemUsers
*
*/
public class SystemUserController extends BaseController
{
private final static Logger logger = Logger.getLogger(SystemUserController.class.getName());
/**
* Factory method
*/
public static SystemUserController getController()
{
return new SystemUserController();
}
/*
public static SystemUser getSystemUserWithId(Integer systemUserId, Database db) throws SystemException, Bug
{
return (SystemUser) getObjectWithId(SystemUserImpl.class, systemUserId, db);
}
public SystemUserVO getSystemUserVOWithId(Integer systemUserId) throws SystemException, Bug
{
return (SystemUserVO) getVOWithId(SystemUserImpl.class, systemUserId);
}
*/
public SystemUserVO getSystemUserVOWithName(String name) throws SystemException, Bug
{
SystemUserVO systemUserVO = null;
Database db = CastorDatabaseService.getDatabase();
try
{
beginTransaction(db);
systemUserVO = getReadOnlySystemUserVOWithName(name, db);
commitTransaction(db);
}
catch (Exception e)
{
logger.info("An error occurred so we should not complete the transaction:" + e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
return systemUserVO;
}
/**
* Get the SystemUser with the userName
*/
public SystemUserVO getReadOnlySystemUserVOWithName(String userName, Database db) throws SystemException, Bug
{
SystemUserVO systemUserVO = null;
try
{
OQLQuery oql = db.getOQLQuery("SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.userName = $1");
oql.bind(userName);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
SystemUser systemUser = (SystemUser)results.next();
systemUserVO = systemUser.getValueObject();
}
results.close();
oql.close();
}
catch(Exception e)
{
throw new SystemException("An error occurred when we tried to fetch " + userName + " Reason:" + e.getMessage(), e);
}
return systemUserVO;
}
/**
* Get the SystemUser with the userName
*/
public SystemUser getReadOnlySystemUserWithName(String userName, Database db) throws SystemException, Bug
{
SystemUser systemUser = null;
OQLQuery oql;
try
{
oql = db.getOQLQuery( "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.userName = $1");
oql.bind(userName);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
systemUser = (SystemUser)results.next();
logger.info("found one:" + systemUser.getFirstName());
}
results.close();
oql.close();
}
catch(Exception e)
{
throw new SystemException("An error occurred when we tried to fetch " + userName + " Reason:" + e.getMessage(), e);
}
return systemUser;
}
/**
* Get if the SystemUser with the userName exists
*/
public boolean systemUserExists(String userName, Database db) throws SystemException, Bug
{
boolean systemUserExists = false;
try
{
OQLQuery oql = db.getOQLQuery( "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.userName = $1");
oql.bind(userName);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
systemUserExists = true;
}
results.close();
oql.close();
}
catch(Exception e)
{
throw new SystemException("An error occurred when we tried to fetch " + userName + " Reason:" + e.getMessage(), e);
}
return systemUserExists;
}
/**
* Get the SystemUser with the userName
*/
/*
public SystemUser getSystemUserWithName(String userName, Database db) throws SystemException, Bug
{
SystemUser systemUser = null;
OQLQuery oql;
try
{
oql = db.getOQLQuery( "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.userName = $1");
oql.bind(userName);
QueryResults results = oql.execute();
this.logger.info("Fetching entity in read/write mode" + userName);
if (results.hasMore())
{
systemUser = (SystemUser)results.next();
logger.info("found one:" + systemUser.getFirstName());
}
results.close();
oql.close();
}
catch(Exception e)
{
throw new SystemException("An error occurred when we tried to fetch " + userName + " Reason:" + e.getMessage(), e);
}
return systemUser;
}*/
/**
* Get the SystemUser with the userName
*/
public SystemUserImpl getSystemUserWithName(String userName, Database db) throws SystemException, Bug, Exception
{
SystemUserImpl systemUser = (SystemUserImpl)db.load(org.infoglue.cms.entities.management.impl.simple.SystemUserImpl.class, userName);
//logger.warn("found one systemUser:" + systemUser.getFirstName());
return systemUser;
}
public SystemUserVO getSystemUserVO(String userName, String password) throws SystemException, Bug
{
SystemUserVO systemUserVO = null;
Database db = CastorDatabaseService.getDatabase();
try
{
beginTransaction(db);
systemUserVO = getSystemUserVO(db, userName, password);
commitTransaction(db);
}
catch (Exception e)
{
logger.info("An error occurred so we should not complete the transaction:" + e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
return systemUserVO;
}
public SystemUserVO getSystemUserVO(Database db, String userName, String password) throws SystemException, Exception
{
SystemUserVO systemUserVO = null;
OQLQuery oql = db.getOQLQuery( "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.userName = $1 AND u.password = $2");
oql.bind(userName);
oql.bind(password);
QueryResults results = oql.execute(Database.READONLY);
if (results.hasMore())
{
SystemUser systemUser = (SystemUser)results.next();
systemUserVO = systemUser.getValueObject();
}
results.close();
oql.close();
return systemUserVO;
}
public SystemUser getSystemUser(Database db, String userName, String password) throws SystemException, Exception
{
SystemUser systemUser = null;
OQLQuery oql = db.getOQLQuery( "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.userName = $1 AND u.password = $2");
oql.bind(userName);
oql.bind(password);
QueryResults results = oql.execute();
this.logger.info("Fetching entity in read/write mode" + userName);
if (results.hasMore())
{
systemUser = (SystemUser)results.next();
logger.info("found one:" + systemUser.getFirstName());
}
results.close();
oql.close();
return systemUser;
}
public List getSystemUserVOList() throws SystemException, Bug
{
return getAllVOObjects(SystemUserImpl.class, "userName");
}
public List getSystemUserVOList(Database db) throws SystemException, Bug
{
return getAllVOObjects(SystemUserImpl.class, "userName", db);
}
public List getSystemUserList(Database db) throws SystemException, Bug
{
return getAllObjects(SystemUserImpl.class, "userName", db);
}
public List getFilteredSystemUserVOList(Integer offset, Integer limit, String sortProperty, String direction, String searchString) throws SystemException, Bug
{
List filteredList = new ArrayList();
Database db = CastorDatabaseService.getDatabase();
try
{
beginTransaction(db);
filteredList = getFilteredSystemUserList(offset, limit, sortProperty, direction, searchString, db);
commitTransaction(db);
}
catch (Exception e)
{
logger.info("An error occurred so we should not complete the transaction:" + e);
rollbackTransaction(db);
throw new SystemException("An error occurred so we should not complete the transaction:" + e, e);
}
return toVOList(filteredList);
}
public List<SystemUserVO> getSystemUserVOListWithPassword(String password, Database db) throws SystemException, Bug, Exception
{
List<SystemUserVO> filteredVOList = new ArrayList<SystemUserVO>();
OQLQuery oql = db.getOQLQuery( "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u WHERE u.password = $1 ORDER BY u.userName");
oql.bind(password);
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
SystemUser extranetUser = (SystemUser)results.next();
filteredVOList.add(extranetUser.getValueObject());
}
results.close();
oql.close();
return filteredVOList;
}
public List getFilteredSystemUserList(Integer offset, Integer limit, String sortProperty, String direction, String searchString, Database db) throws SystemException, Bug, Exception
{
List filteredList = new ArrayList();
if(sortProperty == null || sortProperty.equals(""))
sortProperty = "userName";
if(direction == null || direction.equals(""))
direction = "ASC";
OQLQuery oql = null;
if(searchString != null && !searchString.equals(""))
{
if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("sql-server"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser WHERE firstName LIKE $1 OR lastName LIKE $2 OR userName LIKE $3 OR email LIKE $4 OR source LIKE $5) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust Where RowNumber > " + offset + " and RowNumber <= " + (offset + limit) + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlBase = "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u";
String orderStatement = " ORDER BY u." + sortProperty + " " + direction;
oql = db.getOQLQuery( oqlBase + orderStatement);
}
}
else if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("oracle"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser WHERE firstName LIKE $1 OR lastName LIKE $2 OR userName LIKE $3 OR email LIKE $4 OR source LIKE $5 ORDER BY " + sortProperty + " " + direction + ", userName ) su WHERE ROWNUM <= " + (offset + limit) + " ) WHERE rnum > " + offset + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlBase = "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u";
String orderStatement = " ORDER BY u." + sortProperty + " " + direction;
oql = db.getOQLQuery( oqlBase + orderStatement);
}
}
else
{
String oqlBase = "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u";
String searchQuery = " WHERE u.firstName LIKE $1 OR u.lastName LIKE $2 OR u.userName LIKE $3 OR u.email LIKE $4 OR u.source LIKE $5";
String orderStatement = " ORDER BY u." + sortProperty + " " + direction;
String pagination = " LIMIT $6 OFFSET $7";
if(offset != null || limit != null)
{
String oqlString = oqlBase + searchQuery + orderStatement + pagination;
oql = db.getOQLQuery(oqlString);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind(limit);
oql.bind(offset);
}
else
{
oql = db.getOQLQuery( oqlBase + searchQuery + orderStatement);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
}
else
{
if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("sql-server"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser ) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust Where RowNumber > " + offset + " and RowNumber <= " + (offset + limit) + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
}
else
{
String oqlBase = "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u";
String orderStatement = " ORDER BY u." + sortProperty + " " + direction;
oql = db.getOQLQuery( oqlBase + orderStatement);
}
}
else if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("oracle"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser ORDER BY " + sortProperty + " " + direction + ", userName ) su WHERE ROWNUM <= " + (offset + limit) + " ) WHERE rnum > " + offset + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
}
else
{
String oqlBase = "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u";
String orderStatement = " ORDER BY u." + sortProperty + " " + direction;
oql = db.getOQLQuery( oqlBase + orderStatement);
}
}
else
{
String oqlBase = "SELECT u FROM org.infoglue.cms.entities.management.impl.simple.SystemUserImpl u";
String orderStatement = " ORDER BY u." + sortProperty + " " + direction;
String pagination = " LIMIT $1 OFFSET $2";
if(offset != null || limit != null)
{
String oqlString = oqlBase + orderStatement + pagination;
oql = db.getOQLQuery(oqlString);
oql.bind(limit);
oql.bind(offset);
}
else
{
oql = db.getOQLQuery( oqlBase + orderStatement);
}
}
}
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
SystemUser extranetUser = (SystemUser)results.next();
filteredList.add(extranetUser);
}
results.close();
oql.close();
return filteredList;
}
public List getFilteredSystemUserList(Integer offset, Integer limit, String sortProperty, String direction, String searchString, String roleName, String groupName, Database db) throws SystemException, Bug, Exception
{
List filteredList = new ArrayList();
if(sortProperty == null || sortProperty.equals(""))
sortProperty = "userName";
if(direction == null || direction.equals(""))
direction = "ASC";
String connectionTableName = "cmSystemUserRole";
if(roleName == null)
connectionTableName = "cmSystemUserGroup";
String foreignKey = "roleName";
String foreignKeyValue = roleName;
if(roleName == null)
{
foreignKey = "groupName";
foreignKeyValue = groupName;
}
OQLQuery oql = null;
if(searchString != null && !searchString.equals(""))
{
if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("sql-server"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust Where RowNumber > " + offset + " and RowNumber <= " + (offset + limit) + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
else if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("oracle"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6) ORDER BY " + sortProperty + " " + direction + ") su WHERE ROWNUM <= " + (offset + limit) + " ) WHERE rnum > " + offset + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6) ORDER BY " + sortProperty + " " + direction + ") su ) AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery( oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
else
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from " + connectionTableName + " sur, cmSystemUser su where sur.userName = su.userName AND sur." + foreignKey + " = $1 AND (su.firstName LIKE $2 OR su.lastName LIKE $3 OR su.userName LIKE $4 OR su.email LIKE $5 OR su.source LIKE $6) ORDER BY su." + sortProperty + " " + direction + " limit " + offset + "," + limit + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from " + connectionTableName + " sur, cmSystemUser su where sur.userName = su.userName AND sur." + foreignKey + " = $1 AND (su.firstName LIKE $2 OR su.lastName LIKE $3 OR su.userName LIKE $4 OR su.email LIKE $5 OR su.source LIKE $6) ORDER BY su." + sortProperty + " " + direction + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
}
else
{
if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("sql-server"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust Where RowNumber > " + offset + " and RowNumber <= " + (offset + limit) + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
else
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
}
else if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("oracle"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) ORDER BY " + sortProperty + " " + direction + ") su WHERE ROWNUM <= " + (offset + limit) + " ) WHERE rnum > " + offset + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
else
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) ORDER BY " + sortProperty + " " + direction + ") su ) AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
}
else
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from " + connectionTableName + " sur, cmSystemUser su where sur.userName = su.userName AND sur." + foreignKey + " = $1 ORDER BY su." + sortProperty + " " + direction + " limit " + offset + "," + limit + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
else
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from " + connectionTableName + " sur, cmSystemUser su where sur.userName = su.userName AND sur." + foreignKey + " = $1 ORDER BY su." + sortProperty + " " + direction + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
}
}
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
SystemUser extranetUser = (SystemUser)results.next();
filteredList.add(extranetUser.getValueObject());
}
results.close();
oql.close();
return filteredList;
}
public List getFilteredSystemUserListInvertedOnRoleOrGroup(Integer offset, Integer limit, String sortProperty, String direction, String searchString, String roleName, String groupName, Database db) throws SystemException, Bug, Exception
{
List filteredList = new ArrayList();
if(sortProperty == null || sortProperty.equals(""))
sortProperty = "userName";
if(direction == null || direction.equals(""))
direction = "ASC";
String connectionTableName = "cmSystemUserRole";
if(roleName == null)
connectionTableName = "cmSystemUserGroup";
String foreignKey = "roleName";
String foreignKeyValue = roleName;
if(roleName == null)
{
foreignKey = "groupName";
foreignKeyValue = groupName;
}
OQLQuery oql = null;
if(searchString != null && !searchString.equals(""))
{
if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("sql-server"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName NOT IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust Where RowNumber > " + offset + " and RowNumber <= " + (offset + limit) + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName NOT IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
else if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("oracle"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6) ORDER BY " + sortProperty + " " + direction + ") su WHERE ROWNUM <= " + (offset + limit) + " ) WHERE rnum > " + offset + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (firstName LIKE $2 OR lastName LIKE $3 OR userName LIKE $4 OR email LIKE $5 OR source LIKE $6) ORDER BY " + sortProperty + " " + direction + ") su ) AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery( oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
else
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from cmSystemUser su where su.userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (su.firstName LIKE $2 OR su.lastName LIKE $3 OR su.userName LIKE $4 OR su.email LIKE $5 OR su.source LIKE $6) ORDER BY su." + sortProperty + " " + direction + " limit " + offset + "," + limit + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from cmSystemUser su where su.userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) AND (su.firstName LIKE $2 OR su.lastName LIKE $3 OR su.userName LIKE $4 OR su.email LIKE $5 OR su.source LIKE $6) ORDER BY su." + sortProperty + " " + direction + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
}
}
else
{
if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("sql-server"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName NOT IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust Where RowNumber > " + offset + " and RowNumber <= " + (offset + limit) + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
else
{
String oqlString = "CALL SQL With cmSystemUserCust AS ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime, ROW_NUMBER() OVER (order by " + sortProperty + " " + direction + ") as RowNumber FROM cmSystemUser su where su.userName NOT IN (select userName from " + connectionTableName + " where " + foreignKey + " = $1)) select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from cmSystemUserCust AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
}
else if(CmsPropertyHandler.getDatabaseEngine().equalsIgnoreCase("oracle"))
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) ORDER BY " + sortProperty + " " + direction + ") su WHERE ROWNUM <= " + (offset + limit) + " ) WHERE rnum > " + offset + " AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
else
{
String oqlString = "CALL SQL SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM ( SELECT su.userName,su.password,su.firstName,su.lastName,su.email,su.source,su.isActive,su.modifiedDateTime, ROWNUM rnum FROM ( SELECT userName,password,firstName,lastName,email,source,isActive,modifiedDateTime FROM cmSystemUser su where userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) ORDER BY " + sortProperty + " " + direction + ") su ) AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
}
else
{
if(offset != null || limit != null)
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from cmSystemUser su where su.userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) ORDER BY su." + sortProperty + " " + direction + " limit " + offset + "," + limit + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
else
{
String oqlString = "CALL SQL select userName,password,firstName,lastName,email,source,isActive,modifiedDateTime from (select su.* from cmSystemUser su where su.userName NOT IN (SELECT userName from " + connectionTableName + " where " + foreignKey + " = $1) ORDER BY su." + sortProperty + " " + direction + ") pagedSystemUser AS org.infoglue.cms.entities.management.impl.simple.SystemUserImpl";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
}
}
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
SystemUser extranetUser = (SystemUser)results.next();
filteredList.add(extranetUser.getValueObject());
}
results.close();
oql.close();
return filteredList;
}
public Integer getFilteredSystemUserCount(String roleName, String groupName, String searchString, Database db) throws SystemException, Bug, Exception
{
Integer count = 0;
String connectionTableName = "cmSystemUserRole";
if(roleName == null)
connectionTableName = "cmSystemUserGroup";
String foreignKey = "roleName";
String foreignKeyValue = roleName;
if(roleName == null)
{
foreignKey = "groupName";
foreignKeyValue = groupName;
}
OQLQuery oql = null;
if(searchString != null && !searchString.equals(""))
{
String oqlString = "CALL SQL select count(su.userName) as count from " + connectionTableName + " sur, cmSystemUser su where sur.userName = su.userName AND sur." + foreignKey + " = $1 AND (su.firstName LIKE $2 OR su.lastName LIKE $3 OR su.userName LIKE $4 OR su.email LIKE $5 OR su.source LIKE $6) AS org.infoglue.cms.entities.management.TableCount";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL select count(su.userName) as count from " + connectionTableName + " sur, cmSystemUser su where sur.userName = su.userName AND sur." + foreignKey + " = $1 AS org.infoglue.cms.entities.management.TableCount";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
TableCount tableCount = (TableCount)results.next();
count = tableCount.getCount();
}
results.close();
oql.close();
return count;
}
public Integer getFilteredSystemUserCountInverted(String roleName, String groupName, String searchString, Database db) throws SystemException, Bug, Exception
{
Integer count = 0;
String connectionTableName = "cmSystemUserRole";
if(roleName == null)
connectionTableName = "cmSystemUserGroup";
String foreignKey = "roleName";
String foreignKeyValue = roleName;
if(roleName == null)
{
foreignKey = "groupName";
foreignKeyValue = groupName;
}
OQLQuery oql = null;
if(searchString != null && !searchString.equals(""))
{
String oqlString = "CALL SQL select count(su.userName) as count from cmSystemUser su where su.userName NOT IN (SELECT userName from " + connectionTableName + " WHERE " + connectionTableName + "." + foreignKey + " = $1) AND (su.firstName LIKE $2 OR su.lastName LIKE $3 OR su.userName LIKE $4 OR su.email LIKE $5 OR su.source LIKE $6) AS org.infoglue.cms.entities.management.TableCount";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
oql.bind("%" + searchString + "%");
}
else
{
String oqlString = "CALL SQL select count(su.userName) as count from cmSystemUser su where su.userName NOT IN (SELECT userName from " + connectionTableName + " WHERE " + connectionTableName + "." + foreignKey + " = $1) AS org.infoglue.cms.entities.management.TableCount";
oql = db.getOQLQuery(oqlString);
oql.bind(foreignKeyValue);
}
QueryResults results = oql.execute(Database.READONLY);
while (results.hasMore())
{
TableCount tableCount = (TableCount)results.next();
count = tableCount.getCount();
}
results.close();
oql.close();
return count;
}
/*
* CREATE
*
*/
public SystemUserVO create(SystemUserVO systemUserVO) throws ConstraintException, SystemException
{
if(CmsPropertyHandler.getUsePasswordEncryption())
{
String password = systemUserVO.getPassword();
try
{
byte[] encryptedPassRaw = DigestUtils.sha(password);
String encryptedPass = new String(Base64.encodeBase64(encryptedPassRaw), "ASCII");
password = encryptedPass;
systemUserVO.setPassword(password);
}
catch (Exception e)
{
logger.error("Error generating password:" + e.getMessage());
}
}
SystemUser systemUser = new SystemUserImpl();
systemUser.setValueObject(systemUserVO);
systemUser = (SystemUser) createEntity(systemUser);
return systemUser.getValueObject();
}
/*
* CREATE
*
*/
public SystemUser create(SystemUserVO systemUserVO, Database db) throws ConstraintException, SystemException, Exception
{
if(CmsPropertyHandler.getUsePasswordEncryption())
{
String password = systemUserVO.getPassword();
try
{
byte[] encryptedPassRaw = DigestUtils.sha(password);
String encryptedPass = new String(Base64.encodeBase64(encryptedPassRaw), "ASCII");
password = encryptedPass;
systemUserVO.setPassword(password);
}
catch (Exception e)
{
logger.error("Error generating password:" + e.getMessage());
}
}
SystemUser systemUser = new SystemUserImpl();
systemUser.setValueObject(systemUserVO);
systemUser = (SystemUser) createEntity(systemUser, db);
return systemUser;
}
/*
* DELETE
*
*/
public void delete(String userName) throws ConstraintException, SystemException
{
Database db = CastorDatabaseService.getDatabase();
ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
SystemUser systemUser = null;
beginTransaction(db);
try
{
//add validation here if needed
delete(userName, db);
//If any of the validations or setMethods reported an error, we throw them up now before create.
ceb.throwIfNotEmpty();
commitTransaction(db);
}
catch(ConstraintException ce)
{
logger.warn("An error occurred so we should not completes the transaction:" + ce, ce);
rollbackTransaction(db);
throw ce;
}
catch(Exception e)
{
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
/*
* DELETE
*
*/
public void delete(String userName, Database db) throws ConstraintException, SystemException, Exception
{
deleteRoles(userName, null);
deleteGroups(userName, null);
deleteEntity(SystemUserImpl.class, userName, db);
}
/**
* Delete all roles for a user
* @throws Exception
*/
public void deleteRoles(String userName, Set<String> roleNamesToKeep/*, Database db*/) throws SystemException, Bug, Exception
{
Database db = CastorDatabaseService.getDatabase();
beginTransaction(db);
try
{
deleteRoles(userName, roleNamesToKeep, db);
commitTransaction(db);
}
catch(Exception e)
{
e.printStackTrace();
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
/**
* Delete all roles for a user
* @throws Exception
*/
public void deleteRoles(String userName, Set<String> roleNamesToKeep, Database db) throws SystemException, Bug, Exception
{
OQLQuery oql = db.getOQLQuery( "SELECT sur FROM org.infoglue.cms.entities.management.impl.simple.SystemUserRoleImpl sur WHERE sur.userName = $1");
oql.bind(userName);
QueryResults results = oql.execute();
while (results.hasMore())
{
SystemUserRoleImpl sur = (SystemUserRoleImpl)results.nextElement();
if(roleNamesToKeep != null && roleNamesToKeep.contains(sur.getRoleName()))
{
logger.info("Keeping " + sur.getUserName() + "/" + sur.getRoleName());
roleNamesToKeep.remove(sur.getRoleName());
}
else
{
logger.info("Deleting " + sur.getUserName() + "/" + sur.getRoleName());
db.remove(sur);
}
}
results.close();
oql.close();
}
/**
* Delete all roles for a user
* @throws Exception
*/
public void deleteGroups(String userName, Set<String> groupNamesToKeep) throws SystemException, Bug, Exception
{
Database db = CastorDatabaseService.getDatabase();
beginTransaction(db);
try
{
deleteGroups(userName, groupNamesToKeep, db);
commitTransaction(db);
}
catch(Exception e)
{
e.printStackTrace();
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
/**
* Delete all roles for a user
* @throws Exception
*/
public void deleteGroups(String userName, Set<String> groupNamesToKeep, Database db) throws SystemException, Bug, Exception
{
OQLQuery oql = db.getOQLQuery( "SELECT sur FROM org.infoglue.cms.entities.management.impl.simple.SystemUserGroupImpl sur WHERE sur.userName = $1");
oql.bind(userName);
QueryResults results = oql.execute();
while (results.hasMore())
{
SystemUserGroupImpl sur = (SystemUserGroupImpl)results.nextElement();
if(groupNamesToKeep != null && groupNamesToKeep.contains(sur.getGroupName()))
{
logger.info("Keeping " + sur.getUserName() + "/" + sur.getGroupName());
groupNamesToKeep.remove(sur.getGroupName());
}
else
{
logger.info("Deleting " + sur.getUserName() + "/" + sur.getGroupName());
db.remove(sur);
}
}
results.close();
oql.close();
}
public SystemUserVO update(SystemUserVO systemUserVO) throws ConstraintException, SystemException
{
return (SystemUserVO) updateEntity(SystemUserImpl.class, (BaseEntityVO) systemUserVO);
}
public SystemUserVO update(SystemUserVO systemUserVO, String[] roleNames, String[] groupNames) throws ConstraintException, SystemException, Exception
{
/*
if(roleNames != null)
deleteRoles(systemUserVO.getUserName());
if(groupNames != null)
deleteGroups(systemUserVO.getUserName());
*/
Database db = CastorDatabaseService.getDatabase();
SystemUser systemUser = null;
beginTransaction(db);
try
{
systemUser = update(systemUserVO, roleNames, groupNames, db);
commitTransaction(db);
}
catch(ConstraintException ce)
{
ce.printStackTrace();
logger.warn("An error occurred so we should not completes the transaction:" + ce, ce);
rollbackTransaction(db);
throw ce;
}
catch(Exception e)
{
e.printStackTrace();
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
return systemUser.getValueObject();
}
public SystemUser update(SystemUserVO systemUserVO, String[] roleNames, String[] groupNames, Database db) throws Bug, Exception
{
Set<String> roleNamesSet = null;
Set<String> groupNamesSet = null;
if(roleNames != null)
{
List<String> roleNamesList = Arrays.asList(roleNames);
roleNamesSet = new HashSet<String>(roleNamesList);
deleteRoles(systemUserVO.getUserName(), roleNamesSet, db);
}
if(groupNames != null)
{
List<String> groupNamesList = Arrays.asList(groupNames);
groupNamesSet = new HashSet<String>(groupNamesList);
deleteGroups(systemUserVO.getUserName(), groupNamesSet, db);
}
SystemUser systemUser = getSystemUserWithName(systemUserVO.getUserName(), db);
systemUserVO.setUserName(systemUser.getUserName());
systemUserVO.setPassword(systemUser.getPassword());
systemUser.setValueObject(systemUserVO);
if(roleNames != null)
{
for (String roleName : roleNamesSet)
{
if(logger.isInfoEnabled())
logger.info("Trying to create:" + systemUserVO.getUserName() + "/" + roleName);
try
{
SystemUserRoleImpl userRole = new SystemUserRoleImpl();
userRole.setUserName(""+systemUserVO.getUserName());
userRole.setRoleName(roleName);
db.create(userRole);
}
catch (PersistenceException e)
{
e.printStackTrace();
}
}
}
if(groupNames != null)
{
for (String groupName : groupNamesSet)
{
if(logger.isInfoEnabled())
logger.info("Trying to create:" + systemUserVO.getUserName() + "/" + groupName);
try
{
SystemUserGroupImpl userGroup = new SystemUserGroupImpl();
userGroup.setUserName(""+systemUserVO.getUserName());
userGroup.setGroupName(groupName);
db.create(userGroup);
}
catch (PersistenceException e)
{
e.printStackTrace();
}
}
}
return systemUser;
}
public SystemUserVO update(SystemUserVO systemUserVO, String oldPassword, String[] roleNames, String[] groupNames) throws ConstraintException, SystemException, Exception
{
/*
if(roleNames != null)
{
List<String> roleNamesList = Arrays.asList(roleNames);
Set<String> roleNamesSet = new HashSet<String>(roleNamesList);
deleteRoles(systemUserVO.getUserName(), roleNamesSet, db);
}
if(groupNames != null)
{
List<String> groupNamesList = Arrays.asList(groupNames);
Set<String> groupNamesSet = new HashSet<String>(groupNamesList);
deleteGroups(systemUserVO.getUserName(), groupNamesSet, db);
}
*/
Database db = CastorDatabaseService.getDatabase();
ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
SystemUser systemUser = null;
beginTransaction(db);
try
{
systemUser = update(systemUserVO, oldPassword, roleNames, groupNames, db);
commitTransaction(db);
}
catch(ConstraintException ce)
{
logger.warn("An error occurred so we should not completes the transaction:" + ce, ce);
rollbackTransaction(db);
throw ce;
}
catch(Exception e)
{
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
return systemUser.getValueObject();
}
public SystemUser update(SystemUserVO systemUserVO, String oldPassword, String[] roleNames, String[] groupNames, Database db) throws ConstraintException, SystemException, Exception
{
logger.info("systemUserVO:" + systemUserVO.getUserName());
logger.info("oldPassword:" + oldPassword);
logger.info("newPassword:" + systemUserVO.getPassword());
logger.info("roleNames:" + roleNames);
logger.info("groupNames:" + groupNames);
if(CmsPropertyHandler.getUsePasswordEncryption())
{
String password = systemUserVO.getPassword();
try
{
byte[] encryptedPassRaw = DigestUtils.sha(password);
String encryptedPass = new String(Base64.encodeBase64(encryptedPassRaw), "ASCII");
password = encryptedPass;
systemUserVO.setPassword(password);
byte[] encryptedOldPasswordRaw = DigestUtils.sha(oldPassword);
String encryptedOldPassword = new String(Base64.encodeBase64(encryptedOldPasswordRaw), "ASCII");
oldPassword = encryptedOldPassword;
}
catch (Exception e)
{
logger.error("Error generating password:" + e.getMessage());
}
}
SystemUser systemUser = getSystemUser(db, systemUserVO.getUserName(), oldPassword);
if(systemUser == null)
throw new SystemException("Wrong user or password.");
systemUserVO.setUserName(systemUser.getUserName());
Set<String> roleNamesSet = null;
Set<String> groupNamesSet = null;
if(roleNames != null)
{
List<String> roleNamesList = Arrays.asList(roleNames);
roleNamesSet = new HashSet<String>(roleNamesList);
deleteRoles(systemUserVO.getUserName(), roleNamesSet, db);
}
if(groupNames != null)
{
List<String> groupNamesList = Arrays.asList(groupNames);
groupNamesSet = new HashSet<String>(groupNamesList);
deleteGroups(systemUserVO.getUserName(), groupNamesSet, db);
}
if(roleNamesSet != null)
{
for (String roleName : roleNamesSet)
{
logger.info("Adding roleName:" + roleName);
RoleController.getController().addUser(roleName, systemUser.getUserName(), db);
}
}
if(groupNamesSet != null)
{
for (String groupName : groupNamesSet)
{
logger.info("Adding group:" + groupName);
GroupController.getController().addUser(groupName, systemUser.getUserName(), db);
}
}
//systemUserVO.setPassword(systemUser.getPassword());
systemUser.setValueObject(systemUserVO);
return systemUser;
}
public void updatePassword(String userName) throws ConstraintException, SystemException
{
Database db = CastorDatabaseService.getDatabase();
ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
beginTransaction(db);
try
{
updatePassword(userName, db);
commitTransaction(db);
}
catch(Exception e)
{
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
public void updatePassword(String userName, Database db) throws ConstraintException, SystemException, Exception
{
SystemUser systemUser = getSystemUserWithName(userName, db);
String newPassword = PasswordGenerator.generate();
String password = newPassword;
if(CmsPropertyHandler.getUsePasswordEncryption())
{
try
{
byte[] encryptedPassRaw = DigestUtils.sha(password);
String encryptedPass = new String(Base64.encodeBase64(encryptedPassRaw), "ASCII");
password = encryptedPass;
}
catch (Exception e)
{
logger.error("Error generating password:" + e.getMessage());
}
}
systemUser.setPassword(password);
StringBuffer sb = new StringBuffer();
sb.append("<div><h2>Password changed</h2></div>");
sb.append("<div>CMS notification: You or an administrator have requested a new password for your account (" + userName + "). <br/>");
sb.append("<br/>");
sb.append("The new password is '" + newPassword + "'.<br/>");
sb.append("<br/>");
sb.append("Please notify the administrator if this does not work. <br/>");
sb.append("<br/>");
sb.append("-----------------------------------------------------------------------<br/>");
sb.append("This email was automatically generated and the sender is the CMS-system. <br/>");
sb.append("Do not reply to this email. </div>");
String systemEmailSender = CmsPropertyHandler.getSystemEmailSender();
if(systemEmailSender == null || systemEmailSender.equalsIgnoreCase(""))
systemEmailSender = "InfoGlueCMS@" + CmsPropertyHandler.getMailSmtpHost();
try
{
MailServiceFactory.getService().send(systemEmailSender, systemUser.getEmail(), null, "InfoGlue Information - Password changed!!", sb.toString());
}
catch(Exception e)
{
logger.error("The notification was not sent to [" + systemEmailSender + ", " + systemUser.getEmail() + "]. Reason:" + e.getMessage(), e);
}
}
public void updateAnonymousPassword(String userName) throws ConstraintException, SystemException
{
Database db = CastorDatabaseService.getDatabase();
beginTransaction(db);
try
{
updateAnonymousPassword(userName, db);
commitTransaction(db);
}
catch(Exception e)
{
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
public void updateAnonymousPassword(String userName, Database db) throws ConstraintException, SystemException, Exception
{
SystemUser systemUser = getSystemUserWithName(userName, db);
String newPassword = "anonymous";
String password = newPassword;
if(CmsPropertyHandler.getUsePasswordEncryption())
{
try
{
byte[] encryptedPassRaw = DigestUtils.sha(password);
String encryptedPass = new String(Base64.encodeBase64(encryptedPassRaw), "ASCII");
password = encryptedPass;
}
catch (Exception e)
{
logger.error("Error generating password:" + e.getMessage());
}
}
systemUser.setPassword(password);
}
public void updatePassword(String userName, String oldPassword, String newPassword) throws ConstraintException, SystemException
{
Database db = CastorDatabaseService.getDatabase();
ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
beginTransaction(db);
try
{
//If any of the validations or setMethods reported an error, we throw them up now before create.
ceb.throwIfNotEmpty();
updatePassword(userName, oldPassword, newPassword, db);
commitTransaction(db);
}
catch(ConstraintException ce)
{
rollbackTransaction(db);
throw ce;
}
catch(Exception e)
{
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
public void updatePassword(String userName, String oldPassword, String newPassword, Database db) throws ConstraintException, SystemException, Exception
{
if(newPassword == null)
throw new ConstraintException("SystemUser.newPassword", "301");
if(CmsPropertyHandler.getUsePasswordEncryption())
{
try
{
byte[] encryptedPassRaw = DigestUtils.sha(newPassword);
String encryptedPass = new String(Base64.encodeBase64(encryptedPassRaw), "ASCII");
newPassword = encryptedPass;
byte[] encryptedOldPasswordRaw = DigestUtils.sha(oldPassword);
String encryptedOldPass = new String(Base64.encodeBase64(encryptedOldPasswordRaw), "ASCII");
oldPassword = encryptedOldPass;
}
catch (Exception e)
{
logger.error("Error generating password:" + e.getMessage());
}
}
SystemUser systemUser = getSystemUser(db, userName, oldPassword);
if(systemUser == null)
throw new ConstraintException("SystemUser.oldPassword", "310");
systemUser.setPassword(newPassword);
}
private void updateVersionModifierOnContentVersions(String currentModifier, String newModifier, Database db) throws PersistenceException
{
OQLQuery oql = db.getOQLQuery( "SELECT cv FROM org.infoglue.cms.entities.content.impl.simple.SmallestContentVersionImpl cv WHERE cv.versionModifier = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing version modifier from '" + currentModifier + "' to '" + newModifier + "' for number of ContentVerison: " + results.size());
}
while (results.hasMore())
{
SmallestContentVersionImpl cv = (SmallestContentVersionImpl)results.nextElement();
cv.setVersionModifier(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing version modifier from '" + currentModifier + "' to '" + newModifier + "' for ContentVerison with ID: " + cv.getContentVersionId());
}
}
results.close();
oql.close();
}
private void updateVersionModifierOnSiteNodeVersions(String currentModifier, String newModifier, Database db) throws PersistenceException
{
OQLQuery oql = db.getOQLQuery( "SELECT snv FROM org.infoglue.cms.entities.structure.impl.simple.SmallSiteNodeVersionImpl snv WHERE snv.versionModifier = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing version modifier from '" + currentModifier + "' to '" + newModifier + "' for number of SiteNodeVersions: " + results.size());
}
while (results.hasMore())
{
SmallSiteNodeVersionImpl snv = (SmallSiteNodeVersionImpl)results.nextElement();
snv.setVersionModifier(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing version modifier from '" + currentModifier + "' to '" + newModifier + "' for SiteNodeVersion with ID: " + snv.getSiteNodeVersionId());
}
}
results.close();
oql.close();
}
private void updateCreatorOnSiteNodes(String currentModifier, String newModifier, Database db) throws PersistenceException
{
OQLQuery oql = db.getOQLQuery( "SELECT sn FROM org.infoglue.cms.entities.structure.impl.simple.SmallSiteNodeImpl sn WHERE sn.creator = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for number of SiteNodes: " + results.size());
}
while (results.hasMore())
{
SmallSiteNodeImpl sn = (SmallSiteNodeImpl)results.nextElement();
sn.setCreator(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for SiteNode with ID: " + sn.getSiteNodeId());
}
}
results.close();
oql.close();
}
private void updateCreatorOnContents(String currentModifier, String newModifier, Database db) throws PersistenceException
{
OQLQuery oql = db.getOQLQuery( "SELECT c FROM org.infoglue.cms.entities.content.impl.simple.ContentImpl c WHERE c.creator = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for number of Contents: " + results.size());
}
while (results.hasMore())
{
ContentImpl c = (ContentImpl)results.nextElement();
c.setCreator(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for Content with ID: " + c.getContentId());
}
}
results.close();
oql.close();
}
private void updateCreatorOnWorkflowEvents(String currentModifier, String newModifier, Database db) throws PersistenceException
{
OQLQuery oql = db.getOQLQuery( "SELECT e FROM org.infoglue.cms.entities.workflow.impl.simple.EventImpl e WHERE e.creator = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for number of Events: " + results.size());
}
while (results.hasMore())
{
EventImpl e = (EventImpl)results.nextElement();
e.setCreator(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for Event with ID: " + e.getEventId());
}
}
results.close();
oql.close();
}
/**
* @throws NullPointerException Thrown if currentModifier is null
*/
private void updateCreatorOnPublications(String currentModifier, String newModifier, Database db) throws PersistenceException, NullPointerException
{
OQLQuery oql = db.getOQLQuery( "SELECT p FROM org.infoglue.cms.entities.publishing.impl.simple.PublicationImpl p WHERE p.publisher = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for number of Publications: " + results.size());
}
while (results.hasMore())
{
PublicationImpl p = (PublicationImpl)results.nextElement();
p.setPublisher(newModifier);
for (PublicationDetailImpl pd : (Collection<PublicationDetailImpl>)p.getPublicationDetails())
{
if (currentModifier.equals(pd.getCreator()))
{
pd.setCreator(newModifier);
}
}
if (logger.isDebugEnabled())
{
logger.debug("Changing creator from '" + currentModifier + "' to '" + newModifier + "' for Publication with ID: " + p.getPublicationId());
}
}
results.close();
oql.close();
}
private void updateModifierOnRedirects(String currentModifier, String newModifier, Database db) throws PersistenceException, ConstraintException
{
OQLQuery oql = db.getOQLQuery( "SELECT r FROM org.infoglue.cms.entities.management.impl.simple.RedirectImpl r WHERE r.modifier = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing modifier from '" + currentModifier + "' to '" + newModifier + "' for number of Redirects: " + results.size());
}
while (results.hasMore())
{
RedirectImpl r = (RedirectImpl)results.nextElement();
r.setModifier(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing modifier from '" + currentModifier + "' to '" + newModifier + "' for Redirect with ID: " + r.getRedirectId());
}
}
results.close();
oql.close();
}
private void updateUserNameOnUserProperties(String currentModifier, String newModifier, Database db) throws PersistenceException, ConstraintException
{
OQLQuery oql = db.getOQLQuery( "SELECT x FROM org.infoglue.cms.entities.management.impl.simple.UserPropertiesImpl x WHERE x.userName = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for number of UserProperties: " + results.size());
}
while (results.hasMore())
{
UserPropertiesImpl up = (UserPropertiesImpl)results.nextElement();
up.setUserName(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for UserProperty with ID: " + up.getUserPropertiesId());
}
}
results.close();
oql.close();
}
private void updateUserNameOnUserPropertyDefinitions(String currentModifier, String newModifier, Database db) throws PersistenceException, ConstraintException
{
OQLQuery oql = db.getOQLQuery( "SELECT x FROM org.infoglue.cms.entities.management.impl.simple.UserContentTypeDefinitionImpl x WHERE x.userName = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for number of UserContentTypeDefinitions: " + results.size());
}
while (results.hasMore())
{
UserContentTypeDefinitionImpl uctd = (UserContentTypeDefinitionImpl)results.nextElement();
uctd.setUserName(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for UserContentTypeDefinition with ID: " + uctd.getUserContentTypeDefinitionId());
}
}
results.close();
oql.close();
}
private void updateUserNameOnFormEntries(String currentModifier, String newModifier, Database db) throws PersistenceException, ConstraintException
{
OQLQuery oql = db.getOQLQuery( "SELECT x FROM org.infoglue.cms.entities.management.impl.simple.FormEntryImpl x WHERE x.userName = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for number of FormEntries: " + results.size());
}
while (results.hasMore())
{
FormEntryImpl fe = (FormEntryImpl)results.nextElement();
fe.setUserName(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for FormEntry with ID: " + fe.getId());
}
}
results.close();
oql.close();
}
private void updateUserNameOnSubscriptions(String currentModifier, String newModifier, Database db) throws PersistenceException, ConstraintException
{
OQLQuery oql = db.getOQLQuery( "SELECT x FROM org.infoglue.cms.entities.management.impl.simple.SubscriptionImpl x WHERE x.userName = $1");
oql.bind(currentModifier);
QueryResults results = oql.execute();
if (logger.isInfoEnabled())
{
logger.info("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for number of Subscriptions: " + results.size());
}
while (results.hasMore())
{
SubscriptionImpl fe = (SubscriptionImpl)results.nextElement();
fe.setUserName(newModifier);
if (logger.isDebugEnabled())
{
logger.debug("Changing userName from '" + currentModifier + "' to '" + newModifier + "' for Subscription with ID: " + fe.getId());
}
}
results.close();
oql.close();
}
public void changeUserName(String userName, String newUserName) throws ConstraintException, SystemException
{
Database db = null;//CastorDatabaseService.getDatabase();
ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
try
{
db = CastorDatabaseService.getDatabase();
beginTransaction(db);
//If any of the validations or setMethods reported an error, we throw them up now before create.
ceb.throwIfNotEmpty();
changeUserName(userName, newUserName, db);
commitTransaction(db);
}
catch(ConstraintException ce)
{
rollbackTransaction(db);
throw ce;
}
catch(Exception e)
{
logger.error("An error occurred so we should not completes the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
}
public void changeUserName(String userName, String newUserName, Database db) throws ConstraintException, SystemException, Exception
{
if (getReadOnlySystemUserWithName(newUserName, db) != null)
{
throw new SystemException("Cannot change user name to '" + newUserName + "'. The user already exists.");
}
SystemUser user = getSystemUserWithName(userName, db);
if (user == null)
{
throw new SystemException("Cannot change user name for '" + userName + "'. The user does not exist.");
}
else
{
logger.info("Changing user name for user: '" + userName + "' to '" + newUserName + "'");
SystemUserVO newSystemUserVO = user.getValueObject();
newSystemUserVO.setUserName(newUserName);
SystemUser newSystemUser = new SystemUserImpl();
newSystemUser.setValueObject(newSystemUserVO);
newSystemUser = (SystemUser) createEntity(newSystemUser, db);
// Add roles
List<RoleVO> roleVOs = RoleController.getController().getRoleVOList(userName, db);
logger.info("Adding roles in user name change. Number of roles: " + roleVOs.size());
for (RoleVO roleVO : roleVOs)
{
if (logger.isDebugEnabled())
{
logger.debug("Handling role (" + roleVO.getRoleName() + ") in user name change. User name, from: '" + userName + "', to '" + newUserName + "'");
}
RoleController.getController().addUser(roleVO.getRoleName(), newSystemUser.getUserName(), db);
RoleController.getController().removeUser(roleVO.getRoleName(), userName, db);
}
// Add groups
List<GroupVO> groupVOs = GroupController.getController().getGroupVOList(userName, db);
logger.info("Adding groups in user name change. Number of groups: " + groupVOs.size());
for (GroupVO groupVO : groupVOs)
{
if (logger.isDebugEnabled())
{
logger.debug("Handling group (" + groupVO.getGroupName() + ") in user name change. User name, from: '" + userName + "', to '" + newUserName + "'");
}
GroupController.getController().addUser(groupVO.getGroupName(), newSystemUser.getUserName(), db);
GroupController.getController().removeUser(groupVO.getGroupName(), userName, db);
}
// Add access rights
@SuppressWarnings("unchecked")
List<AccessRightUser> accessRightUserList = AccessRightController.getController().getAccessRightUserList(userName, db);
logger.debug("Updating access rights for user name change. Number of access rights: " + accessRightUserList.size());
Iterator<AccessRightUser> i = accessRightUserList.iterator();
while(i.hasNext())
{
AccessRightUser accessRightUser = i.next();
//accessRightUser.setUserName(newUserName);
AccessRight accessRight = accessRightUser.getAccessRight();
AccessRightUserVO accessRightUserVO = new AccessRightUserVO();
accessRightUserVO.setUserName(newSystemUser.getUserName());
AccessRightUser newAccessRightUser = AccessRightController.getController().createAccessRightUser(db, accessRightUserVO, accessRight);
accessRight.getUsers().add(newAccessRightUser);
deleteEntity(AccessRightUserImpl.class, accessRightUser.getAccessRightUserId(), db);
}
// Update String references on entities
updateVersionModifierOnContentVersions(userName, newUserName, db);
updateVersionModifierOnSiteNodeVersions(userName, newUserName, db);
updateCreatorOnContents(userName, newUserName, db);
updateCreatorOnSiteNodes(userName, newUserName, db);
updateCreatorOnWorkflowEvents(userName, newUserName, db);
updateCreatorOnPublications(userName, newUserName, db);
updateModifierOnRedirects(userName, newUserName, db);
updateUserNameOnUserProperties(userName, newUserName, db);
updateUserNameOnUserPropertyDefinitions(userName, newUserName, db);
updateUserNameOnFormEntries(userName, newUserName, db);
updateUserNameOnSubscriptions(userName, newUserName, db);
// Remove old SystemUser
deleteEntity(SystemUserImpl.class, userName, db);
}
}
/**
* This is a method that gives the user back an newly initialized ValueObject for this entity that the controller
* is handling.
*/
public BaseEntityVO getNewVO()
{
return new SystemUserVO();
}
}