Package org.joget.directory.dao

Source Code of org.joget.directory.dao.UserDaoImpl

package org.joget.directory.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.joget.commons.spring.model.AbstractSpringDao;
import org.joget.commons.util.LogUtil;
import org.joget.directory.model.Department;
import org.joget.directory.model.Employment;
import org.joget.directory.model.Group;
import org.joget.directory.model.Role;
import org.joget.directory.model.User;
import org.joget.directory.model.service.DirectoryUtil;
import org.joget.workflow.model.service.WorkflowUserManager;
import org.springframework.context.ApplicationContext;

public class UserDaoImpl extends AbstractSpringDao implements UserDao {

    private GroupDao groupDao;
    private RoleDao roleDao;
    private EmploymentDao employmentDao;
    private DepartmentDao departmentDao;

    public DepartmentDao getDepartmentDao() {
        return departmentDao;
    }

    public void setDepartmentDao(DepartmentDao departmentDao) {
        this.departmentDao = departmentDao;
    }

    public EmploymentDao getEmploymentDao() {
        return employmentDao;
    }

    public void setEmploymentDao(EmploymentDao employmentDao) {
        this.employmentDao = employmentDao;
    }

    public GroupDao getGroupDao() {
        return groupDao;
    }

    public void setGroupDao(GroupDao groupDao) {
        this.groupDao = groupDao;
    }

    public RoleDao getRoleDao() {
        return roleDao;
    }

    public void setRoleDao(RoleDao roleDao) {
        this.roleDao = roleDao;
    }

    public Boolean addUser(User user) {
        try {
           
            adminRoleFilter(user);
           
            save("User", user);
            return true;
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Add User Error!");
            return false;
        }
    }

    public Boolean updateUser(User user) {
        try {
            adminRoleFilter(user);
           
            merge("User", user);
            return true;
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Update User Error!");
            return false;
        }
    }

    public Boolean updateUserEmploymentInfo(String username, Employment info) {
        try {
            User user = getUser(username);
            if (user != null) {
                if (user.getEmployments() != null && user.getEmployments().size() > 0) {
                    Employment employment = (Employment) user.getEmployments().iterator().next();
                    info.setId(employment.getId());
                    getEmploymentDao().updateEmployment(info);
                } else {
                    user.getEmployments().add(info);
                    saveOrUpdate("User", user);
                }
            }

            return true;
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Update User Employment Info Error!");
            return false;
        }
    }

    public Boolean deleteUser(String username) {
        try {
            User user = getUser(username);
            if (user != null) {
                Set<Group> groups = user.getGroups();
                Set<Role> roles = user.getRoles();
                Set<Employment> employments = user.getEmployments();

                if (groups != null && groups.size() > 0) {
                    user.getGroups().removeAll(groups);
                }
                if (roles != null && roles.size() > 0) {
                    user.getRoles().removeAll(roles);
                }
                if (employments != null && employments.size() > 0) {
                    for (Employment e : employments) {
                        getEmploymentDao().deleteEmployment(e.getId());
                    }
                    employments.clear();
                }
                delete("User", user);
            }
            return true;
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Delete User Error!");
            return false;
        }
    }

    public User getUser(String username) {
        try {
            User user = new User();
            user.setUsername(username);
            List users = findByExample("User", user);

            if (users.size() > 0) {
                return (User) users.get(0);
            }
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get User Error!");
        }

        return null;
    }

    public User getUserById(String id) {
        try {
            return (User) find("User", id);
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get User By Id Error!");
            return null;
        }
    }

    public User getHodByDepartmentId(String departmentId) {
        try {
            if (departmentId != null) {
                Department department = departmentDao.getDepartment(departmentId);
                if (department != null && department.getHod() != null) {
                    Employment employment = department.getHod();
                    if (employment.getUser() != null) {
                        return getUserById(employment.getUserId());
                    }
                }
            }
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get Hod By Department Id Error!");
        }

        return null;
    }

    public Collection<User> findUsers(String condition, Object[] params, String sort, Boolean desc, Integer start, Integer rows) {
        try {
            return find("User", condition, params, sort, desc, start, rows);
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Find Users Error!");
        }

        return null;
    }

    public Long countUsers(String condition, Object[] params) {
        try {
            return count("User", condition, params);
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Count Users Error!");
        }

        return 0L;
    }

    public Collection<User> getUsers(String filterString, String organizationId, String departmentId, String gardeId, String groupId, String roleId, String active, String sort, Boolean desc, Integer start, Integer rows) {
        try {
            if (filterString == null) {
                filterString = "";
            }
            Collection param = new ArrayList();
            String condition = "where (e.username like ? or e.firstName like ? or e.lastName like ? or e.email like ?)";
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");

            if (organizationId != null || departmentId != null || gardeId != null) {
                condition += " and e.id in (select u.id from User u join u.employments em where 1=1";
                if (organizationId != null) {
                    condition += " and em.organization.id = ?";
                    param.add(organizationId);
                }
                if (departmentId != null) {
                    condition += " and em.department.id = ?";
                    param.add(departmentId);
                }
                if (gardeId != null) {
                    condition += " and em.grade.id = ?";
                    param.add(gardeId);
                }
                condition += ")";
            }
            if (groupId != null) {
                condition += " and e.id in (select u.id from User u join u.groups g where g.id = ?)";
                param.add(groupId);
            }
            if (roleId != null) {
                condition += " and e.id in (select u.id from User u join u.roles r where r.id = ?)";
                param.add(roleId);
            }
            if (active != null) {
                condition += " and e.active = ?";
                param.add(("1".equals(active) ? 1 : 0));
            }

            return find("User", condition, param.toArray(), sort, desc, start, rows);
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get Users Error!");
        }

        return null;
    }

    public Long getTotalUsers(String filterString, String organizationId, String departmentId, String gardeId, String groupId, String roleId, String active) {
        try {
            if (filterString == null) {
                filterString = "";
            }
            Collection param = new ArrayList();
            String condition = "where (e.username like ? or e.firstName like ? or e.lastName like ? or e.email like ?)";
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");

            if (organizationId != null || departmentId != null || gardeId != null) {
                condition += " and e.id in (select u.id from User u join u.employments em where 1=1";
                if (organizationId != null) {
                    condition += " and em.organization.id = ?";
                    param.add(organizationId);
                }
                if (departmentId != null) {
                    condition += " and em.department.id = ?";
                    param.add(departmentId);
                }
                if (gardeId != null) {
                    condition += " and em.grade.id = ?";
                    param.add(gardeId);
                }
                condition += ")";
            }
            if (groupId != null) {
                condition += " and e.id in (select u.id from User u join u.groups g where g.id = ?)";
                param.add(groupId);
            }
            if (roleId != null) {
                condition += " and e.id in (select u.id from User u join u.roles r where r.id = ?)";
                param.add(roleId);
            }
            if (active != null) {
                condition += " and e.active = ?";
                param.add(("1".equals(active) ? 1 : 0));
            }

            return count("User", condition, param.toArray());
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Count Users Error!");
        }

        return 0L;
    }

    public Boolean assignUserToGroup(String userId, String groupId) {
        try {
            User user = getUserById(userId);
            Group group = getGroupDao().getGroup(groupId);
            if (user != null && group != null) {
                user.getGroups().add(group);
                saveOrUpdate("User", user);
                return true;
            }
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Assign User From Group Error!");
        }
        return false;
    }

    public Boolean unassignUserFromGroup(String userId, String groupId) {
        try {
            User user = getUserById(userId);
            Group group = getGroupDao().getGroup(groupId);
            if (user != null && group != null) {
                user.getGroups().remove(group);
                saveOrUpdate("User", user);
                return true;
            }
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Unassign User From Group Error!");
        }
        return false;
    }

    public Collection<User> getUsersNotInGroup(String filterString, String groupId, String sort, Boolean desc, Integer start, Integer rows) {
        try {
            if (filterString == null) {
                filterString = "";
            }
            Collection param = new ArrayList();
            String condition = "where (e.username like ? or e.firstName like ? or e.lastName like ? or e.email like ?)";
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");

            if (groupId != null) {
                condition += " and e.id not in (select u.id from User u join u.groups g where g.id = ?)";
                param.add(groupId);
            }

            return find("User", condition, param.toArray(), sort, desc, start, rows);
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get Users Not In Group Error!");
        }

        return null;
    }

    public Long getTotalUsersNotInGroup(String filterString, String groupId) {
        try {
            if (filterString == null) {
                filterString = "";
            }
            Collection param = new ArrayList();
            String condition = "where (e.username like ? or e.firstName like ? or e.lastName like ? or e.email like ?)";
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");
            param.add("%" + filterString + "%");

            if (groupId != null) {
                condition += " and e.id not in (select u.id from User u join u.groups g where g.id = ?)";
                param.add(groupId);
            }

            return count("User", condition, param.toArray());
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get Total Users Not In Group Error!");
        }

        return 0L;
    }

    public Collection<User> getUsersSubordinate(String username, String sort, Boolean desc, Integer start, Integer rows) {
        try {
            Collection param = new ArrayList();
            String condition = "where e.id in (select t.subordinate.user.id from EmploymentReportTo t where t.reportTo.user.id = ?)";
            param.add(username);

            return find("User", condition, param.toArray(), sort, desc, start, rows);
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get Users Subordinate Error!");
        }

        return null;
    }

    public Long getTotalUsersSubordinate(String username) {
        try {
            Collection param = new ArrayList();
            String condition = "where e.id in (select t.subordinate.user.id from EmploymentReportTo t where t.reportTo.user.id = ?)";
            param.add(username);

            return count("User", condition, param.toArray());
        } catch (Exception e) {
            LogUtil.error(UserDaoImpl.class.getName(), e, "Get Total Users Not In Group Error!");
        }

        return 0L;
    }
   
    protected void adminRoleFilter(User user) {
        ApplicationContext ac = DirectoryUtil.getApplicationContext();
       
        if (ac != null) {
            WorkflowUserManager workflowUserManager = (WorkflowUserManager) DirectoryUtil.getApplicationContext().getBean("workflowUserManager");
            if (workflowUserManager != null && !(workflowUserManager.isCurrentUserInRole(WorkflowUserManager.ROLE_ADMIN) || workflowUserManager.isSystemUser())){
                Role adminRole = roleDao.getRole(WorkflowUserManager.ROLE_ADMIN);
                if (user.getRoles() != null && user.getRoles().contains(adminRole)) {
                    user.getRoles().remove(adminRole);
                    Role userRole = roleDao.getRole("ROLE_USER");
                    if (userRole != null && !user.getRoles().contains(userRole)) {
                        user.getRoles().add(userRole);
                    }
                }
            }
        }
    }
}
TOP

Related Classes of org.joget.directory.dao.UserDaoImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.