View Javadoc

1   /*
2    * Copyright 2005-2007 The Kuali Foundation
3    * 
4    * 
5    * Licensed under the Educational Community License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    * 
9    * http://www.opensource.org/licenses/ecl2.php
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.kuali.rice.kew.postprocessor;
18  
19  import java.rmi.RemoteException;
20  
21  import org.kuali.rice.kew.dto.ActionTakenEventDTO;
22  import org.kuali.rice.kew.dto.AfterProcessEventDTO;
23  import org.kuali.rice.kew.dto.BeforeProcessEventDTO;
24  import org.kuali.rice.kew.dto.DeleteEventDTO;
25  import org.kuali.rice.kew.dto.DocumentLockingEventDTO;
26  import org.kuali.rice.kew.dto.DocumentRouteLevelChangeDTO;
27  import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO;
28  import org.kuali.rice.kew.exception.ResourceUnavailableException;
29  
30  
31  
32  /**
33   * A PostProcessor listens for events from the Workflow routing engine for it's DocumentType.
34   * It gives clients hooks into the routing process to perform operations at the various stages.
35   * Implementations of this Interface are potentially remotable, so this Interface uses 
36   * value objects. 
37   * 
38   * @author Kuali Rice Team (rice.collab@kuali.org)
39   */
40  public interface PostProcessorRemote {
41    
42    /**
43     * The document has changed route status. The docEvent contains the information about the change.
44     * This method should do what ever is appropriate for various route status changes to a document.
45     * The method should return true if the change is correct and all application actions as a result
46     * of the change are successful. It should return false if the application considers this an
47     * incorrect change.
48     *
49     * The method can throw a ResourceUnavailableException in order to requeue the
50     * document and try again later.
51     * @param statusChangeEvent
52     * @param msg any error message to be propagated back to users should be set here
53     * @return true if the status change is correct and application actions are successful
54     * later if this exception is thrown
55     * @see DocumentRouteStatusChange
56     */
57    public boolean doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent) throws RemoteException;
58  
59    /**
60     * The document has changed route level. The docEvent contains the information about the change.
61     * This method should do what ever is appropriate for various route level changes to a document.
62     * The method should return true if the change is correct and all application actions as a result
63     * of the change are successful. It should return false if the application considers this an
64     * incorrect change.
65     *
66     * The method can throw a ResourceUnavailableException in order to requeue the
67     * document and try again later.
68     * @param levelChangeEvent
69     * @param msg any error message to be propagated back to users should be set here
70     * @return true if the status change is correct and application actions are successful
71     * @throws java.lang.Exception A general Exception will put the document into Exception routing
72     * @throws ResourceUnavailableException requeue the document and try the change again
73     * later if this exception is thrown
74     * @see DocumentRouteLevelChangeDTO
75     */
76    public boolean doRouteLevelChange(DocumentRouteLevelChangeDTO levelChangeEvent) throws RemoteException;
77    
78    /**
79     * KEW is signaling that the document should be deleted. The application can reject this by
80     * returning false. If an Exception is thrown the docuemnt will go to exception routing. If
81     * a ResourceUnavailableException is thrown, the doc will be requeued and will try again later to
82     * delete the document.
83     * @param event
84     * @param message
85     * @return
86     * @throws java.lang.Exception A general Exception will put the document into Exception routing
87     * @throws ResourceUnavailableException requeue the document and try the change again
88     */
89    public boolean doDeleteRouteHeader(DeleteEventDTO event) throws RemoteException;
90    
91    /**
92     * KEW is signaling that the document has had an action taken on it by a user
93     * 
94     * @param event
95     * @return
96     * @throws RemoteException
97     */
98    public boolean doActionTaken(ActionTakenEventDTO event) throws RemoteException;
99    
100   /**
101    * The document is about to be processed by the Workflow engine.
102    * 
103    * @param event - holder for data from the engine's process
104    * @return true if the method is successful, false otherwise
105    * @throws java.lang.Exception A general Exception will put the document into Exception routing
106    */
107   public boolean beforeProcess(BeforeProcessEventDTO event) throws Exception;
108 
109   /**
110    * The document has just completed processing by the Workflow engine.
111    * 
112    * @param event - holder for data from the engine's process including whether the engine was successful or not
113    * @return true if the method is successful, false otherwise
114    * @throws java.lang.Exception A general Exception will put the document into Exception routing
115    */
116   public boolean afterProcess(AfterProcessEventDTO event) throws Exception;
117   
118   /**
119    * Executed prior to document locking in the workflow engine.  This method returns an array of document
120    * ids to lock prior to execution of the document in the workflow engine.  If the engine processing is
121    * going to result in updates to any other documents, they should be locked at the beginning of the engine
122    * processing transaction.  This method facilitates that.
123    * 
124    * <p>Note that, by default, the id of the document that is being processed by the engine is always
125    * locked.  So there is no need to return that document id in the array of document ids to lock.
126    * 
127    * @return an array of document ids to lock prior to execution of the workflow engine
128    */
129   public Long[] getDocumentIdsToLock(DocumentLockingEventDTO event) throws Exception;
130   
131 }