/******************************************************************************* * 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; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.opensheet.client.dto.AuthmethodDTO; import org.opensheet.client.dto.UserDTO; import org.opensheet.client.dto.UserRateDTO; import org.opensheet.client.services.UserService; import org.opensheet.server.dao.AuthDAO; import org.opensheet.server.dao.ImportUserFactory; import org.opensheet.server.dao.ImportUserFromExternalSource; import org.opensheet.server.dao.PermissionDAO; import org.opensheet.server.dao.UserDAO; import org.opensheet.server.utils.Comparators; import org.opensheet.shared.model.Authmethod; import org.opensheet.shared.model.Branch; import org.opensheet.shared.model.Department; import org.opensheet.shared.model.User; import org.opensheet.shared.model.Permission; import org.opensheet.shared.model.UserRate; import com.extjs.gxt.ui.client.data.BaseModel; import com.extjs.gxt.ui.client.data.BasePagingLoadResult; import com.extjs.gxt.ui.client.data.PagingLoadConfig; import com.extjs.gxt.ui.client.data.PagingLoadResult; import com.google.gwt.user.server.rpc.RemoteServiceServlet; @Service("UserService") public class UserServiceImpl extends RemoteServiceServlet implements UserService { @Autowired private UserDAO userDAO; @Autowired private PermissionDAO permissionDAO; @Autowired private AuthDAO authDAO; @Autowired ImportUserFactory importUserFactory; @Autowired private ImportUserFromExternalSource importUserFromExternalSource; /** * */ private static final long serialVersionUID = 1L; /*@TODO * Use Hibernate util to fetch lazy entetys * * * (non-Javadoc) * @see org.opensheet.client.services.UserService#getUsers(java.lang.String) */ @Override @Transactional public List<UserDTO> getUsers(String s) { //shitty code Map<Integer,Authmethod> authmethods = new HashMap<Integer,Authmethod>(); for(Authmethod a : authDAO.get()){ authmethods.put(a.getId(), a); } List<User> users = userDAO.listUser(s); List<UserDTO> usersDTO = new ArrayList<UserDTO>(users != null ? users.size() : 0); for(User u : users ){ UserDTO userDTO = new UserDTO(u); userDTO.setDepartment(u.getDepartment().getDepartmentDTO()); userDTO.setAuthmethod(new AuthmethodDTO(authmethods.get(u.getAuthmethod()))); usersDTO.add(userDTO); } return usersDTO; } @Override @Transactional public List<UserDTO> getUsersByRole(String s) { List<User> users = userDAO.getUsersByRole(s); List<UserDTO> usersDTO = new ArrayList<UserDTO>(users != null ? users.size() : 0); for(User u : users ){ UserDTO userDTO = new UserDTO(u); userDTO.setPermission(u.getPermission().getPermissionDTO()); usersDTO.add(userDTO); } return usersDTO; } @Override public void updateUser(UserDTO userDTO) { User user = new User(userDTO); UserRate userRate = new UserRate(userDTO.getUserRateDTO()); user.setAuthmethod(userDTO.getAuthmethod().getId()); user.setDepartment(userDTO.getDepartment().getDepartment()); user.setBranch(new Branch(userDTO.getBranch())); user.setUserRate(userRate); userDAO.updateUser(user); } @Override @Transactional public UserDTO getUser(Integer id) { User user = userDAO.getUser(id); UserDTO userDTO = new UserDTO(user); userDTO.setAuthmethod(new AuthmethodDTO(user.getAuthmethod())); userDTO.setDepartment(user.getDepartment().getDepartmentDTO()); userDTO.setUserRateDTO(new UserRateDTO(user.getUserRate())); return userDTO; } @Override @Transactional public void updateUserPermission(UserDTO userDTO) { Permission permission = new Permission(); permission.setAdmin(userDTO.getPermission().getAdmin()); permission.setPm(userDTO.getPermission().getPm()); permission.setFd(userDTO.getPermission().getFd()); permission.setDm(userDTO.getPermission().getDm()); User user = new User(userDTO); user.setPermission(permission); permissionDAO.updateUserPermission(user); } @Override public void addUser(UserDTO userDTO) { User user = new User(userDTO); user.setDepartment(userDTO.getDepartment().getDepartment()); user.setBranch(new Branch(userDTO.getBranch())); userDAO.addUser(user); } @Override @Transactional public PagingLoadResult<BaseModel> getUsersPermissions(PagingLoadConfig config) { Integer size = userDAO.listUser("1").size(); List<User> users = permissionDAO.getUsersPermissions(config); List<UserDTO> usersDTO = new ArrayList<UserDTO>(users != null ? users.size() : 0); List<BaseModel> bm = new ArrayList<BaseModel>(users != null ? users.size() : 0); for(User u: users){ BaseModel b = new BaseModel(); b.set("fullName", u.getFullName()); b.set("id", u.getId()); b.set("pm", u.getPermission().getPm()); b.set("dm", u.getPermission().getDm()); b.set("fd", u.getPermission().getFd()); b.set("admin", u.getPermission().getAdmin()); bm.add(b); } int start = config.getOffset(); int limit = usersDTO.size(); if (config.getLimit() > 0) { limit = Math.min(start + config.getLimit(), limit); } return new BasePagingLoadResult<BaseModel>(bm, config.getOffset(), size); } @Override public UserDTO getUserPermission(UserDTO user) { return null; } @Override @Transactional public UserDTO whoAmI() { User user = userDAO.whoIam(); UserDTO userDTO = new UserDTO(user); userDTO.setPermission(user.getPermission().getPermissionDTO()); return userDTO; } @Override @Transactional public List<UserDTO> getUsersAccordingOfAskersRoleByStatusAndByBranch(String status, Integer branch) { User user = userDAO.whoIam(); List<UserDTO> usersDTO; if(user.getPermission().getAdmin() == true){ return this.getUsersByBranch(status, branch); }else if(user.getPermission().getDm() == true){ List<User> users = new ArrayList<User>(0); for(Department d: userDAO.getManagedDepartments(user)){ if(branch == 9999999){ for(User u: d.getUsers()){ if(status.equals("any")){ if(u.getStatus()== true && users.contains(u) == false){ users.add(u); } }else if(status.equals("1")){ if(u.getStatus()== true && users.contains(u) == false){ users.add(u); } }else if(status.equals("0")){ if(u.getStatus()== false && users.contains(u) == false){ users.add(u); } } } }else if(d.getBranch().getId() == branch){ for(User u: d.getUsers()){ if(status.equals("any")){ if(u.getStatus()== true && users.contains(u) == false){ users.add(u); } }else if(status.equals("1")){ if(u.getStatus()== true && users.contains(u) == false){ users.add(u); } }else if(status.equals("0")){ if(u.getStatus()== false && users.contains(u) == false){ users.add(u); } } } } } /*add User to the list of employers */ if(users.contains(user) == false) users.add(user); usersDTO = new ArrayList<UserDTO>(users.size()); Collections.sort(users,Comparators.ComparatorUserName); for(User u: users){ usersDTO.add(new UserDTO(u)); } return usersDTO; } return Collections.emptyList(); } @Override public List<BaseModel> getUsersFromExternalStore(AuthmethodDTO storeType) { Authmethod authmethod = authDAO.get(storeType.getId()); List<BaseModel> usersDTO = new ArrayList<BaseModel>(); List<User> users = importUserFromExternalSource.get(authmethod); Collections.sort(users,Comparators.ComparatorUserName); for(User u: users){ BaseModel bm = new BaseModel(); bm.set("fullName",u.getFullName()); bm.set("giventName", u.getFirstName()); bm.set("sn", u.getSecondName()); bm.set("login", u.getLogin()); bm.set("email",u.getEmail() ); usersDTO.add(bm); } return usersDTO; } @Override public void setUsersFromExternalStore(List<BaseModel> users,AuthmethodDTO storeType) { for(BaseModel bm: users){ User u = new User(); u.setLogin(bm.get("login").toString()); u.setFirstName(bm.get("giventName").toString()); u.setSecondName(bm.get("sn").toString()); u.setEmail(bm.get("email").toString()); u.setDepartment(new Department(1)); u.setAuthmethod(storeType.getId()); u.setBranch(new Branch(1)); userDAO.addUser(u); } } @Override public Integer getUserSessionTimeout() { ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); HttpSession session = attr.getRequest().getSession(false); int timeout = session.getMaxInactiveInterval() * 1000; return timeout; } @Override @Transactional public List<UserDTO> getUsersByBranch(String s,Integer branch) { List<User> users = userDAO.getUsersByBranch(s, branch); List<UserDTO> usersDTO = new ArrayList<UserDTO>(users != null ? users.size() : 0); for(User u : users ){ UserDTO userDTO = new UserDTO(u); userDTO.setDepartment(u.getDepartment().getDepartmentDTO()); usersDTO.add(userDTO); } return usersDTO; } @Override public List<UserDTO> getUsersByBranchAndByDepartment(String criteria, Integer branch, Integer selectedDepartment) { List<User> users = userDAO.getUsersByBranchAndByDepartment(criteria, branch,selectedDepartment); List<UserDTO> usersDTO = new ArrayList<UserDTO>(users != null ? users.size() : 0); for(User u : users ){ UserDTO userDTO = new UserDTO(u); userDTO.setDepartment(u.getDepartment().getDepartmentDTO()); usersDTO.add(userDTO); } return usersDTO; } @Override public void setLang(UserDTO userDTO) { User user = new User(userDTO); userDAO.setLang(user); } @Override public void setUserInternalRate(Integer userId, Integer rate) { User user = new User(userId); userDAO.setUserInternalRate(user,rate); } }