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.mlm.plugin.ldm;
028:
029: import java.util.ArrayList;
030: import java.util.Calendar;
031: import java.util.Date;
032:
033: import org.cougaar.glm.ldm.asset.MilitaryPerson;
034: import org.cougaar.glm.ldm.asset.NewPersonPG;
035: import org.cougaar.glm.ldm.plan.Skill;
036: import org.cougaar.planning.ldm.asset.Asset;
037: import org.cougaar.planning.ldm.asset.NewTypeIdentificationPG;
038: import org.cougaar.planning.ldm.plan.NewRoleSchedule;
039: import org.cougaar.planning.ldm.plan.NewSchedule;
040:
041: /** AggregateAssetCreator implements QueryHandler to create sql queries
042: * and process the query results by creating aggregateassets.
043: */
044:
045: public class SQLMOSAggregateAssetCreator extends PeriodicQuery {
046: public SQLMOSAggregateAssetCreator() {
047: }
048:
049: public String getQuery() {
050: return (String) getParameter("query");
051: }
052:
053: public static int MOS = 0; // 0 billet.unfrmd_srvc_occptn_cd
054: public static int QTY = 1; // 1 sum(to_strength)
055: public static int OCC = 2; // 2 unfrmd_srvc_occptn_tx
056:
057: public void processRow(Object[] data) {
058: //System.out.println("I see "+data[1]+" of "+data[0]);
059:
060: String nsn = (String) data[0];
061: Number count = (Number) data[1];
062: String nomenclature = (String) data[2];
063:
064: String tid = "NSN/" + nsn;
065: // System.out.println(myMessageAddress.getAddress() + ": " +
066: // "Creating aggregate asset : " + tid + " " +
067: // count + " " + nomenclature);Skill
068:
069: Asset proto = findPrototype(data, tid, nomenclature);
070: Asset newaggasset = createAggregateAsset(proto, count
071: .intValue());
072: setupAvailableSchedule(newaggasset);
073: publishAdd(newaggasset);
074: }
075:
076: /** find or create a prototype asset suitable for using in an
077: * aggregate asset.
078: **/
079: private Asset findPrototype(Object[] data, String tid,
080: String nomenclature) {
081: MilitaryPerson proto = (MilitaryPerson) ldmf.createPrototype(
082: "org.cougaar.glm.ldm.asset.MilitaryPerson", tid);
083:
084: NewTypeIdentificationPG tip = (NewTypeIdentificationPG) proto
085: .getTypeIdentificationPG();
086: proto.setTypeIdentificationPG(tip);
087: tip.setTypeIdentification("MOS/" + (String) data[MOS]);
088: tip.setNomenclature((String) data[OCC]);
089:
090: NewPersonPG pp = (NewPersonPG) ldmf
091: .createPropertyGroup("PersonPG");
092: proto.setPersonPG(pp);
093: ArrayList al = new ArrayList();
094: al
095: .add(new Skill("MOS", (String) data[MOS],
096: (String) data[OCC]));
097: pp.setSkills(al);
098:
099: ldm.fillProperties(proto);
100: ldm.cachePrototype(tid, proto);
101: // System.out.println
102: // ("SQLMOSAggregateAssetCreator, findPrototype returns: "+proto +" with id: "+tip.getTypeIdentification());
103: return (Asset) proto;
104: }
105:
106: private Asset createAsset(String prototype, String nomenclature) {
107: return ldmf.createInstance(prototype, nomenclature);
108: }
109:
110: public Asset createAggregateAsset(Asset asset, int qty) {
111: // wrong:
112: // return asset.createAggregate(qty);
113: // right:
114: return ldmf.createAggregate(asset, qty);
115: }
116:
117: private void setupAvailableSchedule(Asset asset) {
118: Calendar mycalendar = Calendar.getInstance();
119: // set the start date of the available schedule to 01/01/1990
120: mycalendar.set(1990, 0, 1, 0, 0, 0);
121: Date start = mycalendar.getTime();
122: // set the end date of the available schedule to 01/01/2010
123: mycalendar.set(2010, 0, 1, 0, 0, 0);
124: Date end = mycalendar.getTime();
125: NewSchedule availsched = ldmf.newSimpleSchedule(start, end);
126: // set the available schedule
127: ((NewRoleSchedule) asset.getRoleSchedule())
128: .setAvailableSchedule(availsched);
129: }
130:
131: }
|