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;
028:
029: import org.cougaar.core.plugin.ComponentPlugin;
030: import org.cougaar.core.service.DomainService;
031: import org.cougaar.core.service.UIDService;
032: import org.cougaar.core.util.UID;
033: import org.cougaar.planning.ldm.asset.Asset;
034: import org.cougaar.planning.ldm.asset.NewTypeIdentificationPG;
035: import org.cougaar.planning.service.PrototypeRegistryService;
036:
037: /** Serve some default prototypes to the system.
038: * At this point, this only serves stupid prototypes for
039: * (temporary) backward compatability.
040: *
041: * At start, loads some low-level basics into the registry.
042: * On demand, serve a few more.
043: **/
044:
045: public class DefaultPrototypeProviderPlugin extends ComponentPlugin
046: implements PrototypeProvider {
047:
048: PlanningFactory ldmf = null;
049: DomainService domainService = null;
050: PrototypeRegistryService protregService = null;
051: UIDService uidService = null;
052: UID anID;
053:
054: public DefaultPrototypeProviderPlugin() {
055: }
056:
057: protected void setupSubscriptions() {
058:
059: // get the domain service
060: if (ldmf == null) {
061: domainService = (DomainService) getServiceBroker()
062: .getService(this , DomainService.class, null);
063:
064: // get the registry service
065: protregService = (PrototypeRegistryService) getServiceBroker()
066: .getService(this , PrototypeRegistryService.class,
067: null);
068:
069: // get the UIDService
070: uidService = (UIDService) getServiceBroker().getService(
071: this , UIDService.class, null);
072: }
073: //use the services
074: ldmf = (PlanningFactory) domainService.getFactory("planning");
075: //anID = uidService.nextUID();
076:
077: preloadPrototypes();
078: }
079:
080: // no subscriptions, so we'll never actually be run.
081: protected void execute() {
082: }
083:
084: public Asset getPrototype(String typename, Class hint) {
085: // I was going to handle OPlan here, but OPlan isn't an Asset!
086: try {
087: // try some dynamic prototypes (for backward compatibility)
088: if ("Solenoid".equals(typename)) {
089: return makeProto(typename, "Consumable");
090: } else if ("M1A1 Tank".equals(typename)) {
091: return makeProto(typename, "SelfPropelledGroundWeapon");
092: } else if ("OTHER/Passenger".equals(typename)) {
093: return makeProto(typename, "Person");
094: } else if ("NSN/1520011069519".equals(typename)) {
095: return makeProto(typename, "RotaryWingAircraftWeapon");
096: } else if ("NSN/2350010871095".equals(typename)) {
097: return makeProto(typename, "SelfPropelledGroundWeapon");
098: } else if ("NSN/2350001226826".equals(typename)) {
099: return makeProto(typename, "SelfPropelledGroundWeapon");
100: } else if ("NSN/2350010318851".equals(typename)) {
101: return makeProto(typename, "SelfPropelledGroundWeapon");
102: } else if ("UTC/SupportOrg".equals(typename)) {
103: return makeProto(typename, "SupportOrganization");
104: } else if ("UTC/SupplyOrg".equals(typename)) {
105: return makeProto(typename, "SupplyOrganization");
106: } else if ("UTC/CombatOrg".equals(typename)) {
107: return makeProto(typename, "CombatOrganization");
108: } else if ("UTC/CommandOrg".equals(typename)) {
109: return makeProto(typename, "CommandOrganization");
110: } else if ("Organization".equals(typename)) {
111: return makeProto(typename, "Organization");
112: }
113:
114: } catch (Exception e) {
115: // cannot really throw any of these exceptions.
116: }
117: return null;
118: }
119:
120: private void submitAbstract(String name) {
121: try {
122: Asset proto = makeProto(name, "AbstractAsset");
123: NewTypeIdentificationPG tip = (NewTypeIdentificationPG) proto
124: .getTypeIdentificationPG();
125: tip.setTypeIdentification(name);
126: tip.setNomenclature(name);
127: protregService.cachePrototype(name, proto);
128:
129: // here test out UIDService
130: anID = uidService.nextUID();
131: //System.out.println(anID);
132: // System.out.println("agent id = " + uidService.getMessageAddress());
133: } catch (Exception e) {
134: // cannot really throw any of these exceptions.
135: }
136: }
137:
138: /*
139: * modified makeProto to make prototypes with under the 'root' domain and
140: * register prototypes via the PrototypeRegistry
141: * make a prototype and an instance asset, then test property groups
142: */
143: private Asset makeProto(String typeid, String cl) {
144:
145: // create a prototype - register with registry service
146: Asset proto = ldmf.createPrototype(cl, typeid);
147:
148: protregService.cachePrototype(typeid, proto);
149: //* getLDM().cachePrototype(typeid, proto);
150: System.out.println("making prototype: " + cl);
151: return proto;
152: }
153:
154: private void preloadPrototypes() {
155: submitAbstract("Subordinates");
156: submitAbstract("Ammunition");
157: submitAbstract("SpareParts");
158: submitAbstract("Consumable");
159:
160: submitAbstract("Repairable");
161: submitAbstract("StrategicTransportation");
162: submitAbstract("GSMaintenance");
163: submitAbstract("DSMaintenance");
164: submitAbstract("TheaterTransportation");
165: }
166:
167: }
|