package org.openiam.webadmin.res;
/*
* Copyright 2009, OpenIAM LLC
* This file is part of the OpenIAM Identity and Access Management Suite
*
* OpenIAM Identity and Access Management Suite is free software:
* you can redistribute it and/or modify
* it under the terms of the Lesser GNU General Public License
* version 3 as published by the Free Software Foundation.
*
* OpenIAM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Lesser GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenIAM. If not, see <http://www.gnu.org/licenses/>. *
*/
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openiam.idm.srvc.menu.dto.Menu;
import org.openiam.idm.srvc.menu.ws.NavigatorDataWebService;
import org.openiam.idm.srvc.mngsys.dto.ApproverAssociation;
import org.openiam.idm.srvc.mngsys.service.ManagedSystemDataService;
import org.openiam.idm.srvc.policy.service.PolicyDataService;
import org.openiam.idm.srvc.res.dto.Resource;
import org.openiam.idm.srvc.res.service.ResourceDataService;
import org.openiam.idm.srvc.role.dto.Role;
import org.openiam.idm.srvc.role.ws.RoleDataWebService;
import org.openiam.idm.srvc.user.dto.User;
import org.openiam.idm.srvc.user.ws.UserDataWebService;
import org.openiam.webadmin.util.AuditHelper;
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.mvc.SimpleFormController;
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.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;
/**
* Controller to manage connectivity information for a managed system
*
* @author suneet
*/
public class ResourceApprovalFlowController extends CancellableFormController {
private static final Log log = LogFactory.getLog(ResourceApprovalFlowController.class);
protected ResourceDataService resourceDataService;
protected NavigatorDataWebService navigationDataService;
private PolicyDataService policyDataService;
private String redirectView;
private ManagedSystemDataService managedSysService;
private UserDataWebService userMgr;
protected AuditHelper auditHelper;
protected RoleDataWebService roleDataService;
public ResourceApprovalFlowController() {
super();
}
@Override
protected ModelAndView onCancel(Object command) throws Exception {
return new ModelAndView(new RedirectView(getCancelView(),true));
}
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true));
}
@Override
protected Object formBackingObject(HttpServletRequest request)
throws Exception {
String mode = request.getParameter("mode");
if (mode != null && mode.equalsIgnoreCase("1")) {
request.setAttribute("msg", "Information has been successfully updated.");
}
HttpSession session = request.getSession();
String userId = (String) session.getAttribute("userId");
String resId = request.getParameter("objId");
log.info("ReourceId using objId param = " + resId);
if (resId != null && resId.length() > 0) {
request.setAttribute("objId", resId);
} else {
resId = request.getParameter("resId");
request.setAttribute("objId", resId);
}
log.info("Loading resourceId = " + resId);
String menuGrp = request.getParameter("menugrp");
Resource res = resourceDataService.getResource(resId);
List<ApproverAssociation> assocList = managedSysService.getAllApproversByRequestType(res.getResourceId());
if (assocList == null) {
assocList = new ArrayList<ApproverAssociation>();
}
log.info("Assoc List:" + assocList.size());
ApproverAssociation newAssoc = new ApproverAssociation();
newAssoc.setApproverAssocId("NEW");
assocList.add(newAssoc);
// add the user names in the approval flow
if (assocList != null) {
for (ApproverAssociation assoc : assocList) {
if (assoc.getApproverUserId() != null && assoc.getApproverUserId().length() > 0) {
User usr = this.userMgr.getUserWithDependent(assoc.getApproverUserId(), false).getUser();
String name = null;
if (usr != null) {
if (usr.getFirstName() != null) {
name = usr.getFirstName();
}
if (usr.getLastName() != null) {
name = name + " " + usr.getLastName();
}
assoc.setApproverName(name);
}
}
if (assoc.getNotifyUserOnApprove() != null && assoc.getNotifyUserOnApprove().length() > 0) {
User usr = this.userMgr.getUserWithDependent(assoc.getNotifyUserOnApprove(), false).getUser();
String name = null;
if (usr != null) {
if (usr.getFirstName() != null) {
name = usr.getFirstName();
}
if (usr.getLastName() != null) {
name = name + " " + usr.getLastName();
}
assoc.setNotifyUserOnApproveName(name);
}
}
if (assoc.getNotifyUserOnReject() != null && assoc.getNotifyUserOnReject().length() > 0) {
User usr = this.userMgr.getUserWithDependent(assoc.getNotifyUserOnReject(), false).getUser();
String name = null;
if (usr != null) {
if (usr.getFirstName() != null) {
name = usr.getFirstName();
}
if (usr.getLastName() != null) {
name = name + " " + usr.getLastName();
}
assoc.setNotifyUserOnRejectName(name);
}
}
if (assoc.getApproverRoleId() != null && assoc.getApproverRoleId().length() > 0) {
assoc.setApproverRoleId( assoc.getApproverRoleDomain() + "*" + assoc.getApproverRoleId() );
}
}
}
List<Role> roleList = roleDataService.getAllRoles().getRoleList();
List<Menu> level3MenuList = navigationDataService.menuGroupByUser(menuGrp, userId, "en").getMenuList();
request.setAttribute("menuL3", level3MenuList);
ResourceApprovalFlowCommand cmd = new ResourceApprovalFlowCommand();
cmd.setRoleList(roleList);
cmd.setApproverAssoc(assocList);
cmd.setResourceName(res.getName());
cmd.setResId(resId);
cmd.setManagedSysId(res.getManagedSysId());
return cmd;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
log.info("onSubmit called");
ResourceApprovalFlowCommand assocCmd = (ResourceApprovalFlowCommand) command;
String resId = assocCmd.getResId();
String userId = (String)request.getSession().getAttribute("userId");
String domainId = (String)request.getSession().getAttribute("domainid");
String login = (String)request.getSession().getAttribute("login");
Resource res = resourceDataService.getResource(resId);
String btn = request.getParameter("btn");
if (btn.equalsIgnoreCase("Delete")) {
List<ApproverAssociation> assocList = assocCmd.getApproverAssoc();
if (assocList != null) {
for (ApproverAssociation a : assocList) {
if (a.getSelected()) {
String assocId = a.getApproverAssocId();
if (!assocId.equalsIgnoreCase("NEW")) {
managedSysService.removeApproverAssociation(assocId);
auditHelper.addLog("MODIFY", domainId, login,
"WEBCONSOLE", userId, "0", "RESOURCE", resId,
null, "SUCCESS", null, "DELETE APPROVER",
a.getApproverUserId(), null, null,
res.getName(), request.getRemoteHost());
}
}
}
}
} else {
List<ApproverAssociation> assocList = assocCmd.getApproverAssoc();
if (assocList != null) {
for (ApproverAssociation a : assocList) {
if (a.getApproverRoleId() != null && a.getApproverRoleId().length() > 0) {
String roleStr = a.getApproverRoleId();
StringTokenizer st = new StringTokenizer(roleStr, "*");
if (st.hasMoreTokens()) {
a.setApproverRoleDomain(st.nextToken());
}
if (st.hasMoreElements()) {
a.setApproverRoleId(st.nextToken());
}
}else {
a.setApproverRoleDomain(null);
a.setApproverRoleId(null);
}
if (a.getApproverAssocId() == null || a.getApproverAssocId().equalsIgnoreCase("NEW")) {
// new
if (a.getAssociationType() != null && a.getAssociationType().length() > 0) {
a.setApproverAssocId(null);
a.setRequestType(resId);
if (a.getApproverLevel() == null) {
a.setApproverLevel(1);
}
managedSysService.addApproverAssociation(a);
auditHelper.addLog("MODIFY", domainId, login,
"WEBCONSOLE", userId, "0", "RESOURCE", resId,
null, "SUCCESS", null, "ADD APPROVER",
a.getApproverUserId(), null, null,
res.getName(), request.getRemoteHost());
}
} else {
// update
if (a.getAssociationType() != null && a.getAssociationType().length() > 0) {
if (a.getApproverLevel() == null) {
a.setApproverLevel(1);
}
managedSysService.updateApproverAssociation(a);
auditHelper.addLog("MODIFY", domainId, login,
"WEBCONSOLE", userId, "0", "RESOURCE", resId,
null, "SUCCESS", null, "MODIFY APPROVER",
a.getApproverUserId(), null, null,
res.getName(), request.getRemoteHost());
}
}
}
}
}
log.info("refreshing attr list for resourceId=" + resId);
String view = redirectView + "&menuid=RESAPPROVER&menugrp=SECURITY_RES&objId=" + resId;
log.info("redirecting to=" + view);
return new ModelAndView(new RedirectView(view, true));
}
public ResourceDataService getResourceDataService() {
return resourceDataService;
}
public void setResourceDataService(ResourceDataService resourceDataService) {
this.resourceDataService = resourceDataService;
}
public NavigatorDataWebService getNavigationDataService() {
return navigationDataService;
}
public void setNavigationDataService(
NavigatorDataWebService navigationDataService) {
this.navigationDataService = navigationDataService;
}
public PolicyDataService getPolicyDataService() {
return policyDataService;
}
public void setPolicyDataService(PolicyDataService policyDataService) {
this.policyDataService = policyDataService;
}
public String getRedirectView() {
return redirectView;
}
public void setRedirectView(String redirectView) {
this.redirectView = redirectView;
}
public ManagedSystemDataService getManagedSysService() {
return managedSysService;
}
public void setManagedSysService(ManagedSystemDataService managedSysService) {
this.managedSysService = managedSysService;
}
public UserDataWebService getUserMgr() {
return userMgr;
}
public void setUserMgr(UserDataWebService userMgr) {
this.userMgr = userMgr;
}
public AuditHelper getAuditHelper() {
return auditHelper;
}
public void setAuditHelper(AuditHelper auditHelper) {
this.auditHelper = auditHelper;
}
public RoleDataWebService getRoleDataService() {
return roleDataService;
}
public void setRoleDataService(RoleDataWebService roleDataService) {
this.roleDataService = roleDataService;
}
}