001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: ProcessDefinition.java,v 1.5 2007/02/27 14:34:20 drmlipp Exp $
021: *
022: * $Log: ProcessDefinition.java,v $
023: * Revision 1.5 2007/02/27 14:34:20 drmlipp
024: * Some refactoring to reduce cyclic dependencies.
025: *
026: * Revision 1.4 2006/09/29 12:32:07 drmlipp
027: * Consistently using WfMOpen as projct name now.
028: *
029: * Revision 1.3 2006/03/08 14:46:44 drmlipp
030: * Synchronized with 1.3.3p5.
031: *
032: * Revision 1.2 2005/04/22 15:10:50 drmlipp
033: * Merged changes from 1.3 branch up to 1.3p15.
034: *
035: * Revision 1.1.1.2.6.3 2005/04/16 21:18:29 drmlipp
036: * Made audit event filtering more flexible and added possibility to turn
037: * off audit log.
038: *
039: * Revision 1.1.1.2.6.2 2005/04/15 21:07:38 drmlipp
040: * Added "storeAuditEvents" flag.
041: *
042: * Revision 1.1.1.2.6.1 2005/04/14 15:08:49 drmlipp
043: * Added "filterable" event auditing.
044: *
045: * Revision 1.1.1.2 2004/08/18 15:17:36 drmlipp
046: * Update to 1.2
047: *
048: * Revision 1.27 2004/04/28 14:19:20 lipp
049: * Getting started with SAX based process creation.
050: *
051: * Revision 1.26 2003/06/27 08:51:46 lipp
052: * Fixed copyright/license information.
053: *
054: * Revision 1.25 2003/05/09 10:39:05 huaiyang
055: * interface for redefinable header in process added.
056: *
057: * Revision 1.24 2003/05/06 13:54:41 lipp
058: * Fixed null pointer exception.
059: *
060: * Revision 1.23 2003/05/06 13:21:29 lipp
061: * Resolved cyclic dependency.
062: *
063: * Revision 1.22 2003/05/05 07:04:51 lipp
064: * Handling parameters for sub-flow now.
065: *
066: * Revision 1.21 2003/04/25 14:50:59 lipp
067: * Fixed javadoc errors and warnings.
068: *
069: * Revision 1.20 2003/04/23 14:27:35 lipp
070: * Improved modelling of header data.
071: *
072: * Revision 1.19 2003/04/19 18:33:29 lipp
073: * Improved handling of info.
074: *
075: * Revision 1.18 2003/04/08 11:49:04 lipp
076: * ResultSignature implemented.
077: *
078: * Revision 1.17 2003/03/04 13:46:09 lipp
079: * Renamed processCOntext to contextSignature for ProcessDefinition.
080: *
081: * Revision 1.16 2003/03/03 15:31:50 lipp
082: * Updated implementation of time estimation.
083: *
084: * Revision 1.15 2003/03/03 13:23:07 schlue
085: * IPR9 (comment for mgrName added)
086: *
087: * Revision 1.14 2002/12/19 21:37:43 lipp
088: * Reorganized interfaces.
089: *
090: * Revision 1.13 2002/11/06 12:13:48 huaiyang
091: * Add the method of RemoveClosedProcess.
092: *
093: * Revision 1.12 2002/11/04 14:34:46 huaiyang
094: * Add the method of processContext.
095: *
096: * Revision 1.11 2002/09/19 09:44:01 lipp
097: * checkstyle fixes.
098: *
099: * Revision 1.10 2002/09/18 11:42:21 lipp
100: * Moved participant data access to process definition.
101: *
102: * Revision 1.9 2002/09/17 15:24:24 lipp
103: * Renamed Tool to Application and copied some functionality to
104: * ProcessDefintion.
105: *
106: * Revision 1.8 2002/09/08 18:49:17 lipp
107: * Proper use of packageId and processId.
108: *
109: * Revision 1.7 2002/09/04 15:14:33 lipp
110: * Removed dubious use of id as process definition identifier.
111: *
112: * Revision 1.6 2002/08/27 11:36:37 lipp
113: * Better use of ProcessDefinition.
114: *
115: * Revision 1.5 2002/08/26 20:23:13 lipp
116: * Lots of method renames.
117: *
118: * Revision 1.4 2002/08/25 20:55:54 lipp
119: * Clearing up use of ProcessDefinition.
120: *
121: * Revision 1.3 2002/08/20 11:54:32 lipp
122: * Cleaned up usage of XPDL and JDOM representation of processes and
123: * process definitions.
124: *
125: * Revision 1.2 2002/08/01 10:13:17 huaiyang
126: * Use JDOM instead of DOM now.
127: *
128: * Revision 1.1 2002/01/17 16:45:06 lipp
129: * ProcessDefinition moved to workflow.api.
130: *
131: */
132: package de.danet.an.workflow.api;
133:
134: import java.util.Collection;
135: import java.util.List;
136:
137: import org.jdom.Document;
138:
139: import de.danet.an.workflow.omgcore.ProcessDataInfo;
140:
141: /**
142: * This interface defines a process definiton.
143: */
144: public interface ProcessDefinition {
145:
146: /** Select all audit events to be delivered and recorded. */
147: public static final int AUDIT_SELECTION_ALL_EVENTS = 0;
148:
149: /** Select state change events for delivery and recording only. */
150: public static final int AUDIT_SELECTION_STATE_EVENTS_ONLY = 1;
151:
152: /** Select process closed events for delivery and recording only. */
153: public static final int AUDIT_SELECTION_PROCESS_CLOSED_EVENTS_ONLY = 2;
154:
155: /** Select no audit events to be delivered and recorded. */
156: public static final int AUDIT_SELECTION_NO_EVENTS = 3;
157:
158: /** Remove closed processes manually. */
159: public static final int REMOVE_MANUAL = 0;
160:
161: /** Remove closed processes automatically. */
162: public static final int REMOVE_AUTOMATIC = 1;
163:
164: /** Remove closed processes automatically if
165: * <code>closed.completed</code>. */
166: public static final int REMOVE_COMPLETED = 2;
167:
168: /**
169: * An interface providing the information from the package
170: * definition header section.
171: */
172: public static interface PackageHeaderData {
173: /**
174: * Version of the process definition specification.
175: * @return the version.
176: */
177: String xpdlVersion();
178:
179: /**
180: * Defines the origin of this model definition
181: * and contains vendor's name, vendor's product name
182: * and product's release number.
183: * @return the vendor.
184: */
185: String vendor();
186:
187: /**
188: * Creation date of package definition.
189: * @return the created time.
190: */
191: String created();
192:
193: /**
194: * Short description of the package definition.
195: * @return the description.
196: */
197: String description();
198:
199: /**
200: * Operating system specific path and -filename
201: * of help file/description file.
202: * @return the documentation.
203: */
204: String documentation();
205:
206: /**
207: * Units used in simulation data.
208: * @return the priority unit.
209: */
210: String priorityUnit();
211:
212: /**
213: * Units used in simulation data.
214: * @return the cost unit.
215: */
216: String costUnit();
217: }
218:
219: /**
220: * An interface providing the information from the process
221: * definition header section.
222: */
223: public static interface ProcessHeaderData {
224: /**
225: * Dreation date of the process definition.
226: * @return the created information.
227: */
228: String created();
229:
230: /**
231: * Short description of the process definition.
232: * @return the description.
233: */
234: String description();
235:
236: /**
237: * Priority of the process type.
238: * @return the priority.
239: */
240: String priority();
241:
242: /**
243: * Expected duration for time management purposes in units
244: * of duration unit (duration unit does not present in this class).
245: * @return the limit.
246: */
247: String limit();
248:
249: /**
250: * Date that the workflow process definition is active from.
251: * @return the valid from date.
252: */
253: String validFrom();
254:
255: /**
256: * Date at witch the process definition becomes valid.
257: * @return the valid to date.
258: */
259: String validTo();
260:
261: /**
262: * Describes the amount of time the performer of the activity
263: * needs to perform the task.
264: * @return the estimated time.
265: */
266: String timeEstimationWaiting();
267:
268: /**
269: * Describes the amount of time the performer of the activity
270: * needs to perform the task.
271: * @return the estimated time.
272: */
273: String timeEstimationWorking();
274:
275: /**
276: * Describes the amount of time the performer of the activity
277: * needs to perform the task.
278: * @return the estimated time.
279: */
280: String timeEstimationDuration();
281:
282: /**
283: * Name of the author of this workflow process definition.
284: * @return the author.
285: */
286: String author();
287:
288: /**
289: * Describes the version of this workflow process definition.
290: * @return the version.
291: */
292: String version();
293:
294: /**
295: * Describes the codepage used for the text parts.
296: * @return the codepage.
297: */
298: String codepage();
299:
300: /**
301: * Describes the country code based on ISO 3166. It could
302: * be either the three digits country code number, or the
303: * two alpha characters country codes.
304: * @return the country code.
305: */
306: String countrykey();
307:
308: /**
309: * Describes the status of the Workflow Process Definition.
310: * @return the status.
311: */
312: String publicationStatus();
313:
314: /**
315: * Describes the responsible Workflow participant(s). It is assumed
316: * that the responsible is the supervisor during the execution
317: * of the process.
318: * @return the list of responsible Workflow participant in String.
319: */
320: List responsibles();
321:
322: /**
323: * The elements of package header.
324: * @return the package header.
325: */
326: PackageHeaderData packageHeader();
327: }
328:
329: /**
330: * Id of the package as specified in the XPDL description.
331: *
332: * @return package id.
333: */
334: String packageId();
335:
336: /**
337: * Id of the process as specified in the XPDL description.
338: *
339: * @return process id.
340: */
341: String processId();
342:
343: /**
344: * Version of the process definition as specified in the XPDL
345: * description.
346: *
347: * @return process defintion version.
348: */
349: String version();
350:
351: /**
352: * Name of the package as specified in the XPDL description.
353: *
354: * @return package name.
355: */
356: String packageName();
357:
358: /**
359: * Name of the process as specified in the XPDL description.
360: *
361: * @return process name.
362: */
363: String processName();
364:
365: /**
366: * Returns the meta information that defines how to set the
367: * context for this kind of process. Equivalent to calling {@link
368: * de.danet.an.workflow.omgcore.WfProcessMgr#contextSignature
369: * <code>contextSignature</code>} on a process manager for this
370: * kind of process.
371: * @return the process meta information.
372: * @see de.danet.an.workflow.omgcore.WfProcessMgr#contextSignature
373: */
374: ProcessDataInfo contextSignature();
375:
376: /**
377: * Returns the meta information that describes the result for this
378: * kind of process. Equivalent to calling {@link
379: * de.danet.an.workflow.omgcore.WfProcessMgr#resultSignature
380: * <code>resultSignature</code>} on a process manager for this
381: * kind of process.<P>
382: *
383: * The implementation returns all formal IN or INOUT parameters.
384: *
385: * @return the process meta information.
386: * @see de.danet.an.workflow.omgcore.WfProcessMgr#resultSignature
387: */
388: ProcessDataInfo resultSignature();
389:
390: /**
391: * Returns the meta information that describes the formal parameters
392: * for this kind of process.
393: * @return the process meta information. The result is never
394: * <code>null</code>, rather an array with zero element is returned.
395: */
396: FormalParameter[] formalParameters();
397:
398: /**
399: * The name of the associated {@link
400: * de.danet.an.workflow.omgcore.WfProcessMgr process
401: * manager}. While the name of a process in XPDL is just a human
402: * readable "label", the name attribute of the process manager
403: * must be unique within agiven business domain.<P>
404: *
405: * The standard implementation of <code>ProcessDefinition</code>
406: * derives a manager name from the package and process ids in the
407: * XPDL, separated by a slash ("/").
408: *
409: * @return process manager name.
410: */
411: String mgrName();
412:
413: /**
414: * Returns process header data object of the process description.
415: * @return process header data object of the process description
416: */
417: ProcessHeaderData processHeader();
418:
419: /**
420: * Return the process definition as SAX event buffer.
421: * @return the process definition
422: * @since 1.2
423: */
424: SAXEventBuffer toSAX();
425:
426: /**
427: * Returns the process description as XPDL textual description.
428: * @return the process definition
429: */
430: String toXPDL();
431:
432: /**
433: * Returns the process description as XPDL JDOM tree.
434: * @return DOM representation of the process definition
435: */
436: Document toJDOM();
437:
438: /**
439: * Returns the applications defined in this process.
440: * @return a collection of {@link Application <code>Application</code>s}.
441: */
442: Collection applications();
443:
444: /**
445: * Return the application with the given id.
446: * @param id the application id.
447: * @return the application.
448: * @throws InvalidIdException if no application with the given id exists.
449: */
450: Application applicationById(String id) throws InvalidIdException;
451:
452: /**
453: * Gets the participants for this process.
454: * @return a collection of {@link Participant
455: * <code>Participant</code>s} for this process.
456: */
457: Collection participants();
458:
459: /**
460: * Return the participant identified by the id.
461: * @param id identity of the participant in string
462: * @return a Participant object
463: * @throws InvalidIdException if no participant with the given id exists.
464: */
465: Participant participantById(String id) throws InvalidIdException;
466:
467: /**
468: * This method checks if the closed process should be removed. Parse the
469: * process definition and find out if the extendAttribute with the name of
470: * RemoveClosedProcess has the value of MANUAL, then return false; if it
471: * has the value of AUTOMATIC, then return true. Default is true.
472: * @return <code>true</code> if the closed process should be
473: * removed, otherwise false.
474: * @deprecated Use {@link #cleanupMode <code>cleanupMode</code>}. For
475: * backward compatibility, this method returns <code>true</code> if
476: * <code>cleanupMode</code> returns <code>REMOVE_AUTOMATIC</code>.
477: */
478: boolean removeClosedProcess();
479:
480: /**
481: * This method checks if a closed process should be removed. Parse the
482: * process definition and find out if the extendAttribute with the name of
483: * RemoveClosedProcess has the value of <code>MANUAL</code>,
484: * <code>AUTOMATIC</code> or <code>COMPLETED</code> and return the
485: * corresponding constant. Default is to remove automatically, i.e.
486: * {@link #REMOVE_AUTOMATIC <code>REMOVE_AUTOMATIC</code>}.
487: * @return the cleanup mode.
488: */
489: int cleanupMode();
490:
491: /**
492: * This method returns the selected audit events of instances of
493: * this process definition.
494: * @return the filter
495: */
496: int auditEventSelection();
497:
498: /**
499: * This method reports if audit events are written to the
500: * database.
501: * @return <code>true</code> if only state change events of the
502: * process instance are audited.
503: */
504: boolean storeAuditEvents();
505:
506: }
|