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.util.Vector;
032:
033: import org.cougaar.util.StringUtility;
034:
035: /** Refinement of Skill to represent Aircrew Skills
036: * Example of AircrewSkill:
037: * aircraftType = C-17
038: * position = pilot
039: * qualification = air refueling (may be null)
040: * trainingLevel = A1 (1st char is flight level (A-E), 2nd char is ground level (1-4))
041: * missionCapable = true (satifies currency requirements)
042: * The Skill slots are filled in as:
043: * Type = "Aircrew"
044: * Code = position
045: * Nomenclature = aircraftType+" "+position
046: **/
047:
048: public class AircrewSkill extends Skill {
049: private String aircraftType;
050: private String position;
051: private String qualification;
052: private String trainingLevel;
053: private boolean missionCapable;
054:
055: public String getAircraftType() {
056: return aircraftType;
057: }
058:
059: public String getPosition() {
060: return position;
061: }
062:
063: public String getQualification() {
064: return qualification;
065: }
066:
067: public String getTrainingLevel() {
068: return trainingLevel;
069: }
070:
071: public boolean getMissionCapable() {
072: return missionCapable;
073: }
074:
075: public AircrewSkill(String aircraftType, String position,
076: String qualification, String trainingLevel,
077: boolean missionCapable) {
078: super ("Aircrew", position, aircraftType + " " + position);
079: this .aircraftType = aircraftType.intern();
080: this .position = position.intern();
081: if (qualification != null)
082: qualification = qualification.intern();
083: this .qualification = qualification;
084: this .trainingLevel = trainingLevel.intern();
085: this .missionCapable = missionCapable;
086: }
087:
088: /** parser-based constructor. Requires that the argument be
089: * of the form "ACType/Position/Qualification/Training/capable"
090: **/
091: public AircrewSkill(String s) {
092: Vector v = StringUtility.parseCSV(s, '/');
093: if (v.size() != 5)
094: throw new IllegalArgumentException(
095: "Invalid AircrewSkill syntax: " + s);
096: aircraftType = ((String) v.elementAt(0)).intern();
097: position = ((String) v.elementAt(1)).intern();
098: qualification = (String) v.elementAt(2);
099: if (qualification != null)
100: qualification = qualification.intern();
101: trainingLevel = ((String) v.elementAt(3)).intern();
102: missionCapable = (new Boolean((String) v.elementAt(4)))
103: .booleanValue();
104:
105: this .type = "Aircrew"; // string literals are interned already
106: this .code = position;
107: this .nomenclature = aircraftType + " " + position;
108: }
109:
110: public String toString() {
111: return super .toString() + "(" + aircraftType + " " + position
112: + ")";
113: }
114:
115: public boolean equals(Object s) {
116: if (s instanceof AircrewSkill) {
117: AircrewSkill os = (AircrewSkill) s;
118: return (aircraftType == os.getAircraftType()
119: && position == os.getPosition()
120: && qualification == os.getQualification()
121: && trainingLevel == os.getTrainingLevel() && missionCapable == os
122: .getMissionCapable());
123: } else {
124: return false;
125: }
126: }
127:
128: public int hashCode() {
129: return (aircraftType.hashCode() + position.hashCode() + trainingLevel
130: .hashCode());
131: // we dont use qualification, or the Skill-level params
132: }
133:
134: // make sure strings remain interned
135: private void readObject(ObjectInputStream stream)
136: throws ClassNotFoundException, IOException {
137: stream.defaultReadObject();
138: aircraftType = aircraftType.intern();
139: position = position.intern();
140: if (qualification != null)
141: qualification = qualification.intern();
142: trainingLevel = trainingLevel.intern();
143: }
144: }
|