001: package org.enhydra.shark.api.client.wfmodel;
002:
003: import java.util.Map;
004:
005: /**
006: * OMG definition: A WfProcess is the performer of a workflow request. All workflow
007: * objects that perform work implement this interface. This interface allows work to
008: * proceed asynchronously while being monitored and controlled. The WfProcess interface
009: * specializes WfExecutionObject interface by adding an operation to start the execution
010: * of the process, an operation to obtain the result produced by the process and
011: * relationships with WfRequester and WfActivity.
012: * <p>
013: * We extended OMG's interface by duplicating methods, and adding additional parameter
014: * that represents transaction. If you use methods without SharkTransaction parameter, the
015: * transaction will be implicitly created, and if you use it with SharkTransaction
016: * parameter you must obey to some rules explained in HowTo documentation.
017: */
018: public interface WfProcess extends WfExecutionObject {
019: /**
020: * A WfProcess is created (using a WfProcessMgr) by a user or automated resource and
021: * associated with a WfRequester. The WfRequester may be a WfActivity or an adapter for
022: * external clients. WfProcess always has one WfRequester; an implementation of the WfM
023: * Facility may allow for re-assignment of the WfRequester associated with a WfProcess.
024: * <p>
025: * A WfProcess will inform its WfRequester about status changes such as modification of
026: * its state and its context using the requesters receive_event operation.
027: * <p>
028: * The following operation returns the requester.
029: */
030: WfRequester requester() throws Exception;
031:
032: /**
033: * A WfProcess is created (using a WfProcessMgr) by a user or automated resource and
034: * associated with a WfRequester. The WfRequester may be a WfActivity or an adapter for
035: * external clients. WfProcess always has one WfRequester; an implementation of the WfM
036: * Facility may allow for re-assignment of the WfRequester associated with a WfProcess.
037: * <p>
038: * A WfProcess will inform its WfRequester about status changes such as modification of
039: * its state and its context using the requesters receive_event operation.
040: * <p>
041: * The following operations changes the process requester.
042: */
043: void set_requester(WfRequester new_value) throws Exception,
044: CannotChangeRequester;
045:
046: /**
047: * Zero or more WfActivities are associated with a WfProcess. The association is
048: * established when an activity is created as part of the enactment of the WfProcess.
049: * <p>
050: * The following operation provide the information about the number of active
051: * WfActivity items currently associated with a WfProcess.
052: */
053: int how_many_step() throws Exception;
054:
055: /**
056: * Zero or more WfActivities are associated with a WfProcess. The association is
057: * established when an activity is created as part of the enactment of the WfProcess.
058: * <p>
059: * The following operation returns iterator for qurying associated activities based on
060: * some criteria.
061: */
062: WfActivityIterator get_iterator_step() throws Exception;
063:
064: /**
065: * Zero or more WfActivities are associated with a WfProcess. The association is
066: * established when an activity is created as part of the enactment of the WfProcess.
067: * <p>
068: * The following operation returns max_number of WfActivity objects associated with an
069: * WfProcess (no matter in which state they are). If max_number is less or eaqual to
070: * zero, or it is greater than the number of existing activities, all associated
071: * WfActivity objects will be returned.
072: */
073: WfActivity[] get_sequence_step(int max_number) throws Exception;
074:
075: /**
076: * Zero or more WfActivities are associated with a WfProcess. The association is
077: * established when an activity is created as part of the enactment of the WfProcess.
078: * <p>
079: * The following operation returns true if given activity is associated with WfProcess.
080: */
081: boolean is_member_of_step(WfActivity member) throws Exception;
082:
083: /**
084: * A process is associated with one WfProcessMgr; the association is established when
085: * the WfProcess is generated and cannot be modified. The following operation returns
086: * the WfProcessMgr associated with the WfProcess.
087: */
088: WfProcessMgr manager() throws Exception;
089:
090: /**
091: * The result produced by the WfProcess. In general the result is undefined until the
092: * process completes, but some processes may produce intermediate results. A
093: * ResultNotAvailable exception is raised when the result cannot be obtained yet.
094: */
095: Map result() throws Exception, ResultNotAvailable;
096:
097: /**
098: * This operation is used to initiate enactment of a WfProcess. The state of the
099: * process is changed from open.not_running.not_started to open.running.
100: *
101: * @throws CannotStart raised when the process cannot be started (e.g., because it is
102: * not properly initialized).
103: * @throws AlreadyRunning raised when the process has already been started.
104: * @throws Exception
105: */
106: void start() throws Exception, CannotStart, AlreadyRunning;
107:
108: /**
109: * This operation is used to get an iterator over WfActivity objects that are in a
110: * certain state. The state is an input parameter. In case an invalid state has been
111: * specified, the exception InvalidState is raised.
112: */
113: WfActivityIterator get_activities_in_state(String state)
114: throws Exception, InvalidState;
115:
116: } // interface WfProcess
|