001 package org.kuali.ole.license.controller; 002 003 import org.kuali.ole.DataCarrierService; 004 import org.kuali.ole.OLEConstants; 005 import org.kuali.ole.license.bo.OleLicenseRequestBo; 006 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 007 import org.kuali.rice.kew.actionitem.ActionItem; 008 import org.kuali.rice.kew.actionrequest.ActionRequestValue; 009 import org.kuali.rice.kew.actionrequest.service.ActionRequestService; 010 import org.kuali.rice.kew.api.document.DocumentStatus; 011 import org.kuali.rice.kew.service.KEWServiceLocator; 012 import org.kuali.rice.kim.api.identity.Person; 013 import org.kuali.rice.krad.document.Document; 014 import org.kuali.rice.krad.maintenance.MaintenanceDocument; 015 import org.kuali.rice.krad.maintenance.MaintenanceDocumentAuthorizerBase; 016 import java.util.List; 017 018 /** 019 * LicenseMaintenanceDocumentAuthorizerBase authorises permission for License Maintenance Document. 020 */ 021 public class LicenseMaintenanceDocumentAuthorizerBase extends MaintenanceDocumentAuthorizerBase { 022 public DataCarrierService dataCarrierService = GlobalResourceLoader.getService(OLEConstants.DATA_CARRIER_SERVICE); 023 /** 024 * Check user has credential to modify maintenanceDocument. 025 * @param document 026 * @param user 027 * @return boolean 028 */ 029 @Override 030 public boolean canEdit(Document document, Person user) { 031 boolean canEdit = super.canEdit(document,user); 032 String statusCode = document.getDocumentHeader().getWorkflowDocument().getStatus().getCode(); 033 MaintenanceDocument maintenanceDocument = (MaintenanceDocument) document; 034 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)maintenanceDocument.getNewMaintainableObject().getDataObject(); 035 canEdit &=oleLicenseRequestBo.getAssignee()!=null && 036 !(statusCode.equalsIgnoreCase(DocumentStatus.INITIATED.getCode())||statusCode.equalsIgnoreCase(DocumentStatus.SAVED.getCode()))? 037 oleLicenseRequestBo.getAssignee().equalsIgnoreCase(user.getPrincipalId()):true; 038 String canEditStr = null; 039 String routeHeaderId = document.getDocumentHeader().getDocumentNumber(); 040 if(statusCode.equalsIgnoreCase(DocumentStatus.SAVED.getCode())){ 041 ActionRequestService actionReqSrv = KEWServiceLocator.getActionRequestService(); 042 List<ActionRequestValue> actionReqValues = actionReqSrv.findAllPendingRequests(routeHeaderId); 043 for(ActionRequestValue actionRequest:actionReqValues){ 044 List<ActionItem> actionItems = actionRequest.getActionItems(); 045 canEditStr = actionItems!=null && actionItems.size()>0? actionItems.get(0).getPrincipalId():null; 046 } 047 return (oleLicenseRequestBo.getAssignee()!=null && oleLicenseRequestBo.getAssignee().equalsIgnoreCase(user.getPrincipalId())) || 048 (canEditStr!=null && canEditStr.equalsIgnoreCase(user.getPrincipalId())); 049 } 050 return canEdit; 051 } 052 public boolean canSave(Document document, Person user) { 053 boolean canSave = super.canSave(document,user); 054 String statusCode = document.getDocumentHeader().getWorkflowDocument().getStatus().getCode(); 055 MaintenanceDocument maintenanceDocument = (MaintenanceDocument) document; 056 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)maintenanceDocument.getNewMaintainableObject().getDataObject(); 057 String canSaveStr = null; 058 String routeHeaderId = document.getDocumentHeader().getDocumentNumber(); 059 if(statusCode.equalsIgnoreCase(DocumentStatus.SAVED.getCode())){ 060 ActionRequestService actionReqSrv = KEWServiceLocator.getActionRequestService(); 061 List<ActionRequestValue> actionReqValues = actionReqSrv.findAllPendingRequests(routeHeaderId); 062 for(ActionRequestValue actionRequest:actionReqValues){ 063 List<ActionItem> actionItems = actionRequest.getActionItems(); 064 canSaveStr = actionItems!=null && actionItems.size()>0? actionItems.get(0).getPrincipalId():null; 065 } 066 return (oleLicenseRequestBo.getAssignee()!=null && oleLicenseRequestBo.getAssignee().equalsIgnoreCase(user.getPrincipalId())) || 067 (canSaveStr!=null && canSaveStr.equalsIgnoreCase(user.getPrincipalId())); 068 } 069 return canSave; 070 } 071 072 public boolean canRoute(Document document, Person user) { 073 boolean canRoute = super.canRoute(document, user); 074 String statusCode = document.getDocumentHeader().getWorkflowDocument().getStatus().getCode(); 075 MaintenanceDocument maintenanceDocument = (MaintenanceDocument) document; 076 OleLicenseRequestBo oleLicenseRequestBo = (OleLicenseRequestBo)maintenanceDocument.getNewMaintainableObject().getDataObject(); 077 String canRouteStr = null; 078 String routeHeaderId = document.getDocumentHeader().getDocumentNumber(); 079 if(statusCode.equalsIgnoreCase(DocumentStatus.SAVED.getCode())){ 080 ActionRequestService actionReqSrv = KEWServiceLocator.getActionRequestService(); 081 List<ActionRequestValue> actionReqValues = actionReqSrv.findAllPendingRequests(routeHeaderId); 082 for(ActionRequestValue actionRequest:actionReqValues){ 083 List<ActionItem> actionItems = actionRequest.getActionItems(); 084 canRouteStr = actionItems!=null && actionItems.size()>0? actionItems.get(0).getPrincipalId():null; 085 } 086 return (oleLicenseRequestBo.getAssignee()!=null && oleLicenseRequestBo.getAssignee().equalsIgnoreCase(user.getPrincipalId())) || 087 (canRouteStr!=null && canRouteStr.equalsIgnoreCase(user.getPrincipalId())); 088 } 089 return canRoute; 090 } 091 }