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.planning.ldm.policy;
028:
029: /**
030: *
031: **/
032:
033: /**
034: * An EnumerationRuleParameter is a RuleParameter with specified/protected
035: * string selections that returns a string
036: */
037: public class EnumerationRuleParameter implements RuleParameter,
038: java.io.Serializable {
039: protected String my_name;
040: protected String[] my_enums;
041: protected String my_value;
042:
043: /**
044: * Constructor sets min/max values and establishes value as not set
045: */
046: public EnumerationRuleParameter(String param_name, String[] enums) {
047: my_enums = enums;
048: my_value = null;
049: my_name = param_name;
050: }
051:
052: public EnumerationRuleParameter(String param_name) {
053: my_name = param_name;
054: my_value = null;
055: }
056:
057: public EnumerationRuleParameter() {
058: }
059:
060: /**
061: * Parameter type is ENUMERATION
062: */
063: public int ParameterType() {
064: return RuleParameter.ENUMERATION_PARAMETER;
065: }
066:
067: public String getName() {
068: return my_name;
069: }
070:
071: public void setName(String name) {
072: my_name = name;
073: }
074:
075: public void setEnumeration(String[] enums) {
076: my_enums = enums;
077: my_value = null;
078: }
079:
080: public String[] getEnumeration() {
081: return my_enums;
082: }
083:
084: /**
085: * Get parameter value (String)
086: * @return Object parameter value (String). Note : could be null.
087: */
088: public Object getValue() {
089: return my_value;
090: }
091:
092: /**
093: * Set parameter value
094: * @param new_value : must be String within given list
095: * @throws RuleParameterIllegalValueException
096: */
097: public void setValue(Object new_value)
098: throws RuleParameterIllegalValueException {
099: boolean success = false;
100: if (new_value instanceof String) {
101: String new_string = (String) new_value;
102: for (int i = 0; i < my_enums.length; i++) {
103: if (my_enums[i].equals(new_string)) {
104: my_value = new_string;
105: success = true;
106: break;
107: }
108: }
109: }
110: if (!success)
111: throw new RuleParameterIllegalValueException(
112: RuleParameter.ENUMERATION_PARAMETER,
113: "String must be in specified list : " + Enum_List());
114: }
115:
116: /**
117: * @param test_value : must be String
118: * @return true if Object is a String in the enumeration, false otherwise
119: */
120: public boolean inRange(Object test_value) {
121: if (test_value instanceof String) {
122: String new_string = (String) test_value;
123: for (int i = 0; i < my_enums.length; i++) {
124: if (my_enums[i].equals(new_string)) {
125: return true;
126: }
127: }
128: }
129: return false;
130: }
131:
132: public static void Test() {
133: String[] enums = { "First", "Second", "Third", "Fourth" };
134: EnumerationRuleParameter erp = new EnumerationRuleParameter(
135: "testEnumParam", enums);
136:
137: if (erp.getValue() != null) {
138: System.out
139: .println("Error : Parameter not initialized to null");
140: }
141:
142: try {
143: erp.setValue("Fifth");
144: System.out.println("Error detecting illegal set condition");
145: } catch (RuleParameterIllegalValueException rpive) {
146: }
147:
148: String s3 = "Third";
149: try {
150: erp.setValue(s3);
151: } catch (RuleParameterIllegalValueException rpive) {
152: System.out.println("Error detecting legal set condition");
153: }
154:
155: if (!erp.getValue().equals(s3)) {
156: System.out.println("Error retrieving value of parameter");
157: }
158:
159: System.out.println("ERP = " + erp);
160: System.out.println("EnumerationRuleParameter test complete.");
161:
162: }
163:
164: public String toString() {
165: return "#<ENUMERATION_PARAMETER : " + my_value + " ["
166: + Enum_List() + "] >";
167: }
168:
169: public Object clone() {
170: EnumerationRuleParameter erp = new EnumerationRuleParameter(
171: my_name, (String[]) my_enums.clone());
172: try {
173: erp.setValue(my_value);
174: } catch (RuleParameterIllegalValueException rpive) {
175: }
176: return erp;
177: }
178:
179: protected String Enum_List() {
180: String list = "";
181: for (int i = 0; i < my_enums.length; i++) {
182: list += my_enums[i];
183: if (i != my_enums.length - 1)
184: list += "/";
185: }
186: return list;
187: }
188: }
|