/**
* Copyright (c) 2009 Juwi MacMillan Group GmbH
*
* 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.
*/
// license-header java merge-point
/**
* This is only generated once! It will never be overwritten.
* You can (and have to!) safely modify it by hand.
*/
package de.juwimm.cms.authorization.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.EJBException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import de.juwimm.cms.authorization.vo.GroupValue;
import de.juwimm.cms.authorization.vo.UserLoginValue;
import de.juwimm.cms.authorization.vo.UserUnitsGroupsValue;
import de.juwimm.cms.common.UserRights;
import de.juwimm.cms.exceptions.UserException;
import de.juwimm.cms.model.SequenceHbmDao;
import de.juwimm.cms.model.SiteHbm;
import de.juwimm.cms.model.UnitHbm;
import de.juwimm.cms.remote.helper.AuthenticationHelper;
import de.juwimm.cms.vo.UnitSlimValue;
import de.juwimm.cms.vo.UnitValue;
/**
* @see de.juwimm.cms.authorization.model.UserHbm
*/
public class UserHbmDaoImpl extends de.juwimm.cms.authorization.model.UserHbmDaoBase {
private static Log log = LogFactory.getLog(UserHbmDaoImpl.class);
@Autowired
private SequenceHbmDao sequenceHbmDao;
@Override
public UserHbm load(String userId) {
return super.load(userId);
}
@Override
public UserHbm create(UserHbm userHbm) {
if (userHbm.getUserId() == null) {
try {
Integer id = sequenceHbmDao.getNextSequenceNumber("user.user_id");
userHbm.setUserId(String.valueOf(id));
} catch (Exception e) {
log.error("Error creating primary key", e);
}
} else {
userHbm.setUserId(userHbm.getUserId().toLowerCase());
}
return super.create(userHbm);
}
/**
* Get all groups of this user.<br>
* <b>PLEASE NOTE:</b><br>
* This Method only returns the groups, the user belongs to regarding the
* active site, the calling<br>
* user is actually in.
*
* @return All groups the User belongs to, dependend to the active site the
* logged in user belongs.
*/
@Override
protected Collection handleGetGroups4ActiveSite(UserHbm user) throws Exception {
if (user.getActiveSite() != null) {
Integer siteId = user.getActiveSite().getSiteId();
Collection coll = null;
if (user.isMasterRoot()) {
coll = getGroupHbmDao().findAll(siteId);
} else {
coll = getGroupHbmDao().findByUserAndSite(user.getUserId(), siteId);
}
return coll;
}
return new ArrayList();
}
@Override
protected Collection handleGetUnits4ActiveSite(UserHbm user) throws Exception {
Integer siteId = null;
try {
UserHbm userMe = load(AuthenticationHelper.getUserName());
siteId = userMe.getActiveSite().getSiteId();
} catch (Exception exe) {
log.error("Error while getting the actual siteid inside getRoles(), message: " + exe.getMessage(), exe);
}
Collection coll = null;
try {
if (user.isMasterRoot() || isInRole(user, "siteRoot", user.getActiveSite())) {
coll = getUnitHbmDao().findAll(siteId);
} else {
coll = getUnitHbmDao().findByUserAndSite(user.getUserId(), siteId);
}
} catch (Exception exe) {
log.error("Unknown error catched during getGroups(), message: " + exe.getMessage(), exe);
}
return coll;
}
@Override
protected void handleAddGroup(GroupHbm group, String principal, String username) throws Exception {
try {
UserHbm userPrincipal = load(principal);
UserHbm userToAdd = load(username);
if (group.getSite().equals(userPrincipal.getActiveSite())) {
userToAdd.getGroups().add(group);
group.getUsers().add(userToAdd);
} else {
throw new EJBException(principal + " has tried to add a Group to a user that does not belong to the activeSite");
}
} catch (Exception e) {
throw new UserException(e.getMessage());
}
}
@Override
protected UserLoginValue handleGetUserLoginValue(UserHbm user) throws Exception {
UserLoginValue value = new UserLoginValue();
try {
value.setUser(user.getUserValue());
value.setSiteConfigXML(user.getConfigXML());
if (user.getActiveSite() != null) {
value.setSiteName(user.getActiveSite().getName());
Collection<UnitHbm> units = getUnits4ActiveSite(user);
if (units != null) {
UnitValue[] uv = new UnitValue[units.size()];
int i = 0;
for (UnitHbm unit : units) {
uv[i++] = getUnitHbmDao().getDao(unit);
}
value.setUnits(uv);
}
}
} catch (Exception e) {
throw new EJBException(e);
}
return value;
}
/**
* Get all roles of this user.<br>
* <b>PLEASE NOTE:</b><br>
* This Method only returns the roles, the user belongs to regarding the
* active site, the calling<br>
* user is actually in.
*
* @return All Roles the User belongs to, dependend to the active site the
* logged in user belongs.
*/
@Override
protected Collection handleGetRoles(UserHbm user, SiteHbm site) throws Exception {
Collection coll = null;
if (site != null) {
Integer siteId = site.getSiteId();
try {
if (user.isMasterRoot()) {
coll = getRoleHbmDao().findAll(siteId);
} else {
coll = getRoleHbmDao().findByUserAndSite(user.getUserId(), siteId);
}
} catch (Exception exe) {
log.error("Unknown error catched during getRoles()", exe);
}
}
return coll;
}
@Override
protected boolean handleIsInRole(UserHbm user, String role, SiteHbm site) throws Exception {
if (user.isMasterRoot()) {
return true;
}
Iterator it = getRoles(user, site).iterator();
while (it.hasNext()) {
RoleHbm roleHbm = (RoleHbm) it.next();
if (roleHbm.getRoleId().equals(role)) {
return true;
}
}
return false;
}
@Override
protected UserUnitsGroupsValue handleGetUserUnitsGroupsValue(UserHbm user) throws Exception {
UserUnitsGroupsValue uugv = new UserUnitsGroupsValue();
uugv.setUser(user.getUserValue());
Collection groupsList = getGroups4ActiveSite(user);
GroupValue[] gva = new GroupValue[groupsList.size()];
int i = 0;
Iterator it = groupsList.iterator();
while (it.hasNext()) {
GroupHbm group = (GroupHbm) it.next();
gva[i++] = group.getGroupValue();
}
uugv.setGroups(gva);
Collection unitsList = getUnits4ActiveSite(user);
UnitSlimValue[] usva = new UnitSlimValue[unitsList.size()];
i = 0;
it = unitsList.iterator();
while (it.hasNext()) {
UnitHbm unit = (UnitHbm) it.next();
usva[i++] = unit.getUnitSlimValue();
}
uugv.setUnits(usva);
return uugv;
}
@Override
protected boolean handleIsInUnit(Integer unitId, UserHbm user) throws Exception {
if (user.isMasterRoot()) {
return true;
}
boolean retVal = false;
if (isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())) {
retVal = true;
} else {
Iterator<UnitHbm> it = user.getUnits().iterator();
while (it.hasNext()) {
UnitHbm ul = it.next();
if (ul.getUnitId().equals(unitId)) {
retVal = true;
break;
}
}
}
return retVal;
}
@Override
@SuppressWarnings("unchecked")
public java.util.Collection findAll(final int transform, final java.lang.Integer siteId) {
return this.findAll(transform, "select u from de.juwimm.cms.authorization.model.UserHbm u inner join u.sites s where s.siteId = ?", siteId);
}
@Override
@SuppressWarnings("unchecked")
public java.util.Collection findAll(final int transform) {
return this.findAll(transform, "from de.juwimm.cms.authorization.model.UserHbm as userHbm");
}
@Override
@SuppressWarnings("unchecked")
public java.util.Collection findAll4Group(final int transform, final java.lang.Integer groupId) {
return this.findAll4Group(transform, "select u from de.juwimm.cms.authorization.model.UserHbm as u inner join u.groups g where g.groupId = ?", groupId);
}
@Override
@SuppressWarnings("unchecked")
public java.util.Collection findAll4Unit(final int transform, final java.lang.Integer unitId) {
return this.findAll4Unit(transform, "select u from de.juwimm.cms.authorization.model.UserHbm as u inner join u.units n where n.unitId = ?", unitId);
}
@Override
@SuppressWarnings("unchecked")
public java.util.Collection findAll4UnitAndGroup(final int transform, final java.lang.Integer unitId, final java.lang.Integer groupId) {
return this.findAll4UnitAndGroup(transform, "select u from de.juwimm.cms.authorization.model.UserHbm as u inner join u.units n inner join u.groups g where n.unitId = ? and g.groupId = ?", unitId, groupId);
}
@Override
@SuppressWarnings("unchecked")
public void remove(de.juwimm.cms.authorization.model.UserHbm userHbm) {
if (userHbm == null) {
throw new IllegalArgumentException("UserHbm.remove - 'userHbm' can not be null");
}
// TODO could that be made different?
Collection<de.juwimm.cms.authorization.model.GroupHbm> groups = userHbm.getGroups();
int[] groupIds = new int[groups.size()];
int i = 0;
for (GroupHbm group : groups) {
groupIds[i++] = group.getGroupId();
}
for (i = 0; i < groupIds.length; i++) {
userHbm.dropGroup(getGroupHbmDao().load(groupIds[i]));
}
// Collection<de.juwimm.cms.model.SiteHbm> sites = userHbm.getSites();
// int[] siteIds = new int[sites.size()];
// i=0;
// for(SiteHbm site : sites)
// {
// siteIds[i++] = site.getSiteId();
// }
// for(i=0; i<siteIds.length;i++)
// {
// //userHbm.drop
// }
super.remove(userHbm);
}
}