001 /** 002 * Copyright 2005-2013 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 */ 016 package org.kuali.rice.kew.actions; 017 018 import org.kuali.rice.kew.api.WorkflowDocument; 019 import org.kuali.rice.kew.api.WorkflowDocumentFactory; 020 import org.kuali.rice.kew.api.WorkflowRuntimeException; 021 import org.kuali.rice.kew.api.action.ActionType; 022 import org.kuali.rice.kew.api.exception.WorkflowException; 023 import org.kuali.rice.kew.framework.postprocessor.*; 024 import org.kuali.rice.kew.framework.postprocessor.AfterProcessEvent; 025 import org.kuali.rice.kew.framework.postprocessor.BeforeProcessEvent; 026 import org.kuali.rice.kew.framework.postprocessor.DeleteEvent; 027 import org.kuali.rice.kew.framework.postprocessor.DocumentLockingEvent; 028 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteLevelChange; 029 import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange; 030 import org.kuali.rice.kew.framework.postprocessor.ProcessDocReport; 031 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 032 033 import java.util.ArrayList; 034 import java.util.Arrays; 035 import java.util.List; 036 import java.util.Set; 037 038 039 /** 040 * This is a post processor class used for a Super User Test 041 * 042 * @author Kuali Rice Team (rice.collab@kuali.org) 043 * 044 */ 045 public class SuperUserActionInvalidPostProcessor implements PostProcessor { 046 047 private static final String USER_AUTH_ID = "rkirkend"; 048 049 /** 050 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 051 */ 052 public ProcessDocReport doActionTaken(org.kuali.rice.kew.framework.postprocessor.ActionTakenEvent event) throws Exception { 053 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), event.getDocumentId()))) { 054 return new ProcessDocReport(true, ""); 055 } 056 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 057 } 058 059 /** 060 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 061 */ 062 public ProcessDocReport afterActionTaken(ActionType performed, org.kuali.rice.kew.framework.postprocessor.ActionTakenEvent event) throws Exception { 063 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), event.getDocumentId()))) { 064 return new ProcessDocReport(true, ""); 065 } 066 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 067 } 068 069 /** 070 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 071 */ 072 public ProcessDocReport doDeleteRouteHeader(DeleteEvent event) throws Exception { 073 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), event.getDocumentId()))) { 074 return new ProcessDocReport(true, ""); 075 } 076 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 077 } 078 079 /** 080 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 081 */ 082 public ProcessDocReport doRouteLevelChange(DocumentRouteLevelChange levelChangeEvent) throws Exception { 083 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), levelChangeEvent.getDocumentId()))) { 084 return new ProcessDocReport(true, ""); 085 } 086 if ("WorkflowDocument2".equals(levelChangeEvent.getNewNodeName())) { 087 return new ProcessDocReport(true, ""); 088 } 089 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 090 } 091 092 /** 093 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 094 */ 095 public ProcessDocReport doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) throws Exception { 096 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), statusChangeEvent.getDocumentId()))) { 097 return new ProcessDocReport(true, ""); 098 } 099 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 100 } 101 102 /** 103 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 104 */ 105 public ProcessDocReport beforeProcess(BeforeProcessEvent beforeProcessEvent) throws Exception { 106 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), beforeProcessEvent.getDocumentId()))) { 107 return new ProcessDocReport(true, ""); 108 } 109 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 110 } 111 112 /** 113 * THIS METHOD WILL THROW AN EXCEPTION IF OLD ROUTE NODE IS 'WorkflowTemplate' 114 */ 115 public ProcessDocReport afterProcess(AfterProcessEvent afterProcessEvent) throws Exception { 116 if (isDocumentPostProcessable(WorkflowDocumentFactory.loadDocument(getPrincipalId(USER_AUTH_ID), afterProcessEvent.getDocumentId()), Arrays.asList(new String[]{"WorkflowDocument2"}))) { 117 return new ProcessDocReport(true, ""); 118 } 119 throw new WorkflowRuntimeException("Post Processor should never be called in this instance"); 120 } 121 122 /** 123 * @see org.kuali.rice.kew.framework.postprocessor.PostProcessor#getDocumentIdsToLock(org.kuali.rice.kew.framework.postprocessor.DocumentLockingEvent) 124 */ 125 public List<String> getDocumentIdsToLock(DocumentLockingEvent lockingEvent) throws Exception { 126 return null; 127 } 128 129 private boolean isDocumentPostProcessable(WorkflowDocument doc) throws WorkflowException { 130 return isDocumentPostProcessable(doc, new ArrayList<String>()); 131 } 132 133 private boolean isDocumentPostProcessable(WorkflowDocument doc, List<String> validNodeNames) throws WorkflowException { 134 Set<String> nodeNames = doc.getNodeNames(); 135 if (nodeNames != null && nodeNames.size() > 0) { 136 String nodeName = nodeNames.iterator().next(); 137 return validNodeNames.contains(nodeName) || (nodeName.equals("AdHoc")) || (nodeName.equals("WorkflowDocument")); 138 } 139 return false; 140 } 141 142 private String getPrincipalId(String principalName) { 143 return KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(principalName).getPrincipalId(); 144 } 145 }