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.sample;
028:
029: import java.util.Collection;
030: import java.util.Iterator;
031:
032: import org.cougaar.core.blackboard.IncrementalSubscription;
033: import org.cougaar.glm.ldm.Constants;
034: import org.cougaar.glm.ldm.asset.Organization;
035: import org.cougaar.planning.ldm.asset.NewClusterPG;
036: import org.cougaar.planning.plugin.legacy.SimplePlugin;
037: import org.cougaar.util.Enumerator;
038: import org.cougaar.util.TimeSpan;
039: import org.cougaar.util.UnaryPredicate;
040:
041: /**
042: * MCCPredictorPlugin -
043: * add MCCPredictor to the self org's ClusterPG
044: *
045: * Waits to add predictor until after the self org
046: * has reported for Service. Delay designed to
047: * test OrgReportPlugin's support for resending asset
048: * transfers when the self org changes.
049: */
050: public class MCCPredictorPlugin extends SimplePlugin {
051: private IncrementalSubscription orgAssets;
052:
053: private static UnaryPredicate orgAssetPred() {
054: return new UnaryPredicate() {
055: public boolean execute(Object o) {
056: if (o instanceof Organization) {
057: return ((Organization) o).isSelf();
058: }
059: return false;
060: }
061: };
062: }
063:
064: private void addPredictor(Enumerator orgs) {
065: MCCPredictor predictor = new MCCPredictor();
066: while (orgs.hasMoreElements()) {
067: // We should only see one copy of self here
068: Organization org = (Organization) orgs.nextElement();
069: ((NewClusterPG) org.getClusterPG()).setPredictor(predictor);
070: publishChange(org);
071: }
072: }
073:
074: public void setupSubscriptions() {
075: orgAssets = (IncrementalSubscription) subscribe(orgAssetPred());
076: }
077:
078: public void execute() {
079: // New copy of myself (should occur only once per society)
080: if (orgAssets.hasChanged()) {
081: for (Iterator iterator = orgAssets.getCollection()
082: .iterator(); iterator.hasNext();) {
083: Organization selfOrg = (Organization) iterator.next();
084:
085: // Bail if we already have a predictor
086: if (selfOrg.getClusterPG().getPredictor() == null) {
087: // Wait to add predictor until after we have some customers
088: Collection customers = selfOrg
089: .getRelationshipSchedule()
090: .getMatchingRelationships(
091: Constants.RelationshipType.CUSTOMER_SUFFIX,
092: TimeSpan.MIN_VALUE,
093: TimeSpan.MAX_VALUE);
094:
095: if (!customers.isEmpty()) {
096: addPredictor(new Enumerator(orgAssets
097: .getCollection()));
098: break;
099: }
100: }
101: }
102: }
103: }
104: }
|