package org.joget.directory.dao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.joget.commons.spring.model.AbstractSpringDao; import org.joget.commons.util.LogUtil; import org.joget.directory.model.Group; public class GroupDaoImpl extends AbstractSpringDao implements GroupDao { private OrganizationDao organizationDao; public OrganizationDao getOrganizationDao() { return organizationDao; } public void setOrganizationDao(OrganizationDao organizationDao) { this.organizationDao = organizationDao; } public Boolean addGroup(Group group) { try { save("Group", group); return true; } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Add Group Error!"); return false; } } public Boolean updateGroup(Group group) { try { merge("Group", group); return true; } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Update Group Error!"); return false; } } public Boolean deleteGroup(String id) { try { Group group = getGroup(id); if (group != null && group.getUsers() != null) { group.getUsers().clear(); } delete("Group", group); return true; } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Delete Group Error!"); return false; } } public Group getGroup(String id) { try { return (Group) find("Group", id); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Get Group Error!"); return null; } } public Group getGroupByName(String name) { try { Group group = new Group(); group.setName(name); List groups = findByExample("Group", group); if (groups.size() > 0) { return (Group) groups.get(0); } } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Get Group By Name Error!"); } return null; } public Collection<Group> getGroupsByOrganizationId(String filterString, String organizationId, String sort, Boolean desc, Integer start, Integer rows) { try { if (filterString == null) { filterString = ""; } Collection param = new ArrayList(); String condition = "where (e.id like ? or e.name like ? or e.description like ?)"; param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); if (organizationId != null) { condition += " and e.organization.id = ?"; param.add(organizationId); } return find("Group", condition, param.toArray(), sort, desc, start, rows); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Get Groups By Organization Id Error!"); } return null; } public Long getTotalGroupsByOrganizationId(String filterString, String organizationId) { try { if (filterString == null) { filterString = ""; } Collection param = new ArrayList(); String condition = "where (e.id like ? or e.name like ? or e.description like ?)"; param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); if (organizationId != null) { condition += " and e.organization.id = ?"; param.add(organizationId); } return count("Group", condition, param.toArray()); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Get Total Groups By Organization Id Error!"); } return 0L; } public Collection<Group> getGroupsByUserId(String filterString, String userId, String organizationId, Boolean inGroup, String sort, Boolean desc, Integer start, Integer rows) { try { if (filterString == null) { filterString = ""; } Collection param = new ArrayList(); String condition = "where (e.id like ? or e.name like ? or e.description like ?)"; param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); if (userId != null) { condition += " and e.id"; if (inGroup != null && !inGroup) { condition += " not"; } condition += " in (select g.id from Group g join g.users u where u.id = ?)"; param.add(userId); } if (organizationId != null) { condition += " and e.organization.id = ?"; param.add(organizationId); } return find("Group", condition, param.toArray(), sort, desc, start, rows); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Get Groups By User Id Error!"); } return null; } public Long getTotalGroupsByUserId(String filterString, String userId, String organizationId, Boolean inGroup) { try { if (filterString == null) { filterString = ""; } Collection param = new ArrayList(); String condition = "where (e.id like ? or e.name like ? or e.description like ?)"; param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); param.add("%" + filterString + "%"); if (userId != null) { condition += " and e.id"; if (inGroup != null && !inGroup) { condition += " not"; } condition += " in (select g.id from Group g join g.users u where u.id = ?)"; param.add(userId); } if (organizationId != null) { condition += " and e.organization.id = ?"; param.add(organizationId); } return count("Group", condition, param.toArray()); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Get Total Groups By User Id Error!"); } return 0L; } public Collection<Group> findGroups(String condition, Object[] params, String sort, Boolean desc, Integer start, Integer rows) { try { return find("Group", condition, params, sort, desc, start, rows); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Find Groups Error!"); } return null; } public Long countGroups(String condition, Object[] params) { try { return count("Group", condition, params); } catch (Exception e) { LogUtil.error(GroupDaoImpl.class.getName(), e, "Count Groups Error!"); } return 0L; } }