package org.joget.directory.dao; 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.Grade; import org.joget.directory.model.Group; import org.joget.directory.model.Organization; public class OrganizationDaoImpl extends AbstractSpringDao implements OrganizationDao { private GradeDao gradeDao; private GroupDao groupDao; private DepartmentDao departmentDao; private EmploymentDao employmentDao; public EmploymentDao getEmploymentDao() { return employmentDao; } public void setEmploymentDao(EmploymentDao employmentDao) { this.employmentDao = employmentDao; } public DepartmentDao getDepartmentDao() { return departmentDao; } public void setDepartmentDao(DepartmentDao departmentDao) { this.departmentDao = departmentDao; } public GradeDao getGradeDao() { return gradeDao; } public void setGradeDao(GradeDao gradeDao) { this.gradeDao = gradeDao; } public GroupDao getGroupDao() { return groupDao; } public void setGroupDao(GroupDao groupDao) { this.groupDao = groupDao; } public Boolean addOrganization(Organization organization) { try { save("Organization", organization); return true; } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Add Organization Error!"); return false; } } public Boolean updateOrganization(Organization organization) { try { merge("Organization", organization); return true; } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Update Organization Error!"); return false; } } public Boolean deleteOrganization(String id) { try { Organization organization = getOrganization(id); if (organization != null) { Set<Department> departments = organization.getDepartments(); Set<Grade> grades = organization.getGrades(); Set<Group> groups = organization.getGroups(); Set<Employment> employments = organization.getEmployments(); if (employments != null) { for (Employment employment : employments) { getEmploymentDao().unassignUserFromOrganization(employment.getUserId(), id); } employments.clear(); } if (groups != null) { organization.getGroups().removeAll(groups); } if (departments != null) { for (Department department : departments) { getDepartmentDao().deleteDepartment(department.getId()); } } if (grades != null) { for (Grade grade : grades) { getGradeDao().deleteGrade(grade.getId()); } } delete("Organization", organization); } return true; } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Delete Organization Error!"); return false; } } public Organization getOrganization(String id) { try { return (Organization) find("Organization", id); } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Get Organization Error!"); return null; } } public Organization getOrganizationByName(String name) { try { Organization organization = new Organization(); organization.setName(name); List organizations = findByExample("Organization", organization); if (organizations.size() > 0) { return (Organization) organizations.get(0); } } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Get Organization By Name Error!"); } return null; } public Collection<Organization> getOrganizationsByFilter(String filterString, String sort, Boolean desc, Integer start, Integer rows) { try { if (filterString == null) { filterString = ""; } return find("Organization", "where e.id like ? or e.name like ? or e.description like ?", new Object[]{"%" + filterString + "%", "%" + filterString + "%", "%" + filterString + "%"}, sort, desc, start, rows); } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Get Organizations By Name Filter Error!"); } return null; } public Long getTotalOrganizationsByFilter(String filterString) { try { if (filterString == null) { filterString = ""; } return count("Organization", "where e.id like ? or e.name like ? or e.description like ?", new Object[]{"%" + filterString + "%", "%" + filterString + "%", "%" + filterString + "%"}); } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Get Total Organizations By Name Filter Error!"); } return 0L; } public Collection<Organization> findOrganizations(String condition, Object[] params, String sort, Boolean desc, Integer start, Integer rows) { try { return find("Organization", condition, params, sort, desc, start, rows); } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Find Organizations Error!"); } return null; } public Long countOrganizations(String condition, Object[] params) { try { return count("Organization", condition, params); } catch (Exception e) { LogUtil.error(OrganizationDaoImpl.class.getName(), e, "Count Organizations Error!"); } return 0L; } }