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.logistics.ldm.asset;
028:
029: import org.cougaar.core.service.LoggingService;
030: import org.cougaar.logistics.ldm.MEIPrototypeProvider;
031: import org.cougaar.planning.ldm.asset.AggregateAsset;
032: import org.cougaar.planning.ldm.asset.Asset;
033:
034: import java.math.BigDecimal;
035: import java.util.Collection;
036: import java.util.Enumeration;
037: import java.util.HashMap;
038: import java.util.Vector;
039:
040: public class Level2AmmoConsumerBG extends AmmoConsumerBG {
041: String supplyType = "Ammunition";
042: public final static String LEVEL2AMMUNITION = "Level2Ammunition";
043: private transient LoggingService logger = LoggingService.NULL;
044: private String orgName = null;
045:
046: public Level2AmmoConsumerBG(AmmoConsumerPG pg) {
047: super (pg);
048: }
049:
050: public void initialize(MEIPrototypeProvider plugin) {
051: super .initialize(plugin);
052: logger = parentPlugin.getLoggingService(this );
053: }
054:
055: public Collection getConsumed() {
056: if (orgName == null) {
057: if (parentPlugin != null)
058: orgName = parentPlugin.getMyOrg()
059: .getItemIdentificationPG()
060: .getItemIdentification();
061: else {
062: if (logger != null)
063: logger.error("getConsumed - parentPlugin is null!");
064: else
065: System.err
066: .println("Lvl2AmmoConsBG.getConsumed null parent / logger");
067: }
068: }
069: if (consumptionRates == null) {
070: synchronized (cachedDBValues) {
071: Asset asset = myPG.getMei();
072: if (asset instanceof AggregateAsset) {
073: asset = ((AggregateAsset) asset).getAsset();
074: }
075: String typeId = asset.getTypeIdentificationPG()
076: .getTypeIdentification();
077: consumptionRates = (HashMap) cachedDBValues.get(orgName
078: + typeId);
079: if (consumptionRates == null) {
080: Vector result = null;
081: if (parentPlugin != null)
082: result = parentPlugin
083: .lookupLevel2AssetConsumptionRate(
084: orgName, asset, supplyType);
085: else {
086: if (logger != null)
087: logger
088: .error("getConsumed - parentPlugin is null for "
089: + asset);
090: else
091: System.err
092: .println("Lvl2AmmoConsBG.getConsumed - null parent / logger for "
093: + asset);
094: }
095: if (result == null) {
096: if (logger.isDebugEnabled())
097: logger
098: .debug("getConsumed(): Database query returned EMPTY result set for "
099: + myPG.getMei()
100: + ", "
101: + supplyType
102: + " "
103: + LEVEL2AMMUNITION);
104: } else {
105: consumptionRates = parseResults(result);
106: cachedDBValues.put(orgName + typeId,
107: consumptionRates);
108: }
109: }
110: }
111: }
112: if (consumptionRates == null) {
113: if (logger.isDebugEnabled())
114: logger
115: .debug("No consumption rates for "
116: + myPG.getMei()
117: + ((parentPlugin != null) ? (" at " + parentPlugin
118: .getMyOrg()
119: .getItemIdentificationPG()
120: .getItemIdentification())
121: : ""));
122: consumptionRates = new HashMap();
123: }
124: return consumptionRates.keySet();
125: }
126:
127: protected HashMap parseResults(Vector result) {
128: String optempo = null;
129: double dcr = 0.0;
130: Asset newAsset;
131: HashMap map = null, ratesMap = new HashMap();
132:
133: Enumeration results = result.elements();
134: Object row[];
135: while (results.hasMoreElements()) {
136: row = (Object[]) results.nextElement();
137: if (logger.isDebugEnabled())
138: logger.debug("Ammo: parsing results for Level2MEI ");
139: newAsset = parentPlugin.getPrototype(LEVEL2AMMUNITION);
140: if (newAsset != null) {
141: optempo = (String) row[0];
142: dcr = ((BigDecimal) row[1]).doubleValue();
143: map = (HashMap) ratesMap.get(newAsset);
144: if (map == null) {
145: map = new HashMap();
146: ratesMap.put(newAsset, map);
147: }
148: map.put(optempo.toUpperCase(), new Double(dcr));
149: if (logger.isDebugEnabled())
150: logger.debug("parseResult() for " + newAsset
151: + ", Level2MEI " + ", DCR " + dcr
152: + ", Optempo " + optempo);
153: } else {
154: logger
155: .error("parseResults() Unable to get prototype for "
156: + LEVEL2AMMUNITION);
157: }
158: }
159: return ratesMap;
160: }
161: }
|