de.juwimm.cms.remote.UserServiceSpringImpl.java Source code

Java tutorial

Introduction

Here is the source code for de.juwimm.cms.remote.UserServiceSpringImpl.java

Source

/**
 * 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.remote;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;

import javax.ejb.CreateException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;

import de.juwimm.cms.authorization.JbossFlushAuthCache;
import de.juwimm.cms.authorization.model.GroupHbm;
import de.juwimm.cms.authorization.model.GroupHbmImpl;
import de.juwimm.cms.authorization.model.RoleHbm;
import de.juwimm.cms.authorization.model.UserHbm;
import de.juwimm.cms.authorization.model.UserHbmImpl;
import de.juwimm.cms.authorization.vo.GroupValue;
import de.juwimm.cms.authorization.vo.RoleValue;
import de.juwimm.cms.authorization.vo.UserUnitsGroupsValue;
import de.juwimm.cms.authorization.vo.UserValue;
import de.juwimm.cms.common.Constants;
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.TaskHbm;
import de.juwimm.cms.model.TaskHbmImpl;
import de.juwimm.cms.model.UnitHbm;
import de.juwimm.cms.model.ViewComponentHbm;
import de.juwimm.cms.remote.helper.AuthenticationHelper;
import de.juwimm.cms.vo.SiteValue;
import de.juwimm.cms.vo.TaskValue;
import de.juwimm.cms.vo.UnitValue;

/**
 * @see de.juwimm.cms.remote.UserServiceSpring
 * @author <a href="mailto:carsten.schalm@juwimm.com">Carsten Schalm</a> company
 *         Juwi|MacMillan Group Gmbh, Walsrode, Germany
 * @version $Id: UserServiceSpringImpl.java 12 2009-07-31 09:01:25Z
 *          rene.hertzfeldt $
 */
public class UserServiceSpringImpl extends UserServiceSpringBase {
    private static Log log = LogFactory.getLog(UserServiceSpringImpl.class);
    private final JbossFlushAuthCache authCache = new JbossFlushAuthCache();

    @Autowired
    private SequenceHbmDao sequenceHbmDao;

    /**
     * Creates a new user in the current site<br>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>createUser,
     * siteRoot</i>
     * 
     * @todo Currently a User will be created inside the Database. Here we need
     *       an abstraction layer for JAAS style of user creation.
     * @param userName
     *            The username
     * @param passwd
     *            The Password
     * @param firstName
     *            The first name of the newly created user
     * @param lastName
     *            The last name
     * @param email
     *            The email address for sending informational emails
     * @throws CreateException
     *             CreateException if the Username is already existent
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#createUser(java.lang.String,
     *      java.lang.String, java.lang.String, java.lang.String,
     *      java.lang.String, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    @Override
    protected void handleCreateUser(String userName, String passwd, String firstName, String lastName, String email,
            Integer initialUnitId) throws Exception {
        if (log.isDebugEnabled())
            log.debug("begin createUser");
        ArrayList<String> assertFields = new ArrayList<String>(6);
        if (userName == null || userName.equalsIgnoreCase(""))
            assertFields.add("user.userName");
        if (firstName == null || firstName.equalsIgnoreCase(""))
            assertFields.add("user.firstName");
        if (lastName == null || lastName.equalsIgnoreCase(""))
            assertFields.add("user.lastName");
        if (passwd == null || passwd.equalsIgnoreCase(""))
            assertFields.add("user.passwd");
        // Bug 4078 if (email == null || email.equalsIgnoreCase(""))
        // assertFields.add("user.email");
        if (assertFields.size() > 0) {
            StringBuffer list = new StringBuffer();
            for (int i = 0; i < assertFields.size(); i++) {
                if (i != 0) {
                    list.append(",");
                }
                list.append(assertFields.get(i));
            }
            throw new UserException("NeededFieldsMissingException" + list.toString());
        }
        try {
            UserHbm user = new UserHbmImpl();
            user.setUserId(userName);
            user.setFirstName(firstName);
            user.setLastName(lastName);
            user.setEmail(email);
            user = super.getUserHbmDao().create(user);
            if (initialUnitId != null && initialUnitId.intValue() != 0) {
                try {
                    UnitHbm unit = super.getUnitHbmDao().load(initialUnitId);
                    user.addUnit(unit);
                } catch (Exception exe) {
                    log.error("Can't attach User " + userName + " to Unit " + initialUnitId
                            + " while creating the User because of: " + exe.getMessage());
                    log.error("Error occured", exe);
                }
            }
            // adding new user to site of called user
            UserHbm caller = getUserHbmDao().load(AuthenticationHelper.getUserName());
            SiteHbm callerSite = caller.getActiveSite();
            user.setActiveSite(callerSite);
            user.getSites().add(callerSite);
            this.changePassword4User(user.getUserId(), passwd, passwd);
        } catch (Exception e) {
            throw new UserException(e.getMessage(), e);
        }
        if (log.isDebugEnabled()) {
            log.debug("end createUser");
        }
    }

    /**
     * Creates a new Task.<br>
     * You need to provide either the receiverGroup or the receiverUserId.
     * 
     * @param receiverUserId
     *            The UserName who should receive this Task
     * @param receiverRole
     *            If there is no ReceiverUserId given, this Task has been
     *            submitted to a Group of people. In this case this is a Group
     *            of people with this specified Rights inside the specified
     *            Unit.
     * @param unitId
     *            The Unit this Task belongs to. In general the active unit the
     *            user is actually in.
     * @param comment
     *            An comment regarding this Task
     * @param taskType
     *            The Tasktype as defined in
     * @see de.juwimm.cms.common.Constants#TASK_MESSAGE TASK_*
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#createTask(java.lang.String,
     *      java.lang.String, java.lang.Integer, java.lang.String, byte)
     */
    @Override
    protected Integer handleCreateTask(String receiverUserId, String receiverRole, Integer unitId, String comment,
            byte taskType) throws Exception {
        TaskHbm task = new TaskHbmImpl();

        TaskValue taskValue = new TaskValue();
        taskValue.setComment(comment);
        taskValue.setTaskType(taskType);
        taskValue.setCreationDate(new Date().getTime());
        task.setUnit(super.getUnitHbmDao().load(unitId));
        try {
            task.setSender(super.getUserHbmDao().load(AuthenticationHelper.getUserName()));
            if (receiverUserId != null) {
                UserHbm receiver = super.getUserHbmDao().load(receiverUserId);
                task.setReceiver(receiver);
                task.setTaskValue(taskValue);
                task = super.getTaskHbmDao().create(task);
            } else {
                taskValue.setReceiverRole(receiverRole);
                task.setTaskValue(taskValue);
                task = super.getTaskHbmDao().create(task);
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
        return task.getTaskId();
    }

    /**
     * Relates some ViewComponents to this Task.
     * 
     * @param taskId
     *            TaskId of the related Task
     * @param vcIds
     *            Integer Array of ViewComponents to relate.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#addViewComponentsToTask(java.lang.Integer,
     *      java.lang.Integer[])
     */
    @Override
    protected void handleAddViewComponentsToTask(Integer taskId, Integer[] vcIds) throws Exception {
        UserHbm user = null;
        TaskHbm task = null;
        try {
            user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            task = super.getTaskHbmDao().load(taskId);
            if (task != null) {

                if (!getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())
                        && !user.equals(task.getReceiver()) && !user.equals(task.getSender())
                        && !getUserHbmDao().isInRole(user, task.getReceiverRole(), user.getActiveSite())) {
                    throw new SecurityException("User is not responsible to change this Task. RECEIVER:"
                            + task.getReceiver() + " SENDER:" + task.getSender() + " RECEIVERROLE:"
                            + task.getReceiverRole() + " THIS USER:" + user.getUserId());
                }

                Collection<ViewComponentHbm> coll = task.getViewComponents();
                for (int i = 0; i < vcIds.length; i++) {
                    ViewComponentHbm vc = super.getViewComponentHbmDao().load(vcIds[i]);
                    coll.add(vc);
                }
                task.setViewComponents(coll);
            } else {
                log.warn("Task with Id " + taskId + " was not found");
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Removes some ViewComponents from this Task.
     * 
     * @param taskId
     *            TaskId of the related Task
     * @param vcIds
     *            Integer Array of ViewComponents to remove.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#removeViewComponentsFromTask(java.lang.Integer,
     *      java.lang.Integer[])
     */
    @Override
    protected void handleRemoveViewComponentsFromTask(Integer taskId, Integer[] vcIds) throws Exception {
        UserHbm user = null;
        TaskHbm task = null;
        try {
            user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            task = super.getTaskHbmDao().load(taskId);
            if (task != null) {
                if (!!getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())
                        && !user.equals(task.getReceiver()) && !user.equals(task.getSender())
                        && !!getUserHbmDao().isInRole(user, task.getReceiverRole(), user.getActiveSite())) {
                    throw new SecurityException("User is not responsible to change this Task. RECEIVER:"
                            + task.getReceiver() + " SENDER:" + task.getSender() + " RECEIVERROLE:"
                            + task.getReceiverRole() + " THIS USER:" + user.getUserId());
                }
                try {
                    Collection<ViewComponentHbm> coll = task.getViewComponents();
                    for (int i = 0; i < vcIds.length; i++) {
                        ViewComponentHbm vc = super.getViewComponentHbmDao().load(vcIds[i]);
                        coll.remove(vc);
                    }
                    task.setViewComponents(coll);
                } catch (Exception exe) {
                    log.error("Error occured", exe);
                }

            } else {
                log.warn("Task with Id " + taskId + " was not found");
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns all users regardings the active site the logged user is in or if
     * the logged in user is<br/>
     * only unitAdmin, all Users for all Units he is in.<br/>
     * The unitAdmin will not see SiteAdmins in his list, even they can see all
     * Units. <b>SECURITY INFORMATION:</b> Available only to: <i>siteRoot,
     * unitAdmin</i>
     * 
     * @return Returns all UserValue Objects in an Array. Is empty if nobody was
     *         found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllUser()
     */
    @Override
    protected UserValue[] handleGetAllUser() throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("begin getAllUser");
        }
        UserValue[] itarr = null;
        try {
            UserHbm user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())) {
                Collection coll = null;
                int siz = 0;
                coll = super.getUserHbmDao().findAll(user.getActiveSite().getSiteId());
                siz = coll.size();
                itarr = new UserValue[siz];
                if (siz > 0) {
                    Iterator it = coll.iterator();
                    for (int i = 0; i < siz; i++) {
                        itarr[i] = ((UserHbm) it.next()).getUserValue();
                    }
                }
            } else {
                Hashtable<String, UserValue> userMap = new Hashtable<String, UserValue>();
                Iterator unitsIt = user.getUnits().iterator();
                while (unitsIt.hasNext()) {
                    UnitHbm unit = (UnitHbm) unitsIt.next();
                    Collection users = unit.getUsers();
                    Iterator<UserHbm> userIt = users.iterator();
                    while (userIt.hasNext()) {
                        UserValue current = userIt.next().getUserValue();
                        userMap.put(current.getUserName(), current);
                    }
                }
                itarr = userMap.values().toArray(new UserValue[0]);
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
        return itarr;
    }

    /**
     * Returns all groups regardings the active site the logged user is in.<br>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>siteRoot</i>
     * 
     * @return Returns all GroupValue Objects in an Array. Is empty if nobody
     *         was found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllGroups()
     */
    @Override
    protected GroupValue[] handleGetAllGroups() throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("begin getAllGroups");
        }
        Collection coll = null;
        int siz = 0;
        try {
            UserHbm user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            coll = super.getGroupHbmDao().findAll(user.getActiveSite().getSiteId());
            siz = coll.size();
            GroupValue[] itarr = new GroupValue[siz];
            if (siz > 0) {
                Iterator it = coll.iterator();
                for (int i = 0; i < siz; i++) {
                    itarr[i] = ((GroupHbm) it.next()).getGroupValue();
                }
            }
            return itarr;
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns all groups users of this unit are member of.<br>
     * 
     * @return Returns all GroupValue Objects in an Array. Is empty if nobody
     *         was found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllGroupsUsedInUnit(java.lang.Integer)
     */
    @Override
    protected GroupValue[] handleGetAllGroupsUsedInUnit(Integer unitId) throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("begin getAllGroupsUsedInUnit");
        }
        Hashtable<Integer, GroupValue> groupsTable = new Hashtable<Integer, GroupValue>();
        try {
            UnitHbm unit = super.getUnitHbmDao().load(unitId);
            Iterator<UserHbm> usIt = unit.getUsers().iterator();
            UserHbm principal = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (log.isDebugEnabled()) {
                log.debug("Principal: " + principal);
            }
            UserHbm user = null;
            while (usIt.hasNext()) {
                user = usIt.next();
                Iterator<GroupHbm> grpIt = super.getUserHbmDao().getGroups4ActiveSite(user).iterator();
                GroupHbm grp = null;
                GroupValue gv = null;
                while (grpIt.hasNext()) {
                    grp = grpIt.next();
                    gv = grp.getGroupValue();
                    if (gv != null) {
                        groupsTable.put(gv.getGroupId(), gv);
                    }
                }
            }
        } catch (Exception e) {
            log.error("Error while getting groups for unit", e);
            throw new UserException(e.getMessage());
        }
        return groupsTable.values().toArray(new GroupValue[groupsTable.size()]);
    }

    /**
     * Creates a new Group<br>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>siteRoot</i>
     * 
     * @param groupName
     *            The name of the new Group
     * @return Returns the new created GroupValue
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#createGroup(java.lang.String)
     */
    @Override
    protected GroupValue handleCreateGroup(String groupName) throws Exception {
        try {
            UserHbm caller = getUserHbmDao().load(AuthenticationHelper.getUserName());
            GroupHbm temp = new GroupHbmImpl();
            temp.setGroupName(groupName);
            temp.setGroupId(sequenceHbmDao.getNextSequenceNumber("group.group_id"));
            temp.setSite(caller.getActiveSite());
            return super.getGroupHbmDao().create(temp).getGroupValue();
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Removes a Group<br>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>siteRoot</i>
     * 
     * @param groupId
     *            The Id of the Group
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#removeGroup(java.lang.Integer)
     */
    @Override
    protected void handleRemoveGroup(Integer groupId) throws Exception {
        try {
            super.getGroupHbmDao().remove(groupId);
            this.authCache.flushAuthCache();
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Updates a Group<br>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>siteRoot</i>
     * 
     * @param gv
     *            The GroupValue
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#updateGroup(de.juwimm.cms.authorization.vo.GroupValue)
     */
    @Override
    protected void handleUpdateGroup(GroupValue gv) throws Exception {
        try {
            GroupHbm gl = super.getGroupHbmDao().load(gv.getGroupId());
            gl.setGroupValue(gv);
            Set<RoleHbm> vec = new HashSet<RoleHbm>();
            try {
                for (int i = 0; i < gv.getRoles().length; i++) {
                    vec.add(super.getRoleHbmDao().load(gv.getRoles()[i].getRoleId()));
                }
            } catch (Exception e) {
                log.info("No Roles to set");
            }
            gl.setRoles(vec);
            this.authCache.flushAuthCache();
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns all roles.<br>
     * 
     * @return Returns all RoleValue Objects in an Array. Is empty if nobody was
     *         found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllRoles()
     */
    @Override
    protected RoleValue[] handleGetAllRoles() throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("begin getAllRoles");
        }
        Collection coll = null;
        int siz = 0;
        try {
            coll = super.getRoleHbmDao().findAll();
            siz = coll.size();
            RoleValue[] itarr = new RoleValue[siz];
            if (siz > 0) {
                Iterator it = coll.iterator();
                for (int i = 0; i < siz; i++) {
                    itarr[i] = ((RoleHbm) it.next()).getRoleValue();
                }
            }
            return itarr;
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns all users regardings the active site and the given Group.<br>
     * If the Group will be <b>null</b>, it will return all users. <b>SECURITY
     * INFORMATION:</b> Available only to: <i>siteRoot</i>
     * 
     * @param groupId
     *            The Group
     * @return Returns all UserValue Objects in an Array. Is empty if nobody was
     *         found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllUser4Group(java.lang.Integer)
     */
    @Override
    protected UserValue[] handleGetAllUser4Group(Integer groupId) throws Exception {
        if (groupId == null) {
            return getAllUser();
        }
        try {
            GroupHbm group = super.getGroupHbmDao().load(groupId);
            Collection coll = group.getUsers();
            int siz = coll.size();
            UserValue[] itarr = new UserValue[siz];
            if (siz > 0) {
                Iterator it = coll.iterator();
                for (int i = 0; i < siz; i++) {
                    itarr[i] = ((UserHbm) it.next()).getUserValue();
                }
            }
            return itarr;
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns all users regardings the active site, the given Group and the
     * given unit.<br>
     * 
     * @param groupId
     *            The Group
     * @param unitId
     *            The Unit
     * @return Returns all UserValue Objects in an Array. Is empty if nobody was
     *         found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllUser4GroupAndUnit(java.lang.Integer,
     *      java.lang.Integer)
     */
    @Override
    protected UserValue[] handleGetAllUser4GroupAndUnit(Integer groupId, Integer unitId) throws Exception {
        Vector<UserValue> vec = new Vector<UserValue>();
        try {
            UserHbm userMe = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (getUserHbmDao().isInUnit(unitId, userMe)) {
                UnitHbm unit = super.getUnitHbmDao().load(unitId);
                Iterator it = unit.getUsers().iterator();
                while (it.hasNext()) {
                    UserHbm user = (UserHbm) it.next();
                    if (user.isInGroup(groupId)
                            && !!getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())) {
                        vec.addElement(user.getUserValue());
                    }
                }
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
        return vec.toArray(new UserValue[0]);
    }

    /**
     * Returns all Groups for a related user in the actual site <b>SECURITY
     * INFORMATION:</b> Available only to: <i>siteRoot, unitAdmin</i>
     * 
     * @param userName
     *            The related username
     * @return An Array of GroupValue Objects
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getGroups4User(java.lang.String)
     */
    @Override
    protected GroupValue[] handleGetGroups4User(String userName) throws Exception {
        try {
            UserHbm user = super.getUserHbmDao().load(userName);
            Collection coll = null;
            if (user.isMasterRoot()) {
                coll = super.getGroupHbmDao().findAll(user.getActiveSite().getSiteId());
            } else {
                coll = super.getUserHbmDao().getGroups4ActiveSite(user);
            }
            GroupValue[] gvarr = new GroupValue[coll.size()];
            Iterator it = coll.iterator();
            for (int i = 0; i < coll.size(); i++) {
                GroupHbm gl = (GroupHbm) it.next();
                gvarr[i] = gl.getGroupValue();
            }
            return gvarr;
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns all Groups for a related user in the actual site <b>SECURITY
     * INFORMATION:</b> Available only to: <i>siteRoot, unitAdmin</i>
     * 
     * @param userName
     *            The related username
     * @return An Array of GroupValue Objects
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getUnits4User(java.lang.String)
     */
    @Override
    protected UnitValue[] handleGetUnits4User(String userName) throws Exception {
        UserHbm user = super.getUserHbmDao().load(userName);
        Collection coll = null;
        if (user.isMasterRoot() && user.getActiveSite() != null) {
            coll = super.getUnitHbmDao().findAll(user.getActiveSite().getSiteId());
        } else {
            coll = super.getUserHbmDao().getUnits4ActiveSite(user);
        }
        UnitValue[] uarr = new UnitValue[coll.size()];
        Iterator it = coll.iterator();
        UnitHbm unit = null;
        for (int i = 0; i < coll.size(); i++) {
            unit = (UnitHbm) it.next();
            uarr[i] = getUnitHbmDao().getDao(unit);
        }
        return uarr;
    }

    /**
     * Returns all users regardings the active site and the given unit.<br>
     * If the Group will be <b>null</b>, it will return all users for this unit.<br>
     * PLEASE NOTE: DOES NOT RETURN SITEROOTS! <b>SECURITY INFORMATION:</b>
     * Available only to: <i>siteRoot, unitAdmin</i>
     * 
     * @param unitId
     *            The Unit
     * @return Returns all UserValue Objects in an Array. Is empty if nobody was
     *         found.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllUser4Unit(java.lang.Integer)
     */
    @Override
    protected UserValue[] handleGetAllUser4Unit(Integer unitId) throws Exception {
        if (unitId == null) {
            return new UserValue[0];
        }
        Vector<UserValue> userValues = new Vector<UserValue>();
        try {
            UserHbm userMe = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (getUserHbmDao().isInUnit(unitId, userMe)) {
                UnitHbm unit = super.getUnitHbmDao().load(unitId);
                userValues.addAll(this.getUsers4Unit(userMe, unit));
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
        return userValues.toArray(new UserValue[0]);
    }

    private Collection getUsers4Unit(UserHbm user, UnitHbm unit) {
        ArrayList<UserValue> usersList = new ArrayList<UserValue>();
        if (getUserHbmDao().isInUnit(unit.getUnitId(), user)) {
            Collection connectedUsers = unit.getSite().getUsers();
            Iterator<UserHbm> it = unit.getUsers().iterator();
            UserHbm currentUser = null;
            UserHbm principal = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            while (it.hasNext()) {
                currentUser = it.next();
                if (connectedUsers.contains(currentUser)) {
                    if (super.getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, principal.getActiveSite())) {
                        usersList.add(currentUser.getUserValue());
                    }
                }
            }
        }
        return usersList;
    }

    /**
     * Get all Tasks for the actual User.<br>
     * If a <i>siteRoot</i> is currently logged in, he will get all Tasks.
     * 
     * @return An Array of TaskValue Objects
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllTasks()
     */
    @Override
    protected TaskValue[] handleGetAllTasks() throws Exception {
        UserHbm user = null;
        try {
            user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            int siz = 0;
            Iterator it = null;
            if (!getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())) {
                if (log.isDebugEnabled())
                    log.debug("SiteRoot requested All Tasks");
                Collection coll = super.getTaskHbmDao().findAll(user.getActiveSite().getSiteId());
                siz = coll.size();
                it = coll.iterator();
                TaskValue[] itarr = new TaskValue[siz];
                if (siz > 0) {
                    for (int i = 0; i < siz; i++) {
                        itarr[i] = ((TaskHbm) it.next()).getTaskValue();
                    }
                }
                return itarr;
            }
            if (log.isDebugEnabled())
                log.debug("User requested Tasks");
            Vector<TaskValue> vec = new Vector<TaskValue>();
            Collection coll = super.getTaskHbmDao().findAll(user.getActiveSite().getSiteId());
            it = coll.iterator();

            while (it.hasNext()) {
                TaskHbm task = (TaskHbm) it.next();
                if (user.equals(task.getReceiver())
                        || (!getUserHbmDao().isInRole(user, task.getReceiverRole(), user.getActiveSite())
                                && (task.getUnit() == null
                                        || getUserHbmDao().isInUnit(task.getUnit().getUnitId(), user)))) {
                    vec.add(task.getTaskValue());
                }
            }
            return vec.toArray(new TaskValue[vec.size()]);
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Remove a Task from the TaskQueue<br>
     * <b>SECURITY INFORMATION:</b> You only can remove Tasks, if you're the
     * sender, the receiver, <i>siteRoot</i> or in the receiver group.
     * 
     * @param taskId
     *            The TaskId to remove
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#removeTask(java.lang.Integer)
     */
    @Override
    protected void handleRemoveTask(Integer taskId) throws Exception {
        TaskHbm task = null;
        task = super.getTaskHbmDao().load(taskId);
        if (task != null) {
            UserHbm user = null;
            try {
                user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            } catch (Exception exe) {
                log.error("Error thrown while returning logged in user: " + exe.getMessage());
                // context.setRollbackOnly();
                throw new UserException("Can't find the actual logged in user. Check the logs and retry");
            }
            if (!!getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())
                    && !user.equals(task.getReceiver()) && !user.equals(task.getSender())
                    && !!getUserHbmDao().isInRole(user, task.getReceiverRole(), user.getActiveSite())) {
                // context.setRollbackOnly();
                throw new SecurityException("User is not responsible to delete this Task. RECEIVER:"
                        + task.getReceiver().getUserId() + " SENDER:" + task.getSender().getUserId()
                        + " RECEIVERROLE:" + task.getReceiverRole() + " THIS USER:" + user.getUserId());
            }
            try {
                super.getTaskHbmDao().remove(task);
            } catch (Exception e) {
                throw new UserException(e.getMessage());
            }
        }
    }

    /**
     * Sets the given task as viewed, if the user has the required permissions
     * therefor.
     * 
     * @param taskId
     *            The TaskId, from which task the Status should be changed to
     *            Constants.TASK_STATUS_VIEWED
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#setTaskViewed(java.lang.Integer)
     */
    @Override
    protected void handleSetTaskViewed(Integer taskId) throws Exception {
        try {
            UserHbm user = null;
            TaskHbm task = null;
            user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            task = super.getTaskHbmDao().load(taskId);
            if (task != null) {
                if (!!getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())
                        && !user.equals(task.getReceiver()) && !user.equals(task.getSender())
                        && !!getUserHbmDao().isInRole(user, task.getReceiverRole(), user.getActiveSite())) {
                    throw new SecurityException("User is not responsible to change this Task. RECEIVER:"
                            + task.getReceiver() + " SENDER:" + task.getSender() + " RECEIVERROLE:"
                            + task.getReceiverRole() + " THIS USER:" + user.getUserId());
                }
                task.setStatus(Constants.TASK_STATUS_VIEWED);
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Returns true, if there is any new Task for this User.<br>
     * This will also return true, if the User is <i>siteRoot</i> and anybody
     * has got a new Task.
     * 
     * @return An Boolean Object containing true/false if the active user has a
     *         new task.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#isNewTask4User()
     */
    @Override
    protected boolean handleIsNewTask4User(String userId) throws Exception {
        try {
            TaskValue[] td = this.getAllTasks();
            for (int i = 0; i < td.length; i++) {
                if (td[i].getStatus() == Constants.TASK_STATUS_NEW
                        && !td[i].getSender().getUserName().matches(userId)) {
                    return true;
                }
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
        return false;
    }

    /**
     * Updates a User.<br>
     * For security reasons, only the following fields are updated:
     * <ul>
     * <li>FirstName</li>
     * <li>LastName</li>
     * <li>EMail</li>
     * <li>ConfigXML (only if parameter is not null and not empty)</li>
     * </ul>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>changeUser,
     * siteRoot</i>
     * 
     * @param userValue
     *            UserValue Object representing the user
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#updateUser(de.juwimm.cms.authorization.vo.UserValue)
     */
    @Override
    protected void handleUpdateUser(UserValue userValue) throws Exception {
        try {
            UserHbm user = null;
            user = super.getUserHbmDao().load(userValue.getUserName());
            if (user != null) {
                if (this.hasRightsForChangeUser(user)) {
                    user.setFirstName(userValue.getFirstName());
                    user.setLastName(userValue.getLastName());
                    user.setEmail(userValue.getEmail());
                    if (userValue.getConfigXML() != null && !userValue.getConfigXML().equals("")) {
                        user.setConfigXML(userValue.getConfigXML());
                    }
                    this.authCache.flushAuthCache();
                } else {
                    throw new SecurityException("Not enough permissions to change the user:"
                            + userValue.getUserName() + " with credential:" + AuthenticationHelper.getUserName());
                }
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Internal Function for returning the rights a user has to change another
     * users data.<br>
     * Returns true if:
     * <ul>
     * <li>Authenticated User is <i>siteRoot</i></li>
     * <li>Authenticated User is <i>masterRoot</i></li>
     * <li>Authenticated User is in the same unit as the given user</li>
     * <li>Authenticated User has at least the same rights level. F.e. a
     * <i>siteRoot</i> can only be edited by a user with <i>masterRoot-</i> or
     * <i>siteRoot-</i>Permissions</li>
     * 
     * @param userGiven
     *            The user to change
     * @return Returns true, if the authenticated user has the rights to change
     *         this user
     */
    private boolean hasRightsForChangeUser(UserHbm userGiven) {
        UserHbm userMe = null;
        try {
            userMe = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
        } catch (Exception exe) {
            log.error("Unknown error while resolving myown user: " + AuthenticationHelper.getUserName());
        }
        boolean hasRights = false;
        if ((getUserHbmDao().isInRole(userMe, UserRights.SITE_ROOT, userMe.getActiveSite())
                && !userGiven.isMasterRoot()) || userMe.isMasterRoot()) {
            hasRights = true;
        }
        if (!hasRights) {
            if (userGiven.isMasterRoot() && !userMe.isMasterRoot()) {
                return false;
            }
            if (!getUserHbmDao().isInRole(userGiven, UserRights.SITE_ROOT, userGiven.getActiveSite())) {
                return false; // don't edit a user with higher rights
            }
        }
        if (!hasRights) {
            // Only change user, if the given user is in one of the same units
            // as the authenticated user
            Iterator it = userGiven.getUnits().iterator();
            while (it.hasNext()) {
                UnitHbm unit = (UnitHbm) it.next();
                if (userMe.getUnits().contains(unit)) {
                    hasRights = true;
                    break;
                }
            }
        }
        if (log.isDebugEnabled())
            log.debug("User " + userMe.getUserId() + " has right: " + hasRights + " for changing "
                    + userGiven.getUserId());
        return hasRights;
    }

    /**
     * Adds a User to a specific Group. <b>SECURITY INFORMATION:</b> Available
     * only to: <i>changeUser, siteRoot</i>
     * 
     * @param groupValue
     *            The Group
     * @param userName
     *            The Use
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#addUserToGroup(de.juwimm.cms.authorization.vo.GroupValue,
     *      java.lang.String)
     */
    @Override
    protected void handleAddUserToGroup(GroupValue groupValue, String userName) throws Exception {
        try {
            UserHbm user = null;
            user = super.getUserHbmDao().load(userName);
            if (user != null) {
                if (this.hasRightsForChangeUser(user)) {
                    GroupHbm group = super.getGroupHbmDao().load(groupValue.getGroupId());
                    getUserHbmDao().addGroup(group, AuthenticationHelper.getUserName(), userName);
                    this.authCache.flushAuthCache();
                } else {
                    throw new SecurityException("Not enough permissions to change the user:" + userName
                            + " with credential:" + AuthenticationHelper.getUserName());
                }
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Removes a User from a specific Group. <b>SECURITY INFORMATION:</b>
     * Available only to: <i>changeUser, siteRoot</i>
     * 
     * @param gv
     *            The Group
     * @param userName
     *            The User
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#removeUserFromGroup(de.juwimm.cms.authorization.vo.GroupValue,
     *      java.lang.String)
     */
    @Override
    protected void handleRemoveUserFromGroup(GroupValue gv, String userName) throws Exception {
        try {
            UserHbm user = null;
            user = super.getUserHbmDao().load(userName);
            if (user != null) {
                if (this.hasRightsForChangeUser(user)) {
                    GroupHbm gl = super.getGroupHbmDao().load(gv.getGroupId());
                    user.dropGroup(gl);
                    this.authCache.flushAuthCache();
                } else {
                    throw new SecurityException("Not enough permissions to change the user:" + userName
                            + " with credential:" + AuthenticationHelper.getUserName());
                }
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Deletes an useraccount.
     * 
     * @param userId
     *            The UserId of the user that should be deleted.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#deleteUser(java.lang.String)
     */
    @Override
    protected void handleDeleteUser(String userId) throws Exception {
        try {
            UserHbm user = null;
            user = super.getUserHbmDao().load(userId);

            if (user != null && this.hasRightsForChangeUser(user)) {
                //remove all locks held by this user
                getContentServiceSpring().removeLocks(userId);

                //remove all existing tasks from or to this user
                Collection tasks = getTaskHbmDao().findByReceiver(userId);
                if (tasks != null && !tasks.isEmpty())
                    getTaskHbmDao().remove(tasks);
                tasks = getTaskHbmDao().findBySender(userId);
                if (tasks != null && !tasks.isEmpty())
                    getTaskHbmDao().remove(tasks);

                super.getUserHbmDao().remove(user);
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
    }

    /**
     * Changes the Password of a given useraccount.<br>
     * <b>SECURITY INFORMATION:</b> Available only to: <i>changeUser,
     * siteRoot</i>
     * 
     * @param userName
     *            The UserName of the user which should get a new Password
     * @param oldPassword
     *            The old password
     * @param newPassword
     *            The new password
     * @return True, if it was possible to change the password.
     * 
     * @see de.juwimm.cms.remote.UserServiceSpring#changePassword4User(java.lang.String,
     *      java.lang.String, java.lang.String)
     */
    @Override
    protected boolean handleChangePassword4User(String userName, String oldPassword, String newPassword)
            throws Exception {
        if (log.isDebugEnabled())
            log.debug("begin changePassword for anotherone");

        UserHbm userGiven = super.getUserHbmDao().load(userName);
        String newPasswdEncoded = userGiven.encrypt(newPassword);

        if (hasRightsForChangeUser(userGiven)) {
            userGiven.setPasswd(newPasswdEncoded);
            if (log.isDebugEnabled())
                log.debug("end changePassword succ");
            return true;
        }

        if (log.isDebugEnabled())
            log.debug("end changePassword nosucc");
        return false;
    }

    /**
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllSites4CurrentUser()
     */
    @Override
    protected SiteValue[] handleGetAllSites4CurrentUser() throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("begin getAllSites4CurrentUser");
        }
        SiteValue[] itarr = null;
        try {
            UserHbm user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (super.getUserHbmDao().isInRole(user, UserRights.SITE_ROOT, user.getActiveSite())) {
                Collection coll = null;
                Collection<SiteValue> sites = new ArrayList<SiteValue>();
                try {
                    coll = user.getSites();
                    // coll = getSiteHbmDao().findAll4User(user.getUserId());
                } catch (Exception exe) {
                    log.warn("Error while executing the finder \"findAll4User\" in getAllSites4CurrentUser: "
                            + exe.getMessage());
                }
                Iterator it = coll.iterator();
                while (it.hasNext()) {
                    SiteHbm currentSite = (SiteHbm) it.next();
                    if (this.isUserInRole(user.getUserId(), currentSite.getSiteId(), "siteRoot")) {
                        sites.add((currentSite).getSiteValue());
                    }
                }
                itarr = sites.toArray(new SiteValue[0]);
            }
        } catch (Exception exe) {
            log.error("Error occured", exe);
        }
        return itarr;
    }

    private boolean isUserInRole(String userName, Integer siteId, String role) throws Exception {
        if (userName == null) {
            return false;
        }
        UserHbm user = super.getUserHbmDao().load(userName);
        if (user.isMasterRoot()) {
            return true;
        }
        try {
            GroupValue[] gv = this.getGroups4UserInSite(userName, siteId);
            for (int i = 0; i < gv.length; i++) {
                for (int j = 0; j < gv[i].getRoles().length; j++) {
                    if (gv[i].getRoles()[j].getRoleId().equalsIgnoreCase(role)) {
                        return true;
                    }
                }
            }
        } catch (Exception exe) {
            log.error(exe);
        }
        return false;
    }

    /**
     * @see de.juwimm.cms.remote.UserServiceSpring#getAllUsers4OwnSites()
     */
    @Override
    protected UserValue[] handleGetAllUsers4OwnSites() throws Exception {
        UserValue[] itarr = null;
        SiteValue[] mySites = this.getAllSites4CurrentUser();
        HashSet<UserValue> userSet = new HashSet<UserValue>();
        try {
            for (int i = (mySites.length - 1); i >= 0; i--) {
                Collection users = super.getUserHbmDao().findAll(mySites[i].getSiteId());
                Iterator it = users.iterator();
                while (it.hasNext()) {
                    UserHbm user = (UserHbm) it.next();
                    if (!user.isMasterRoot()) {
                        userSet.add(user.getUserValue());
                    }
                }
            }
        } catch (Exception e) {
            log.error("Error occured", e);
        }
        itarr = userSet.toArray(new UserValue[0]);
        return itarr;
    }

    /**
     * @see de.juwimm.cms.remote.UserServiceSpring#getGroups4UserInSite(java.lang.String,
     *      java.lang.Integer)
     */
    @Override
    protected GroupValue[] handleGetGroups4UserInSite(String userName, Integer siteId) throws Exception {
        GroupValue[] gvarr = null;
        try {
            UserHbm user = super.getUserHbmDao().load(userName);
            Collection coll = null;
            if (user.isMasterRoot()) {
                coll = super.getGroupHbmDao().findAll(siteId);
            } else {
                coll = super.getGroupHbmDao().findByUserAndSite(userName, siteId);
            }
            gvarr = new GroupValue[coll.size()];
            Iterator it = coll.iterator();
            for (int i = 0; i < coll.size(); i++) {
                GroupHbm group = (GroupHbm) it.next();
                gvarr[i] = group.getGroupValue();
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage());
        }
        return gvarr;
    }

    /**
     * @see de.juwimm.cms.remote.UserServiceSpring#getConnectedUsers4Site(java.lang.Integer)
     */
    @Override
    protected String[] handleGetConnectedUsers4Site(Integer siteId) throws Exception {
        Collection coll = null;
        int siz = 0;
        try {
            SiteHbm site = super.getSiteHbmDao().load(siteId);
            coll = site.getUsers();
            siz = coll.size();
        } catch (Exception exe) {
            log.warn("Error while executing the finder \"findAll\" in getConnectedUsersForSite: "
                    + exe.getMessage());
        }
        ArrayList<String> al = new ArrayList<String>(siz);
        if (siz > 0) {
            Iterator it = coll.iterator();
            for (int i = 0; i < siz; i++) {
                UserHbm user = (UserHbm) it.next();
                if (!user.isMasterRoot()) {
                    al.add(user.getUserId());
                }
            }
        }
        return al.toArray(new String[0]);
    }

    /**
     * @see de.juwimm.cms.remote.UserServiceSpring#setConnectedUsers4Site(java.lang.Integer,
     *      java.lang.String[])
     */
    @Override
    protected void handleSetConnectedUsers4Site(Integer siteId, String[] userIds) throws Exception {
        Collection<UserHbm> usersIn = null;
        Collection<String> usersRemove = new ArrayList<String>();
        Collection<String> users = new ArrayList<String>();

        // Collections are nicer to handle
        for (int i = 0; i < userIds.length; i++) {
            users.add(userIds[i]);
        }

        SiteHbm site = null;
        try {
            site = super.getSiteHbmDao().load(siteId);
            usersIn = site.getUsers();

        } catch (Exception exe) {
            log.warn("Error while executing the finder \"findAll\" in getConnectedUsersForSite: "
                    + exe.getMessage());
        }

        // compare old user list with new one -> element in both means stay,
        // just in old means del
        for (UserHbm user : usersIn) {
            if (users.contains(user.getUserId())) {
                users.remove(user.getUserId());
            } else {
                usersRemove.add(user.getUserId());
            }
        }

        // users still in list are the really new ones - create them
        for (String userId : users) {
            UserHbm user = super.getUserHbmDao().load(userId);
            user.getSites().add(site);
        }

        // remove the users deleted users
        for (String userId : usersRemove) {
            UserHbm user = super.getUserHbmDao().load(userId);
            user.getSites().remove(site);
        }
    }

    @Override
    protected SiteValue[] handleGetAllSites4CurrentUserWithRole(String requestedRole) throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("begin getAllSites4CurrentUserWithRole: " + requestedRole);
        }
        SiteValue[] itarr = null;
        try {
            UserHbm user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (super.getUserHbmDao().isInRole(user, requestedRole, user.getActiveSite())) {
                Collection<SiteHbm> coll = null;
                Collection<SiteValue> sites = new ArrayList<SiteValue>();
                try {
                    if (user.isMasterRoot()) {
                        coll = super.getSiteHbmDao().findAll();
                    } else {
                        coll = super.getSiteHbmDao().findAll4User(user.getUserId());
                    }
                } catch (Exception exe) {
                    log.warn(
                            "Error while executing the finder \"findAll4User\" in getAllSites4CurrentUserWithRole: "
                                    + exe.getMessage());
                }
                Iterator it = coll.iterator();
                while (it.hasNext()) {
                    SiteHbm currentSite = (SiteHbm) it.next();
                    if (this.isUserInRole(user.getUserId(), currentSite.getSiteId(), requestedRole)) {
                        sites.add((currentSite).getSiteValue());
                    }
                }
                itarr = sites.toArray(new SiteValue[0]);
            } else {
                // at least add current site
                itarr = new SiteValue[] { user.getActiveSite().getSiteValue() };
            }
        } catch (Exception exe) {
            log.error("Error occured", exe);
        }
        return itarr;
    }

    private Integer getActiveSiteId() throws UserException {
        try {
            UserHbm user = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            return user.getActiveSite().getSiteId();
        } catch (Exception e) {
            if (log.isErrorEnabled()) {
                log.error("Could not get id of active site", e);
                throw new UserException(e.getMessage());
            }
        }
        return null;
    }

    @Override
    protected UserUnitsGroupsValue[] handleGetUserUnitsGroups4UnitAndGroup(Integer unitId, Integer groupId)
            throws Exception {
        Vector<UserUnitsGroupsValue> vec = new Vector<UserUnitsGroupsValue>();
        try {
            ArrayList<UserHbm> userList = new ArrayList<UserHbm>();

            UserHbm userLogged = super.getUserHbmDao().load(AuthenticationHelper.getUserName());
            if (!isUserInRole(userLogged.getUserId(), this.getActiveSiteId(), UserRights.SITE_ROOT)) {
                if (isUserInRole(userLogged.getUserId(), this.getActiveSiteId(), UserRights.UNIT_ADMIN)) {
                    Iterator unitsIt = userLogged.getUnits().iterator();
                    while (unitsIt.hasNext()) {
                        UnitHbm unit = (UnitHbm) unitsIt.next();
                        Collection users = unit.getUsers();
                        Iterator<UserHbm> userIt = users.iterator();
                        while (userIt.hasNext()) {
                            UserHbm current = userIt.next();
                            //not allowed to see user in higher roles than himself 
                            if (!isUserInRole(current.getUserId(), this.getActiveSiteId(), UserRights.SITE_ROOT)) {
                                userList.add(current);
                            }
                        }
                    }
                }

            } else {
                if (unitId != null && unitId.intValue() > 0 && groupId != null && groupId.intValue() > 0) {
                    userList.addAll(super.getUserHbmDao().findAll4UnitAndGroup(unitId, groupId));
                } else if (unitId != null && unitId.intValue() > 0) {
                    userList.addAll(super.getUserHbmDao().findAll4Unit(unitId));
                } else if (groupId != null && groupId.intValue() > 0) {
                    userList.addAll(super.getUserHbmDao().findAll4Group(groupId));
                } else {
                    userList.addAll(super.getUserHbmDao().findAll(this.getActiveSiteId()));
                }
            }
            Iterator<UserHbm> it = userList.iterator();
            while (it.hasNext()) {
                UserHbm user = it.next();
                vec.add(getUserHbmDao().getUserUnitsGroupsValue(user));
                // vec.add(user.getUserUnitsGroupsValue());
            }
        } catch (Exception e) {
            throw new UserException(e.getMessage(), e);
        }
        return vec.toArray(new UserUnitsGroupsValue[0]);
    }

    @Override
    protected TaskValue handleGetTaskForId(Integer taskId) throws Exception {
        TaskHbm tvHbm = getTaskHbmDao().load(taskId);
        if (tvHbm != null) {
            return tvHbm.getTaskValue();
        }
        return null;
    }

    /* (non-Javadoc)
     * @see de.juwimm.cms.remote.UserServiceSpringBase#handleIsUserInUnit(java.lang.String, java.lang.Integer)
     */
    @Override
    protected Boolean handleIsUserInUnit(String userId, Integer unitId) throws Exception {
        return getUserHbmDao().load(userId).isInUnit(unitId);
    }

    /* (non-Javadoc)
     * @see de.juwimm.cms.remote.UserServiceSpringBase#handleRemoveUserFromSite(java.lang.String, java.lang.Integer)
     */
    @Override
    protected void handleRemoveUserFromSite(String userId, Integer siteId) throws Exception {
        getUserHbmDao().load(userId).dropSite(getSiteHbmDao().load(siteId));

    }

}