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.plugin.util;
028:
029: import java.util.Enumeration;
030:
031: import org.cougaar.core.blackboard.CollectionSubscription;
032: import org.cougaar.core.blackboard.IncrementalSubscription;
033: import org.cougaar.planning.ldm.PlanningFactory;
034: import org.cougaar.planning.ldm.asset.AbstractAsset;
035: import org.cougaar.planning.ldm.plan.AllocationResult;
036: import org.cougaar.planning.ldm.plan.PlanElement;
037: import org.cougaar.planning.ldm.plan.PrepositionalPhrase;
038: import org.cougaar.planning.ldm.plan.Task;
039:
040: /**
041: * Helper class for building Allocator Plugins.
042: */
043: public class AllocatorHelper {
044:
045: /**
046: * UpdatePV looks for differences between the reported and
047: * estimated allocation results. If they are
048: * different then the estimated value is set to the reported
049: * value in both the cases.
050: * @deprecated use boolean PluginHelper.updatePlanElement(PlanElement pe) instead, calling publishChange(pe) if updatePlanElement returns true
051: */
052: public static void updatePV(PlanElement pe,
053: CollectionSubscription sub) {
054:
055: if (pe.getReportedResult() != null) {
056: //compare the result objects.
057: // If they are NOT ==, re-set the estimated result.
058: // For now ignore whether their compositions are equal.
059: AllocationResult repar = pe.getReportedResult();
060: AllocationResult estar = pe.getEstimatedResult();
061: if ((estar == null) || (!(repar == estar))) {
062: pe.setEstimatedResult(repar);
063: sub.getSubscriber().publishChange(pe, null);
064: }
065: }
066: }
067:
068: /** Takes a subscription, gets the changed list and updates the changedList.
069: * @deprecated use PluginHelper.updateAllocationResult(IncrementalSubscription sub) instead.
070: */
071: public static void updateAllocationResult(
072: IncrementalSubscription sub) {
073:
074: Enumeration changedPEs = sub.getChangedList();
075: while (changedPEs.hasMoreElements()) {
076: PlanElement pe = (PlanElement) changedPEs.nextElement();
077: if (pe.getReportedResult() != null) {
078: //compare entire pv arrays
079: AllocationResult repar = pe.getReportedResult();
080: AllocationResult estar = pe.getEstimatedResult();
081: if ((estar == null) || (!repar.isEqual(estar))) {
082: pe.setEstimatedResult(repar);
083: sub.getSubscriber().publishChange(pe, null);
084: }
085: }
086: }
087: }
088:
089: /**
090: * Checks if the Task is of specified OFTYPE.
091: */
092: public static boolean isOfType(Task t, String p, String typeid) {
093: Enumeration prepPhrases = ((Task) t).getPrepositionalPhrases();
094: PrepositionalPhrase pPhrase;
095: String prep;
096: AbstractAsset aa = null;
097: String mytypeid = null;
098:
099: while (prepPhrases.hasMoreElements()) {
100: pPhrase = (PrepositionalPhrase) prepPhrases.nextElement();
101: prep = pPhrase.getPreposition();
102: if (prep.equals(p)) {
103: Object indirectobj = pPhrase.getIndirectObject();
104: if (indirectobj instanceof AbstractAsset) {
105: aa = (AbstractAsset) indirectobj;
106: mytypeid = aa.getTypeIdentificationPG()
107: .getTypeIdentification();
108: if (mytypeid.equals(typeid))
109: return true;
110: }
111: }
112: }
113: return false;
114: }
115:
116: /**
117: * @deprecated use PluginHelper.createEstimatedAllocationResult(Task t, PlanningFactory ldmf, double confrating, boolean success) instead
118: */
119: public static AllocationResult createEstimatedAllocationResult(
120: Task t, PlanningFactory ldmf) {
121: return ExpanderHelper.createEstimatedAllocationResult(t, ldmf,
122: 0.0);
123: }
124: }
|