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: /** The ForcePackage is a LDM Object that contains temporary groupings of
028: * organizations. The ForcePackage object includes items such
029: * as time phasing, organziational relationships, and a forcePackage ID.
030: * To initially create the ForcePackage objects, the OplanPlugin loads the
031: * specified oplan.xml file, parses the oplan file for operational information
032: * and publishes the ForcePackage objects to the Log Plan.
033: * The ForcePackages are initially created in the J3 cluster and then is
034: * transferred to other clusters by the Propagation Plugin. Subordinate
035: * clusters can subscribe
036: * to changes in the ForcePackage in order to react to changes accordingly.
037: * Subordinate clusters should not modify ForcePacakge information.
038: *
039: *
040: **/package org.cougaar.glm.ldm.oplan;
041:
042: import java.beans.PropertyChangeListener;
043: import java.beans.PropertyChangeSupport;
044:
045: import org.cougaar.core.util.OwnedUniqueObject;
046: import org.cougaar.core.util.UID;
047: import org.cougaar.planning.ldm.plan.Transferable;
048:
049: /**
050: * ForcePackage
051: **/
052: public class ForcePackage extends OwnedUniqueObject implements
053: OplanContributor, Transferable, Cloneable {
054: private TimeSpan theTimeSpan;
055: private String forcePackageID;
056: private UID oplanUID;
057:
058: /**
059:
060: * Constructor for the ForcePackage object.
061: */
062: public ForcePackage(UID oplanUID) {
063: this .oplanUID = oplanUID;
064: }//ForcePackage
065:
066: /**
067: * Constructor for the Oplan object.
068: * @param forcePkgID The force pacakge ID.
069: */
070: public ForcePackage(String forcePkgID, UID oplanUID) {
071: forcePackageID = unique(forcePkgID);
072: this .oplanUID = oplanUID;
073: }//ForcePackage
074:
075: /**
076: * Sets the forcePacakge ID for the given ForcePacakge.
077: * @param forcePackageID The ID for the ForcePackage.
078: */
079: public void setForcePackageId(String forcePackageID) {
080: this .forcePackageID = unique(forcePackageID);
081: }// setForcePackageID
082:
083: /**
084: * Sets the time span for the given ForcePackage
085: * @param theTimeSpan The timeSpan for the ForcePackage.
086: */
087: public void setTimeSpan(TimeSpan theTimeSpan) {
088: this .theTimeSpan = theTimeSpan;
089: }//setTimeSpan
090:
091: /**
092: * Gets the forcePacakge ID for the given ForcePacakge.
093: * @return forcePackageID The ID for the ForcePackage.
094: **/
095: public String getForcePackageId() {
096: return forcePackageID;
097: }//getForcePackageId
098:
099: /**
100: * Gets the time span for the given ForcePackage
101: * @return timeSpan The timeSpan for the ForcePackage.
102: */
103: public TimeSpan getTimeSpan() {
104: return theTimeSpan;
105: }//getTimeSpan
106:
107: /** @deprecated Use getOplanUID */
108: public UID getOplanID() {
109: return (oplanUID);
110: }
111:
112: public UID getOplanUID() {
113: return (oplanUID);
114: }
115:
116: /** Clones the ForcePackage object
117: * @return forcePackage A Copy of the forcePackage
118: */
119: public Object clone() {
120: ForcePackage fp = new ForcePackage(oplanUID);
121: fp.setUID(getUID());
122: fp.setOwner(getOwner());
123: if (theTimeSpan != null)
124: fp.setTimeSpan((TimeSpan) theTimeSpan.clone());
125: fp.setForcePackageId(forcePackageID);
126: return fp;
127: }//clone
128:
129: /** This method sets the contents of ForcePackage to the values
130: * in the given ForcePackage object.
131: * @param other ForcePackage object
132: */
133: public void setAll(Transferable other) {
134: if (!(other instanceof ForcePackage))
135: throw new IllegalArgumentException(
136: "Parameter not ForcePackage");
137:
138: ForcePackage otherFP = (ForcePackage) other;
139: setUID(otherFP.getUID());
140: setOwner(otherFP.getOwner());
141: theTimeSpan = otherFP.getTimeSpan();
142: oplanUID = otherFP.getOplanUID();
143: forcePackageID = otherFP.getForcePackageId();
144: }// setAll
145:
146: /** This method determines whether forcepacakges contain the
147: * same values.
148: * @param other ForcePackage object
149: * @return boolean true - same
150: * false - not the same.
151: */
152: public boolean same(Transferable other) {
153: if (!(other instanceof ForcePackage))
154: return false;
155: ForcePackage otherFP = (ForcePackage) other;
156: if (forcePackageID.equals(otherFP.getForcePackageId()))
157: return true;
158: return false;
159: }//same
160:
161: private boolean matches(Object a, Object b) {
162: return (a == null) ? (b == null) : (a.equals(b));
163: }
164:
165: // full equals implementation, though we'll probably only
166: // use it for the timespan test
167: public boolean equals(Object other) {
168: if (other instanceof ForcePackage) {
169: ForcePackage x = (ForcePackage) other;
170: return matches(getTimeSpan(), x.getTimeSpan())
171: && matches(forcePackageID, x.forcePackageID)
172: && matches(getOplanUID(), x.getOplanUID());
173: }
174: return false;
175: }
176:
177: //dummy PropertyChangeSupport for the Jess Interpreter.
178: protected transient PropertyChangeSupport pcs = new PropertyChangeSupport(
179: this );
180:
181: public void addPropertyChangeListener(PropertyChangeListener pcl) {
182: pcs.addPropertyChangeListener(pcl);
183: }
184:
185: public void removePropertyChangeListener(PropertyChangeListener pcl) {
186: pcs.removePropertyChangeListener(pcl);
187: }
188:
189: public static final String unique(String s) {
190: return (s == null) ? null : (s.intern());
191: }
192:
193: }// ForcePackage
|