package org.openiam.webadmin.res; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openiam.idm.srvc.batch.dto.BatchTask; import org.openiam.idm.srvc.batch.service.BatchDataService; import org.openiam.idm.srvc.menu.dto.Menu; import org.openiam.idm.srvc.menu.ws.NavigatorDataWebService; import org.openiam.idm.srvc.mngsys.dto.ManagedSys; import org.openiam.idm.srvc.recon.dto.ReconciliationConfig; import org.openiam.idm.srvc.recon.dto.ReconciliationSituation; import org.openiam.idm.srvc.recon.ws.ReconciliationWebService; 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.*; /** * Controller for the new hire form. * * @author suneet */ public class ReconConfigurationController extends CancellableFormController { protected String redirectView; protected NavigatorDataWebService navigationDataService; protected ReconciliationWebService reconcileService; protected BatchDataService batchDataService; private static final Log log = LogFactory.getLog(ReconConfigurationController.class); public ReconConfigurationController() { 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 Object formBackingObject(HttpServletRequest request) throws Exception { HttpSession session = request.getSession(); String userId = (String) session.getAttribute("userId"); String menuGrp = request.getParameter("menugrp"); String resId = request.getParameter("objId"); if (resId != null && resId.length() > 0) { request.setAttribute("objId", resId); } ReconConfigurationCommand cmd = new ReconConfigurationCommand(); ReconciliationConfig config = reconcileService.getConfigByResource(resId).getConfig(); if (config == null) { cmd.getConfig().setResourceId(resId); cmd.getSituationList().add(new ReconciliationSituation(null, "Match Found")); cmd.getSituationList().add(new ReconciliationSituation(null, "Resource Delete")); cmd.getSituationList().add(new ReconciliationSituation(null, "IDM Delete")); cmd.getSituationList().add(new ReconciliationSituation(null, "IDM Not Found")); cmd.getSituationList().add(new ReconciliationSituation(null, "IDM Changed")); cmd.getSituationList().add(new ReconciliationSituation(null, "Resource Changed")); } else { // move set to a list cmd.setConfig(config); List<ReconciliationSituation> situationList = new ArrayList<ReconciliationSituation>(); for (ReconciliationSituation s : config.getSituationSet()) { situationList.add(s); } cmd.setSituationList(situationList); } List<Menu> level3MenuList = navigationDataService.menuGroupByUser(menuGrp, userId, "en").getMenuList(); request.setAttribute("menuL3", level3MenuList); return cmd; } protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { log.debug("onSubmit called"); ReconConfigurationCommand configCommand = (ReconConfigurationCommand) command; ManagedSys sys; ReconciliationConfig config = configCommand.getConfig(); List<ReconciliationSituation> situationList = configCommand.getSituationList(); String btn = request.getParameter("btn"); String configId = config.getReconConfigId(); if (btn != null && btn.equalsIgnoreCase("Delete")) { reconcileService.removeConfig(configId); // remove the synch job that is linked to it. String name = "Reconcil:" + configId; // check if a batch object for this already exists BatchTask task = batchDataService.getTaskByName(name); if (task != null) { batchDataService.removeBatchTask(task.getTaskId()); } ModelAndView mav = new ModelAndView("/deleteconfirm"); mav.addObject("msg", "Configuration has been successfully deleted."); return mav; } if (config.getReconConfigId() == null || config.getReconConfigId().length() == 0) { // new log.info("Creating new configuration.."); config.setReconConfigId(null); // build the set of situation objects Set<ReconciliationSituation> situationSet = new HashSet<ReconciliationSituation>(); for (ReconciliationSituation s : situationList) { s.setReconConfigId(null); s.setReconSituationId(null); situationSet.add(s); } config.setSituationSet(situationSet); configId = reconcileService.addConfig(config).getConfig().getReconConfigId(); } else { // existing record Set<ReconciliationSituation> situationSet = new HashSet<ReconciliationSituation>(); for (ReconciliationSituation s : situationList) { situationSet.add(s); } config.setSituationSet(situationSet); reconcileService.updateConfig(config); } // update the batch configuration if (configId != null) { String name = "Reconcil:" + configId; // check if a batch object for this already exists BatchTask task = batchDataService.getTaskByName(name); if (task == null) { task = new BatchTask(); task.setTaskName(name); task.setTaskId(null); task.setParam1(configId); task.setTaskUrl("batch/reconciliation.groovy"); } if (config.getFrequency() == null || config.getFrequency().length() == 0) { task.setFrequencyUnitOfMeasure(null); task.setEnabled(0); }else{ task.setFrequencyUnitOfMeasure(config.getFrequency()); task.setEnabled(1); } if (task.getTaskId() == null) { this.batchDataService.addBatchTask(task); }else { batchDataService.upateBatchTask(task); } } String view = redirectView + "?mode=1&menuid=RECONCILCONFIG&menugrp=SECURITY_RES&objId=" + configCommand.getConfig().getResourceId(); log.info("redirecting to=" + view); return new ModelAndView(new RedirectView(view, true)); } public String getRedirectView() { return redirectView; } public void setRedirectView(String redirectView) { this.redirectView = redirectView; } public ReconciliationWebService getReconcileService() { return reconcileService; } public void setReconcileService(ReconciliationWebService reconcileService) { this.reconcileService = reconcileService; } public NavigatorDataWebService getNavigationDataService() { return navigationDataService; } public void setNavigationDataService(NavigatorDataWebService navigationDataService) { this.navigationDataService = navigationDataService; } public BatchDataService getBatchDataService() { return batchDataService; } public void setBatchDataService(BatchDataService batchDataService) { this.batchDataService = batchDataService; } }