/******************************************************************************* * Copyright (c) 2012 Dmitry Tikhomirov. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Dmitry Tikhomirov - initial API and implementation ******************************************************************************/ package org.opensheet.server.dao.impl; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import org.hibernate.Hibernate; import org.hibernate.SessionFactory; import org.opensheet.server.dao.BranchDAO; import org.opensheet.server.dao.DepartmentDAO; import org.opensheet.shared.model.Assignment; import org.opensheet.shared.model.Department; import org.opensheet.shared.model.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @Repository public class DepartmentDAOImpl implements DepartmentDAO{ @Autowired private SessionFactory sessionFactory; @Autowired BranchDAO branchDAO; Logger logger = LoggerFactory.getLogger(DepartmentDAOImpl.class); /**params: any for all department , 1 for active, 0 for inactive * returns: List<Department> * */ @SuppressWarnings("unchecked") @Override @Transactional public List<Department> listDepartment(String s) { List<Department> departments; if(s.equalsIgnoreCase("any")){ departments = new ArrayList<Department>(sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u order by d.name").list()); }else{ departments = new ArrayList<Department>(sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u where d.status = ? order by d.name").setString(0, s).list()); } return departments; } @Override @Transactional public void updateDepartment(Department department){ Department d = (Department) sessionFactory.getCurrentSession().get(Department.class, new Integer(department.getId())); d.setName(department.getName()); d.setOwner(department.getOwner()); d.setStatus(department.getStatus()); d.setNote(department.getNote()); d.setFinished(department.getFinished()); d.setUpdated(new Date()); d.setBranch(branchDAO.getBranchById(department.getBranch().getId())); sessionFactory.getCurrentSession().saveOrUpdate(d); } @Override @Transactional public void addDepartment(Department department){ department.setStarted(new Date()); department.setUpdated(new Date()); sessionFactory.getCurrentSession().save(department); } @SuppressWarnings("unchecked") @Override @Transactional public List<User> getUsers(Department department) { List<User> user = sessionFactory.getCurrentSession().createQuery( "from User u join fetch u.userRate as r where u.department=? order by u.secondName") .setInteger(0, department.getId()).list(); return user; } @Override @Transactional public void setAssignemntToDepartment(Assignment assignment,List<Department> departments) { assignment.setDepartments(departments); } @Override @Transactional public Department getDepartmentById(Integer id) { Department department = (Department) sessionFactory.getCurrentSession().get(Department.class, new Integer(id)); return department; } @SuppressWarnings("unchecked") @Override @Transactional public List<Department> listDepartmentByBranch(String s, Integer branch) { List<Department> departments; if(s.equalsIgnoreCase("any")){ if(branch == 9999999){ departments = new ArrayList<Department>(sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u join fetch d.branch as b order by d.name").list()); }else{ departments = new ArrayList<Department>(sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u join fetch d.branch as b where d.branch = ? order by d.name").setInteger(0, branch).list()); } }else{ if(branch == 9999999){ departments = new ArrayList<Department>(sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u join fetch d.branch as b where d.status = ? order by d.name").setString(0, s).list()); }else{ departments = new ArrayList<Department>(sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u join fetch d.branch as b where d.status = ? and d.branch = ? order by d.name").setString(0, s).setInteger(1, branch).list()); } } return departments; } /** * @param user -- department manager * @return List<Department> of departments owned by this Department Manager */ @SuppressWarnings("unchecked") @Override @Transactional public List<Department> getDepartment(User user) { ArrayList<Department> departments = new ArrayList<Department>( sessionFactory.getCurrentSession().createQuery("from Department d join fetch d.owner as u" + " join fetch d.branch as b where d.owner=? order by d.name").setInteger(0, user.getId()).list()); return departments; } @Override @Transactional public List<User> getUserByAssignmentAndByDepartment(Assignment assignment,Department department) { List<User> users = new ArrayList<User>(); Hibernate.initialize(assignment.getUsers()); Hibernate.initialize(department.getUsers()); List<User> usersAssignment = assignment.getUsers(); Iterator<User> itr = department.getUsers().iterator(); while(itr.hasNext()){ User u = itr.next(); if(usersAssignment.contains(u) && u.getStatus() == true){ users.add(u); } } return users; } @Override @Transactional public List<User> getDepartmentManagerUsers(User user) { List<User> users = new ArrayList<User>(); for(Department d: getDepartment(user)){ for(User u: d.getUsers()){ if(!users.contains(u)){ users.add(u); } } } return users; } }