001: /*--------------------------------------------------------------------------
002: * <copyright>
003: *
004: * Copyright 2000-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.glm.ldm.asset;
027:
028: import java.io.Serializable;
029:
030: import org.cougaar.glm.ldm.Constants;
031: import org.cougaar.planning.ldm.plan.PrepositionalPhrase;
032: import org.cougaar.planning.ldm.plan.Task;
033: import org.cougaar.planning.ldm.plan.Verb;
034:
035: public class ProjectionWeightImpl implements ProjectionWeight,
036: Serializable {
037:
038: protected int wdrawSwitchOverDay_ = 60;
039: protected int refillSwitchOverDay_ = 60;
040: protected boolean noProjections_ = false;
041:
042: public ProjectionWeightImpl(boolean turnOffProjections) {
043: noProjections_ = turnOffProjections;
044: }
045:
046: public ProjectionWeightImpl(int wdrawSwitchOverDay,
047: int refillSwitchOverDay, boolean turnOffProjections) {
048: wdrawSwitchOverDay_ = wdrawSwitchOverDay;
049: refillSwitchOverDay_ = refillSwitchOverDay;
050: noProjections_ = turnOffProjections;
051: }
052:
053: public ProjectionWeightImpl() {
054: }
055:
056: public double getProjectionWeight(Task task, int imputedDay) {
057: // because ProjectSupply tasks span a long time period, their start time is not
058: // useful for deteriming when to credit them -- for withdrawals, we have created
059: // ProjectWithdraw tasks, but for refill tasks we are passing in the raw ProjectSupply
060: // tasks (this is a lonnng story)
061: Verb task_verb = task.getVerb();
062: int day = imputedDay;
063: double weight = 0.0;
064:
065: if (noProjections_) {
066: return getSupplyTaskWeight(task);
067: } else {
068: if (task_verb.equals(Constants.Verb.SUPPLY)) {
069: if (day > refillSwitchOverDay_) {
070: weight = 0.0;
071: } else {
072: weight = 1.0;
073: }
074: } else if (task_verb.equals(Constants.Verb.PROJECTSUPPLY)) {
075: if (day > refillSwitchOverDay_) {
076: weight = 1.0;
077: } else {
078: weight = 0.0;
079: }
080: } else if (task_verb.equals(Constants.Verb.PROJECTWITHDRAW)) {
081: // Count ProjectSupply tasks if beyond the refill switchover day OR task came from Demand Projector
082: PrepositionalPhrase pp = task
083: .getPrepositionalPhrase(Constants.Preposition.REFILL);
084: if ((day > wdrawSwitchOverDay_) || (pp == null)) {
085: weight = 1.0;
086: } else {
087: weight = 0.0;
088: }
089: } else if (task_verb.equals(Constants.Verb.WITHDRAW)) {
090: if (day > wdrawSwitchOverDay_) {
091: weight = 0.0;
092: } else {
093: weight = 1.0;
094: }
095: }
096: }
097: return weight;
098: }
099:
100: public double getSupplyTaskWeight(Task task) {
101: // If only Supply tasks are expected in the System then a switchOver day does not make sense.
102: // Weight Supply/Refill tasks as 1 any other task as 0
103: Verb task_verb = task.getVerb();
104: double weight = 0.0;
105: if (task_verb.equals(Constants.Verb.SUPPLY)
106: || task_verb.equals(Constants.Verb.WITHDRAW)) {
107: weight = 1.0;
108: }
109: return weight;
110: }
111:
112: public String toString() {
113: return getClass().getName() + "[wdrawSwitchoverDay="
114: + wdrawSwitchOverDay_ + ", refillSwitchoverDay="
115: + refillSwitchOverDay_ + "]";
116: }
117: }
|