001: /*
002: * <copyright>
003: *
004: * Copyright 2001-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: package org.cougaar.logistics.plugin.trans;
027:
028: import java.util.*;
029:
030: import org.cougaar.logistics.ldm.Constants;
031: import org.cougaar.glm.util.GLMPrepPhrase;
032: import org.cougaar.lib.filter.UTILExpanderPluginAdapter;
033: import org.cougaar.logistics.plugin.trans.GLMTransConst;
034: import org.cougaar.logistics.plugin.packer.Geolocs;
035: import org.cougaar.planning.ldm.asset.Asset;
036: import org.cougaar.planning.ldm.plan.Task;
037: import org.cougaar.planning.ldm.plan.NewTask;
038:
039: /**
040: * Takes low fidelity SUPPLY tasks marked with the LOW_FIDELITY prep
041: * and converts them into TRANSPORT tasks.
042: *
043: * The only real work that goes on is adding a FROM prep of Blue Grass, KY,
044: * which is prototypical ammo depot.
045: */
046: public class AmmoLowFidelityExpanderPlugin extends
047: UTILExpanderPluginAdapter {
048:
049: public void localSetup() {
050: super .localSetup();
051: glmPrepHelper = new GLMPrepPhrase(logger);
052: }
053:
054: /**
055: * State that we are interested in all transport tasks
056: * @param task the task to test.
057: * @return true if the tasks verb is SUPPLY, false otherwise
058: */
059: public boolean interestingTask(Task task) {
060: boolean hasSupply = task.getVerb()
061: .equals(Constants.Verb.SUPPLY);
062: if (!hasSupply)
063: return false;
064:
065: if (!prepHelper.hasPrepNamed(task, GLMTransConst.LOW_FIDELITY)) {
066: if (isDebugEnabled())
067: debug(".interestingTask - ignoring SUPPLY task "
068: + task.getUID()
069: + " that doesn't have a LOW_FIDELITY prep.");
070: return false;
071: }
072:
073: if (isDebugEnabled())
074: debug(".interestingTask - processing SUPPLY task "
075: + task.getUID() + " that has a LOW_FIDELITY prep.");
076:
077: return true;
078: }
079:
080: public void processTasks(java.util.List tasks) {
081: super .processTasks(getPrunedTaskList(tasks));
082: }
083:
084: protected List getPrunedTaskList(List tasks) {
085: java.util.List prunedTasks = new java.util.ArrayList(tasks
086: .size());
087:
088: Collection removed = myInputTaskCallback.getSubscription()
089: .getRemovedCollection();
090:
091: for (Iterator iter = tasks.iterator(); iter.hasNext();) {
092: Task task = (Task) iter.next();
093: if (removed.contains(task)) {
094: if (isInfoEnabled()) {
095: info("ignoring task on removed list "
096: + task.getUID());
097: }
098: } else
099: prunedTasks.add(task);
100: }
101: return prunedTasks;
102: }
103:
104: /**
105: * Implemented for UTILExpanderPlugin interface
106: *
107: * Break up tasks into constituent parts.
108: */
109: public Vector getSubtasks(Task parentTask) {
110: Vector childTasks = new Vector();
111:
112: Asset lowFiAsset = parentTask.getDirectObject();
113: Task subTask = makeTask(parentTask, lowFiAsset);
114: childTasks.addElement(subTask);
115:
116: return childTasks;
117: }
118:
119: /**
120: * Makes subtask of parent task, with given direct object.
121: *
122: * removes OFTYPE prep, since it's not needed by TRANSCOM
123: * Adds FROM prep.
124: **/
125: Task makeTask(Task parentTask, Asset directObject) {
126: Task newtask = expandHelper.makeSubTask(ldmf, parentTask,
127: directObject, getAgentIdentifier());
128: ((NewTask) newtask).setContext(parentTask.getContext());
129: glmPrepHelper.removePrepNamed(newtask,
130: Constants.Preposition.OFTYPE);
131: // mark the new task as an aggregate low fi task
132: glmPrepHelper.addPrepToTask(newtask,
133: prepHelper
134: .makePrepositionalPhrase(ldmf,
135: Constants.Preposition.FROM, Geolocs
136: .blueGrass()));
137: ((NewTask) newtask).setVerb(Constants.Verb.Transport);
138:
139: return newtask;
140: }
141:
142: protected GLMPrepPhrase glmPrepHelper;
143: }
|