001: /*
002: * <copyright>
003: *
004: * Copyright 1997-2004 BBNT Solutions, LLC
005: * under sponsorship of the Defense Advanced Research Projects
006: * Agency (DARPA).
007: *
008: * You can redistribute this software and/or modify it under the
009: * terms of the Cougaar Open Source License as published on the
010: * Cougaar Open Source Website (www.cougaar.org).
011: *
012: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
013: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
014: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
015: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
016: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
017: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
018: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
019: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
020: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
021: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
022: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
023: *
024: * </copyright>
025: */
026:
027: package org.cougaar.planning.ldm.plan;
028:
029: import java.util.Enumeration;
030:
031: import org.cougaar.core.util.UniqueObject;
032:
033: /**
034: * Workflow Interface
035: * A Workflow is the result of a Task expansion consisting primarily
036: * of a partially ordered set of Task instances. There are many sorts
037: * of Workflow implementations possible, ranging from a strictly-ordered
038: * vector of subtasks, to an unordered Bag, to a set of DAGs, or even
039: * a complex, temporally-ordered set.
040: **/
041:
042: public interface Workflow extends UniqueObject, Annotatable {
043:
044: /**
045: * <PRE> Task parenttask = myworkflow.getParentTask(); </PRE>
046: * @return Task Return the Task for which this Workflow is an expansion.
047: **/
048: Task getParentTask();
049:
050: /**
051: * Return an Enumeration which walks over all tasks
052: * which are members of this Workflow.
053: * <PRE> Enumeration mytasks = myworkflow.getTasks(); </PRE>
054: * @return Enumeration{Task}
055: **/
056: Enumeration getTasks();
057:
058: /**
059: * Returns an Enumeration which walks over
060: * all Constraints that are members of
061: * this workflow.
062: * <PRE> Enumeration myconstraints = myworkflow.getConstraints(); </PRE>
063: * @return Enumeration{Constraint}
064: **/
065: Enumeration getConstraints();
066:
067: /**
068: * Returns an Enumeration which walks over
069: * all Constraints that have a relationship
070: * to the passed Task.
071: * <PRE> Enumeration myconstraints = myworkflow.getTaskConstraints(mytask); </PRE>
072: * @param task - The task you are checking for Constraints.
073: * @return Enumeration{Constraint}
074: **/
075: Enumeration getTaskConstraints(Task task);
076:
077: /**
078: * Returns and Enumeration which walks over
079: * all Constraints that have a pair-wise
080: * relationship with two passed tasks.
081: * <PRE> Enumeration myconstraints = myworkflow.getPairConstraints(mytask1, mytask2); </PRE>
082: * @param constrainedTask - Task that is constrained
083: * @param constrainingTask - Task that is constraining
084: * @return Enumeration{Constraint}
085: **/
086: Enumeration getPairConstraints(Task constrainedTask,
087: Task constrainingTask);
088:
089: /** Ask the workflow to compute an AllocationResult based on the
090: * AllocationResults of the Workflow's sub Tasks. If the aggregate
091: * AllocationResult is undefined (e.g. some of the sub Tasks have not yet
092: * been allocated), computePenaltyValue should return null.
093: *
094: * @return AllocationResult - the result of aggregating the AllocationResults
095: * of the Workflow using the defined (or default) AllocationResultAggregator.
096: * @see org.cougaar.planning.ldm.plan.AllocationResultAggregator
097: **/
098: AllocationResult aggregateAllocationResults();
099:
100: /**
101: * Get allocation results and change information for all subtasks
102: * corresponding to the most recently computed received allocation
103: * result of the corresponding expansion. The returned List contains
104: * a SubTaskResult for each subtask. Each of the SubTaskResult
105: * objects contains:
106: * Task - the subtask,
107: * boolean - whether the result changed,
108: * AllocationResult - the result used by the aggregator for this sub-task.
109: * The boolean indicates whether the AllocationResult changed since the
110: * last time the collection was cleared by the plugin (which should be
111: * the last time the plugin looked at the list).
112: * @return List of SubTaskResultObjects one for each subtask
113: **/
114: SubtaskResults getSubtaskResults();
115:
116: /** Has a constraint been violated?
117: * @return boolean
118: */
119: boolean constraintViolation();
120:
121: /** Get the constraints that were violated.
122: * @return Enumeration{Constraint}
123: */
124: Enumeration getViolatedConstraints();
125:
126: /** Should subtasks be rescinded by the infrastructure when the
127: * expansion this workflow is attached to is rescinded?
128: * Defaults to true.
129: * Set to false (meaning the Plugin is responsible for rescinding or
130: * reattaching the workflow and its subtasks to an expansion and parent task)
131: * by NewWorkflow.setIsPropagatingToSubtasks(isProp);
132: * @return boolean
133: **/
134: boolean isPropagatingToSubtasks();
135:
136: /** Return constraint for which constraining event is defined and
137: * constraining event is undefined or violated
138: **/
139:
140: Constraint getNextPendingConstraint();
141:
142: }
|