001/** 002 * Copyright 2005-2016 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.rice.krad.document; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.coreservice.framework.CoreFrameworkServiceLocator; 020import org.kuali.rice.coreservice.framework.parameter.ParameterService; 021import org.kuali.rice.kew.api.WorkflowDocument; 022import org.kuali.rice.krad.util.GlobalVariables; 023import org.kuali.rice.krad.util.KRADConstants; 024 025import java.io.Serializable; 026 027/** 028 * @author Kuali Rice Team (rice.collab@kuali.org) 029 */ 030public class DocumentPresentationControllerBase implements DocumentPresentationController, Serializable { 031 private static final long serialVersionUID = -9181864754090276024L; 032 033 private static transient ParameterService parameterService; 034 035 public boolean canInitiate(String documentTypeName) { 036 return true; 037 } 038 039 public boolean canEdit(Document document) { 040 boolean canEdit = false; 041 WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); 042 if (workflowDocument.isInitiated() 043 || workflowDocument.isSaved() 044 || workflowDocument.isEnroute() 045 || workflowDocument.isException()) { 046 canEdit = true; 047 } 048 049 return canEdit; 050 } 051 052 public boolean canAnnotate(Document document) { 053 return canEdit(document); 054 } 055 056 public boolean canReload(Document document) { 057 WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); 058 return (canEdit(document) && !workflowDocument.isInitiated()); 059 060 } 061 062 public boolean canClose(Document document) { 063 return true; 064 } 065 066 public boolean canSave(Document document) { 067 return canEdit(document); 068 } 069 070 public boolean canRoute(Document document) { 071 boolean canRoute = false; 072 WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); 073 if (workflowDocument.isInitiated() || workflowDocument.isSaved()) { 074 canRoute = true; 075 } 076 return canRoute; 077 } 078 079 public boolean canCancel(Document document) { 080 return canEdit(document); 081 } 082 083 public boolean canRecall(Document document) { 084 // Enroute - the most liberal approximation of recallability 085 // DocumentAuthorizer will perform finer-grained authorization 086 return document.getDocumentHeader().getWorkflowDocument().isEnroute(); 087 } 088 089 public boolean canCopy(Document document) { 090 boolean canCopy = false; 091 if (document.getAllowsCopy()) { 092 canCopy = true; 093 } 094 return canCopy; 095 } 096 097 @Override 098 public boolean canPerformRouteReport(Document document) { 099 return getParameterService().getParameterValueAsBoolean(KRADConstants.KNS_NAMESPACE, 100 KRADConstants.DetailTypes.DOCUMENT_DETAIL_TYPE, 101 KRADConstants.SystemGroupParameterNames.DEFAULT_CAN_PERFORM_ROUTE_REPORT_IND); 102 } 103 104 public boolean canAddAdhocRequests(Document document) { 105 return true; 106 } 107 108 public boolean canBlanketApprove(Document document) { 109 // check system parameter - if Y, use default workflow behavior: allow a user with the permission 110 // to perform the blanket approve action at any time 111 Boolean allowBlanketApproveNoRequest = getParameterService().getParameterValueAsBoolean( 112 KRADConstants.KNS_NAMESPACE, KRADConstants.DetailTypes.DOCUMENT_DETAIL_TYPE, 113 KRADConstants.SystemGroupParameterNames.ALLOW_ENROUTE_BLANKET_APPROVE_WITHOUT_APPROVAL_REQUEST_IND); 114 if (allowBlanketApproveNoRequest != null && allowBlanketApproveNoRequest.booleanValue()) { 115 return canEdit(document); 116 } 117 118 // otherwise, limit the display of the blanket approve button to only the initiator of the document 119 // (prior to routing) 120 WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); 121 if (canRoute(document) && StringUtils.equals(workflowDocument.getInitiatorPrincipalId(), 122 GlobalVariables.getUserSession().getPrincipalId())) { 123 return true; 124 } 125 126 // or to a user with an approval action request 127 if (workflowDocument.isApprovalRequested()) { 128 return true; 129 } 130 131 return false; 132 } 133 134 public boolean canApprove(Document document) { 135 return !canComplete(document); 136 } 137 138 public boolean canDisapprove(Document document) { 139 // most of the time, a person who can approve can disapprove 140 return canApprove(document); 141 } 142 143 public boolean canSendAdhocRequests(Document document) { 144 WorkflowDocument kualiWorkflowDocument = document.getDocumentHeader().getWorkflowDocument(); 145 return !(kualiWorkflowDocument.isInitiated() || kualiWorkflowDocument.isSaved()); 146 } 147 148 public boolean canSendNoteFyi(Document document) { 149 return true; 150 } 151 152 public boolean canEditDocumentOverview(Document document) { 153 WorkflowDocument kualiWorkflowDocument = document.getDocumentHeader().getWorkflowDocument(); 154 return (kualiWorkflowDocument.isInitiated() || kualiWorkflowDocument.isSaved()); 155 } 156 157 public boolean canFyi(Document document) { 158 return true; 159 } 160 161 public boolean canAcknowledge(Document document) { 162 return true; 163 } 164 165 public boolean canComplete(Document document) { 166 boolean docInInit = document.getDocumentHeader().getWorkflowDocument().isInitiated() || document.getDocumentHeader().getWorkflowDocument().isSaved(); 167 boolean completionRequested = document.getDocumentHeader().getWorkflowDocument().isCompletionRequested(); 168 if (completionRequested && !docInInit) { 169 return true; 170 } 171 return false; 172 } 173 174 protected ParameterService getParameterService() { 175 if (parameterService == null) { 176 parameterService = CoreFrameworkServiceLocator.getParameterService(); 177 } 178 return parameterService; 179 } 180}