package org.openiam.webadmin.user; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openiam.base.AttributeOperationEnum; import org.openiam.base.ws.ResponseStatus; import org.openiam.idm.srvc.menu.dto.Menu; import org.openiam.idm.srvc.menu.ws.NavigatorDataWebService; import org.openiam.idm.srvc.org.dto.Organization; import org.openiam.idm.srvc.org.service.OrganizationDataService; import org.openiam.idm.srvc.role.dto.Role; import org.openiam.idm.srvc.role.ws.RoleDataWebService; import org.openiam.idm.srvc.role.ws.RoleListResponse; import org.openiam.idm.srvc.user.dto.User; import org.openiam.idm.srvc.user.ws.UserDataWebService; import org.openiam.idm.srvc.user.ws.UserResponse; import org.openiam.provision.dto.ProvisionUser; import org.openiam.provision.service.ProvisionService; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.validation.BindException; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.CancellableFormController; import org.springframework.web.servlet.view.RedirectView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.text.SimpleDateFormat; import java.util.*; public class UserOrgController extends CancellableFormController { protected OrganizationDataService orgManager; protected NavigatorDataWebService navigationDataService; protected String redirectView; protected ProvisionService provRequestService; protected UserDataWebService userMgr; private static final Log log = LogFactory.getLog(UserOrgController.class); public UserOrgController() { super(); } @Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"),true) ); } @Override protected ModelAndView onCancel(Object command) throws Exception { return new ModelAndView(new RedirectView(getCancelView(),true)); } @Override protected Map referenceData(HttpServletRequest request) throws Exception { log.info("refernceData called."); Map<Object, Object> dataMap = new HashMap<Object, Object>(); return dataMap; } @Override protected Object formBackingObject(HttpServletRequest request) throws Exception { UserOrgCommand orgCmd = new UserOrgCommand(); HttpSession session = request.getSession(); String userId = (String)session.getAttribute("userId"); String menuGrp = request.getParameter("menugrp"); String personId = request.getParameter("personId"); // get the level 3 menu List<Menu> level3MenuList = navigationDataService.menuGroupByUser(menuGrp, userId, "en").getMenuList(); request.setAttribute("menuL3", level3MenuList); request.setAttribute("personId", personId); orgCmd.setPerId(personId); List<Organization> fullList = new ArrayList<Organization>(); List<Organization> orgList = orgManager.getOrganizationList(null, "ACTIVE"); List<Organization> userAffiliations = orgManager.getOrganizationsForUser(personId); if (userAffiliations != null && !userAffiliations.isEmpty()) { for (Organization o : orgList) { boolean found = false; for (Organization userOrg : userAffiliations) { if (userOrg.getOrgId().equalsIgnoreCase(o.getOrgId())) { userOrg.setSelected(true); fullList.add(userOrg); found = true; } } if (!found) { fullList.add(o); } } }else { fullList.addAll(orgList); } orgCmd.setOrgList(fullList); return orgCmd; } @Override protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { System.out.println("onSubmit for UserOrgController..."); User usr = null; UserOrgCommand orgCmd = (UserOrgCommand)command; List<Organization> currentOrgList = null; HttpSession session = request.getSession(); // get the current user object String personId = orgCmd.getPerId(); System.out.println("PersonId=" + personId); System.out.println("Org List =" + orgCmd.getOrgList()); UserResponse usrResp = userMgr.getUserWithDependent(personId, true); if (usrResp.getStatus() == ResponseStatus.SUCCESS ) { usr = usrResp.getUser(); } System.out.println("UserOrgController: onsubmit found.."); ProvisionUser pUser = new ProvisionUser(usr); currentOrgList = orgManager.getOrganizationsForUser(personId); List<Organization> newOrgList = orgCmd.getOrgList(); List<Organization> provOrgList = new ArrayList<Organization>(); if ( newOrgList != null) { for (Organization o : newOrgList) { if (o.getSelected()) { provOrgList.add(o); } } } pUser.setUserAffiliations(provOrgList); provRequestService.modifyUser(pUser); return new ModelAndView(new RedirectView(redirectView+"&mode=1", true)); } private boolean isCurrentOrgInList(Organization curOrg, List<Organization> newOrgList) { if (newOrgList != null) { for ( Organization o : newOrgList) { if (o.getOrgId().equals(curOrg.getOrgId())) { System.out.println("-Affiliation found in currentList=" + curOrg.getOrgId()); return true; } } } log.info("-Organization not found in currentList=" + curOrg.getOrgId()); return false; } public NavigatorDataWebService getNavigationDataService() { return navigationDataService; } public void setNavigationDataService( NavigatorDataWebService navigationDataService) { this.navigationDataService = navigationDataService; } public String getRedirectView() { return redirectView; } public void setRedirectView(String redirectView) { this.redirectView = redirectView; } public ProvisionService getProvRequestService() { return provRequestService; } public void setProvRequestService(ProvisionService provRequestService) { this.provRequestService = provRequestService; } public UserDataWebService getUserMgr() { return userMgr; } public void setUserMgr(UserDataWebService userMgr) { this.userMgr = userMgr; } public OrganizationDataService getOrgManager() { return orgManager; } public void setOrgManager(OrganizationDataService orgManager) { this.orgManager = orgManager; } }