Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
Document |
|
| 1.0;1 |
1 | /* | |
2 | * Copyright 2005-2007 The Kuali Foundation | |
3 | * | |
4 | * Licensed under the Educational Community License, Version 2.0 (the "License"); | |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at | |
7 | * | |
8 | * http://www.opensource.org/licenses/ecl2.php | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
15 | */ | |
16 | package org.kuali.rice.kns.document; | |
17 | ||
18 | import java.util.List; | |
19 | import java.util.Map; | |
20 | ||
21 | import org.kuali.rice.kew.dto.ActionTakenEventDTO; | |
22 | import org.kuali.rice.kew.dto.DocumentRouteLevelChangeDTO; | |
23 | import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO; | |
24 | import org.kuali.rice.kim.bo.Person; | |
25 | import org.kuali.rice.kns.bo.AdHocRoutePerson; | |
26 | import org.kuali.rice.kns.bo.AdHocRouteWorkgroup; | |
27 | import org.kuali.rice.kns.bo.DocumentHeader; | |
28 | import org.kuali.rice.kns.bo.PersistableBusinessObject; | |
29 | import org.kuali.rice.kns.document.authorization.PessimisticLock; | |
30 | import org.kuali.rice.kns.exception.ValidationException; | |
31 | import org.kuali.rice.kns.rule.event.KualiDocumentEvent; | |
32 | import org.kuali.rice.kns.service.DocumentSerializerService; | |
33 | import org.kuali.rice.kns.util.documentserializer.PropertySerializabilityEvaluator; | |
34 | import org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase; | |
35 | import org.kuali.rice.kns.workflow.KualiDocumentXmlMaterializer; | |
36 | ||
37 | ||
38 | /** | |
39 | * This is the Document interface. All entities that are regarded as "eDocs" in the system, including Maintenance documents and | |
40 | * Transaction Processing documents should implement this interface as it defines methods that are necessary to interact with the | |
41 | * underlying frameworks and components (i.e. attachments, workflow, etc). | |
42 | */ | |
43 | public interface Document extends PersistableBusinessObject{ | |
44 | /** | |
45 | * This retrieves the standard <code>DocumentHeader</code> object, which contains standard meta-data about a document. | |
46 | * | |
47 | * @return document header since all docs will have a document header | |
48 | */ | |
49 | public DocumentHeader getDocumentHeader(); | |
50 | ||
51 | /** | |
52 | * Sets the associated <code>DocumentHeader</code> for this document. | |
53 | * | |
54 | * @param documentHeader | |
55 | */ | |
56 | public void setDocumentHeader(DocumentHeader documentHeader); | |
57 | ||
58 | /** | |
59 | * All documents have a document header id. This is the quick accessor to that unique identifier and should return the same | |
60 | * value as documentHeader.getDocumentHeaderId(). | |
61 | * | |
62 | * @return doc header id | |
63 | */ | |
64 | public String getDocumentNumber(); | |
65 | ||
66 | /** | |
67 | * setter for document header id | |
68 | * | |
69 | * @param documentHeaderId | |
70 | */ | |
71 | public void setDocumentNumber(String documentHeaderId); | |
72 | ||
73 | /** | |
74 | * This is the method to integrate with workflow, where we will actually populate the workflow defined data structure(s) so that | |
75 | * workflow can routed based on this data. This method is responsible for passing over the proper Kuali (client system) data | |
76 | * that will be used by workflow to determine how the document is actually routed. | |
77 | */ | |
78 | public void populateDocumentForRouting(); | |
79 | ||
80 | /** | |
81 | * This is a method where we can get the xml of a document that the workflow system will use to base it's routing and search | |
82 | * attributes on. | |
83 | * | |
84 | * @return the document serialized to an xml string | |
85 | */ | |
86 | public String serializeDocumentToXml(); | |
87 | ||
88 | /** | |
89 | * This method is used to get the xml that should be used in a Route Report. In it's default implementation this will call the | |
90 | * methods prepareForSave() and populateDocumentForRouting(). | |
91 | */ | |
92 | public String getXmlForRouteReport(); | |
93 | ||
94 | /** | |
95 | * method to integrate with workflow, where we will actually handle the transitions of levels for documents | |
96 | */ | |
97 | public void doRouteLevelChange(DocumentRouteLevelChangeDTO levelChangeEvent); | |
98 | ||
99 | /** | |
100 | * method to integrate with workflow where we will be able to perform logic for an action taken being performed on a document | |
101 | */ | |
102 | public void doActionTaken(ActionTakenEventDTO event); | |
103 | ||
104 | /** | |
105 | * This method will be called after the Workflow engine has completely finished processing a document. | |
106 | * | |
107 | * @param successfullyProcessed - true if the document was processed successfully, false otherwise | |
108 | */ | |
109 | public void afterWorkflowEngineProcess(boolean successfullyProcessed); | |
110 | ||
111 | /** | |
112 | * This method will be called before the Workflow engine has begun processing a document. | |
113 | */ | |
114 | public void beforeWorkflowEngineProcess(); | |
115 | ||
116 | /** | |
117 | * This method will be called before the Workflow engine has begun processing a document. | |
118 | */ | |
119 | public List<Long> getWorkflowEngineDocumentIdsToLock(); | |
120 | ||
121 | /** | |
122 | * Getter method to get the document title as it will appear in and be searchable in workflow. | |
123 | */ | |
124 | public String getDocumentTitle(); | |
125 | ||
126 | /** | |
127 | * getter method to get the list of ad hoc route persons associated with a document at a point in time, this list is only valid | |
128 | * for a given users version of a document as this state is only persisted in workflow itself when someone takes an action on a | |
129 | * document | |
130 | */ | |
131 | public List<AdHocRoutePerson> getAdHocRoutePersons(); | |
132 | ||
133 | /** | |
134 | * getter method to get the list of ad hoc route workgroups associated with a document at a point in time, this list is only | |
135 | * valid for a given users version of a document as this state is only persisted in workflow itself when someone takes an action | |
136 | * on a document | |
137 | */ | |
138 | public List<AdHocRouteWorkgroup> getAdHocRouteWorkgroups(); | |
139 | ||
140 | /** | |
141 | * setter method to set the list of ad hoc route persons associated with a document at a point in time, this list is only valid | |
142 | * for a given users version of a document as this state is only persisted in workflow itself when someone takes an action on a | |
143 | * document | |
144 | * | |
145 | * @param adHocRoutePersons | |
146 | */ | |
147 | public void setAdHocRoutePersons(List<AdHocRoutePerson> adHocRoutePersons); | |
148 | ||
149 | /** | |
150 | * setter method to set the list of ad hoc route workgroups associated with a document at a point in time, this list is only | |
151 | * valid for a given users version of a document as this state is only persisted in workflow itself when someone takes an action | |
152 | * on a document | |
153 | * | |
154 | * @param adHocRouteWorkgroups | |
155 | */ | |
156 | public void setAdHocRouteWorkgroups(List<AdHocRouteWorkgroup> adHocRouteWorkgroups); | |
157 | ||
158 | /** | |
159 | * This method provides a hook that will be called before the document is saved. This method is useful for applying document | |
160 | * level data to children. For example, if someone changes data at the document level, and that data needs to be propagated to | |
161 | * child objects or child lists of objects, you can use this method to update the child object or iterate through the list of | |
162 | * child objects and apply the document level data to them. Any document that follows this paradigm will need to make use of | |
163 | * this method to apply all of those changes. | |
164 | */ | |
165 | public void prepareForSave(); | |
166 | ||
167 | /** | |
168 | * Sends document off to the rules engine to verify business rules. | |
169 | * | |
170 | * @param document - document to validate | |
171 | * @param event - indicates which document event was requested | |
172 | * @throws ValidationException - containing the MessageMap from the validation session. | |
173 | */ | |
174 | public void validateBusinessRules(KualiDocumentEvent event); | |
175 | ||
176 | /** | |
177 | * Do any work on the document that requires the KualiDocumentEvent before the save. | |
178 | * | |
179 | * @param event - indicates which document event was requested | |
180 | */ | |
181 | public void prepareForSave(KualiDocumentEvent event); | |
182 | ||
183 | /** | |
184 | * Do any work on the document after the save. | |
185 | * | |
186 | * @param event - indicates which document event was requested | |
187 | */ | |
188 | public void postProcessSave(KualiDocumentEvent event); | |
189 | ||
190 | /** | |
191 | * This method provides a hook that will be called after a document is retrieved, but before it is returned from the | |
192 | * DocumentService. | |
193 | */ | |
194 | public void processAfterRetrieve(); | |
195 | ||
196 | /** | |
197 | * This method returns whether or not this document can be copied. | |
198 | * | |
199 | * @return True if it can be copied, false if not. | |
200 | */ | |
201 | public boolean getAllowsCopy(); | |
202 | ||
203 | /** | |
204 | * Generate any necessary events required during the save event generation | |
205 | * | |
206 | */ | |
207 | public List generateSaveEvents(); | |
208 | ||
209 | /** | |
210 | * Handle the doRouteStatusChange event from the post processor | |
211 | * | |
212 | */ | |
213 | public void doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent); | |
214 | ||
215 | ||
216 | /** | |
217 | * This is a helper to return BO for use by notes, it allows both maintenance and transactional to have consistent | |
218 | * notes paths without the tag or action knowing what kind of document they are | |
219 | * | |
220 | * @return "this" unless overriden | |
221 | */ | |
222 | public PersistableBusinessObject getDocumentBusinessObject(); | |
223 | ||
224 | /** | |
225 | * This method gets a list of the {@link PessimisticLock} objects associated with this document | |
226 | * | |
227 | */ | |
228 | public List<PessimisticLock> getPessimisticLocks(); | |
229 | ||
230 | /** | |
231 | * This method updates the list of {@link PessimisticLock} objects on the document if changes could | |
232 | * have been made | |
233 | */ | |
234 | public void refreshPessimisticLocks(); | |
235 | ||
236 | /** | |
237 | * This method adds a new {@link PessimisticLock} to the document | |
238 | * | |
239 | * NOTE: LOCKS ADDED VIA THIS METHOD WILL NOT BE SAVED WITH THE DOCUMENT | |
240 | * | |
241 | * @param lock - the lock to add to the document | |
242 | */ | |
243 | public void addPessimisticLock(PessimisticLock lock); | |
244 | ||
245 | /** | |
246 | * This is a method that is used by Kuali Pessimistic Locking to get the names (method to call values) | |
247 | * of the {@link KualiDocumentActionBase} methods that should release locks | |
248 | * | |
249 | * @return the list of method names of an action that should clear locks for the current user | |
250 | */ | |
251 | public List<String> getLockClearningMethodNames(); | |
252 | /** | |
253 | * Returns an evaluator object that determines whether a given property relative to the root object ({@link #wrapDocumentWithMetadataForXmlSerialization()} | |
254 | * is serializable during the document serialization process. | |
255 | * | |
256 | * @return a fully initialized evaluator object, ready to be used for workflow routing | |
257 | * | |
258 | * @see DocumentSerializerService | |
259 | * @see #wrapDocumentWithMetadataForXmlSerialization() | |
260 | */ | |
261 | ||
262 | public String getBasePathToDocumentDuringSerialization(); | |
263 | ||
264 | /** | |
265 | * Returns an evaluator object that determines whether a given property relative to the root object ({@link #wrapDocumentWithMetadataForXmlSerialization()} | |
266 | * is serializable during the document serialization process. | |
267 | * | |
268 | * @return a fully initialized evaluator object, ready to be used for workflow routing | |
269 | * | |
270 | * @see DocumentSerializerService | |
271 | * @see #wrapDocumentWithMetadataForXmlSerialization() | |
272 | */ | |
273 | public PropertySerializabilityEvaluator getDocumentPropertySerizabilityEvaluator(); | |
274 | ||
275 | /** | |
276 | * This method will return the root object to be serialized for workflow routing. If necessary, this method will wrap this document object with a wrapper (i.e. contains a reference back to this document). This | |
277 | * wrapper may also contain references to additional objects that provide metadata useful to the workflow engine. | |
278 | * | |
279 | * If no wrappers are necessary, then this object may return "this" | |
280 | * | |
281 | * @return a wrapper object (most likely containing a reference to "this"), or "this" itself. | |
282 | * @see KualiDocumentXmlMaterializer | |
283 | */ | |
284 | public Object wrapDocumentWithMetadataForXmlSerialization(); | |
285 | ||
286 | /** | |
287 | * This method returns whether or not this document supports custom lock descriptors for pessimistic locking. | |
288 | * | |
289 | * @return True if the document can generate custom lock descriptors, false otherwise. | |
290 | * @see #getCustomLockDescriptor(Map, Person) | |
291 | */ | |
292 | public boolean useCustomLockDescriptors(); | |
293 | ||
294 | /** | |
295 | * Generates a custom lock descriptor for pessimistic locking. This method should not be called unless {@link #useCustomLockDescriptors()} returns true. | |
296 | * | |
297 | * @param user The user trying to establish the lock. | |
298 | * @return A String representing the lock descriptor. | |
299 | * @see #useCustomLockDescriptors() | |
300 | * @see org.kuali.rice.kns.service.PessimisticLockService | |
301 | * @see org.kuali.rice.kns.service.impl.PessimisticLockServiceImpl | |
302 | */ | |
303 | public String getCustomLockDescriptor(Person user); | |
304 | } |