UserDAOImpl.java
- package org.itracker.persistence.dao;
- import org.hibernate.Criteria;
- import org.hibernate.HibernateException;
- import org.hibernate.Query;
- import org.hibernate.criterion.DetachedCriteria;
- import org.hibernate.criterion.Expression;
- import org.hibernate.criterion.Order;
- import org.hibernate.criterion.Restrictions;
- import org.itracker.model.Permission;
- import org.itracker.model.PermissionType;
- import org.itracker.model.User;
- import java.util.*;
- /**
- *
- */
- public class UserDAOImpl extends BaseHibernateDAOImpl<User> implements UserDAO {
- public User findByPrimaryKey(Integer userId) {
- User user;
- try {
- user = (User) getSession().get(User.class, userId);
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return user;
- }
- public User findByLogin(String login) {
- User user;
- try {
- Query query = getSession().getNamedQuery("UserByLoginQuery");
- query.setString("login", login);
- user = (User) query.uniqueResult();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return user;
- }
- @SuppressWarnings("unchecked")
- public List<User> findAll() {
- List<User> users;
- try {
- Query query = getSession().getNamedQuery("UsersAllQuery");
- users = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return users;
- }
- @SuppressWarnings("unchecked")
- public List<User> findActive() {
- List<User> users;
- try {
- Query query = getSession().getNamedQuery("UsersActiveQuery");
- users = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return users;
- }
- @SuppressWarnings("unchecked")
- public List<User> findByStatus(int status) {
- List<User> users;
- try {
- Query query = getSession().getNamedQuery("UsersByStatusQuery");
- query.setInteger("userStatus", status);
- users = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return users;
- }
- @SuppressWarnings("unchecked")
- public List<User> findSuperUsers() {
- List<User> users;
- try {
- Query query = getSession().getNamedQuery("UsersSuperQuery");
- users = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return users;
- }
- @SuppressWarnings("unchecked")
- public List<User> findByRegistrationType(int registrationType) {
- List<User> users;
- try {
- Query query = getSession().getNamedQuery("UsersByRegistrationTypeQuery");
- query.setInteger("registrationType", registrationType);
- users = query.list();
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return users;
- }
- /**
- * Searches all permissions for the given user and sorts it by project. The
- * <code>HashMap</code> returned has the project ids as key (<code>Integer</code>)
- * and a <code>HashSet</code> as values. The <code>HashSet</code> holds a set of
- * string representation of the permission
- *
- * @param user The user of interest
- * @return HashMap of permission keyed by project ids
- */
- @SuppressWarnings("unchecked")
- public Map<Integer, Set<PermissionType>> getUsersMapOfProjectsAndPermissionTypes(User user) {
- // create hashMap to hold permission by project id as key
- final Map<Integer, Set<PermissionType>> permissionsByProjectId =
- new HashMap<Integer, Set<PermissionType>>();
- try {
- // load user bean
- User userBean = (User) getSession().load(User.class, user.getId());
- // create criteria
- Criteria criteria = getSession().createCriteria(Permission.class);
- criteria.add(Expression.eq("user", userBean));
- criteria.addOrder(Order.asc("project"));
- // perform search
- List<Permission> permissionsList = criteria.list();
- for (int i = 0; i < permissionsList.size(); i++) {
- Permission permission = permissionsList.get(i);
- // Super user has access to all projects, which is indicated by the "null" project.
- final Integer projectId = (permission.getProject() == null)
- ? null : permission.getProject().getId();
- Set<PermissionType> projectPermissions = permissionsByProjectId.get(projectId);
- if (projectPermissions == null) {
- // First permission for the project.
- projectPermissions = new HashSet<PermissionType>();
- permissionsByProjectId.put(projectId, projectPermissions);
- } //else { // Add the permission to the existing set of permissions for the project. }
- PermissionType permissionType = permission.getPermissionType();
- projectPermissions.add(permissionType);
- }
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return permissionsByProjectId;
- }
- @SuppressWarnings("unchecked")
- public List<User> findUsersForProjectByAllPermissionTypeList(Integer projectID, Integer[] permissionTypes) {
- PermissionType[] permissions = null;
- if (null != permissionTypes) {
- permissions = new PermissionType[permissionTypes.length];
- int c = 0;
- for (int p : permissionTypes) {
- permissions[c++] = PermissionType.valueOf(p);
- }
- }
- return findUsersForProjectByAllPermissionTypeList(projectID, permissions);
- }
- @Override
- public List<User> findUsersForProjectByAllPermissionTypeList(Integer projectID, PermissionType[] permissionTypes) {
- List<User> users = new ArrayList<User>();
- try {
- DetachedCriteria userCriteria = DetachedCriteria.forClass(User.class);
- userCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
- DetachedCriteria permissionCriteria = userCriteria.createCriteria("permissions");
- permissionCriteria.add(Restrictions.in("permissionType", permissionTypes));
- permissionCriteria.add(Restrictions.eq("project.id", projectID));
- List<User> userList = userCriteria.getExecutableCriteria(getSession()).list();
- for (User user : userList) {
- if (hasAllPermissions(user.getPermissions(), permissionTypes)) {
- users.add(user);
- }
- }
- } catch (HibernateException ex) {
- throw convertHibernateAccessException(ex);
- }
- return users;
- }
- private boolean hasAllPermissions(Collection<Permission> permissions, PermissionType[] required) {
- if (null == required || required.length == 0) {
- return true;
- }
- if (null == permissions || permissions.isEmpty()) {
- return false;
- }
- Collection<PermissionType> requiredPermissions = Arrays.asList(required);
- Collection<PermissionType> userPermissionTypes = new HashSet<>(permissions.size());
- Iterator<Permission> permsIt = permissions.iterator();
- while (permsIt.hasNext()) {
- userPermissionTypes.add(permsIt.next().getPermissionType());
- }
- return userPermissionTypes.containsAll(requiredPermissions);
- }
- }