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.glm.ldm.plan;
028:
029: import java.io.IOException;
030: import java.io.ObjectInputStream;
031: import java.io.Serializable;
032: import java.util.Collection;
033: import java.util.HashMap;
034: import java.util.Set;
035:
036: /**
037: * An enumeration of known valid military and civilian/idustrial agencies.
038: * An Agency is the highest-level meaningful organization description
039: * associated with a lower-level organization.
040: * Military Agencies are generally the CINC-level descriptions of
041: * affiliation. E.g. Usually "USTC" rather than "TCJ6".
042: *
043: * The implementation attempts to keep the number of duplicate Agency
044: * instances (e.g. that are .equals) to a minimum, but there are situations
045: * where this is not practical. Use .equals instead of ==.
046: **/
047:
048: public final class Agency implements Serializable {
049:
050: private final static HashMap allTable = new HashMap(13);
051:
052: /*
053: FORSCOM
054: CENTCOM
055: DLA
056: TRANSCOM
057: EUCOM
058: PACOM
059: COALITION
060: HOSTNATION
061: ACOM
062: */
063:
064: public final static Agency FORSCOM = new Agency("FORSCOM");
065: public final static Agency CENTCOM = new Agency("CENTCOM");
066: public final static Agency DLA = new Agency("DLA");
067: public final static Agency TRANSCOM = new Agency("TRANSCOM");
068: public final static Agency EUCOM = new Agency("EUCOM");
069: public final static Agency PACOM = new Agency("PACOM");
070: public final static Agency COALITION = new Agency("COALITION");
071: public final static Agency HOSTNATION = new Agency("HOSTNATION");
072: public final static Agency ACOM = new Agency("ACOM");
073: static {
074: allTable.put("FORSCOM", FORSCOM);
075: allTable.put("CENTCOM", CENTCOM);
076: allTable.put("DLA", DLA);
077: allTable.put("TRANSCOM", TRANSCOM);
078: allTable.put("EUCOM", EUCOM);
079: allTable.put("PACOM", PACOM);
080: allTable.put("COALITION", COALITION);
081: allTable.put("HOSTNATION", HOSTNATION);
082: allTable.put("ACOM", ACOM);
083: }
084:
085: public static Collection getAgencies() {
086: return allTable.values();
087: }
088:
089: public static Set getNames() {
090: return allTable.keySet();
091: }
092:
093: public static Agency getAgency(String name) {
094: return (Agency) allTable.get(name);
095: }
096:
097: private String name;
098:
099: /** Constructor takes a String that represents the named Agency.
100: * It is preferred to use the constant Agencies or the getAgency
101: * method rather than to use the constructor.
102: **/
103: public Agency(String v) {
104: if (v == null)
105: throw new IllegalArgumentException();
106: name = v.intern();
107: }
108:
109: public String getName() {
110: return name;
111: }
112:
113: /** @return The name of the Agency */
114: public String toString() {
115: return name;
116: }
117:
118: public boolean equals(Object v) {
119: // use == since name strings are interned
120: return (v instanceof Agency && name == v.toString());
121: }
122:
123: public int hashCode() {
124: return name.hashCode();
125: }
126:
127: private void readObject(ObjectInputStream stream)
128: throws ClassNotFoundException, IOException {
129: stream.defaultReadObject();
130: name = name.intern();
131: }
132:
133: }
|