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 RangeRuleParameter is a RuleParameter with a list of
035: * integer-range delineated values and a default value. When the
036: * getValue is called with the Key argument, and some value is defined
037: * within some range, that value is returned. Otherwise, the default
038: * is returned.
039: */
040: public class RangeRuleParameter implements RuleParameter,
041: java.io.Serializable {
042: protected String my_name;
043: protected RangeRuleParameterEntry[] my_ranges;
044: protected Object my_default_value;
045:
046: /**
047: * Constructor sets min/max values and establishes value as not set
048: */
049: public RangeRuleParameter(String param_name,
050: RangeRuleParameterEntry[] ranges) {
051: my_ranges = ranges;
052: my_default_value = null;
053: my_name = param_name;
054: }
055:
056: public RangeRuleParameter(String param_name) {
057: my_name = param_name;
058: my_default_value = null;
059: }
060:
061: public RangeRuleParameter() {
062: }
063:
064: /**
065: * Parameter type is RANGE
066: */
067: public int ParameterType() {
068: return RuleParameter.RANGE_PARAMETER;
069: }
070:
071: public String getName() {
072: return my_name;
073: }
074:
075: public void setName(String name) {
076: my_name = name;
077: }
078:
079: public RangeRuleParameterEntry[] getRanges() {
080: return my_ranges;
081: }
082:
083: public void setRanges(RangeRuleParameterEntry[] ranges) {
084: my_ranges = ranges;
085: my_default_value = null;
086: }
087:
088: /**
089: * Get parameter value
090: * @return parameter value. Note : could be null.
091: */
092: public Object getValue() {
093: return my_default_value;
094: }
095:
096: /**
097: * Get parameter value keyed by int
098: * If key fits into one of the defined ranges, return associated
099: * value, otherwise return default value.
100: * @return parameter value. Note : could be null.
101: */
102: public Object getValue(int key) {
103: Object value = my_default_value;
104: for (int i = 0; i < my_ranges.length; i++) {
105: if ((my_ranges[i].getRangeMin() <= key)
106: && (my_ranges[i].getRangeMax() >= key)) {
107: value = my_ranges[i].getValue();
108: break;
109: }
110: }
111:
112: return value;
113: }
114:
115: /**
116: * Set parameter value
117: * @param new_value : must be String within given list
118: * @throws RuleParameterIllegalValueException
119: */
120: public void setValue(Object new_value)
121: throws RuleParameterIllegalValueException {
122: my_default_value = new_value;
123: }
124:
125: /**
126: * @param test_value
127: * @return always returns true
128: */
129: public boolean inRange(Object test_value) {
130: return true;
131: }
132:
133: public String toString() {
134: return "#<RANGE_PARAMETER : " + my_default_value + " ["
135: + Range_List() + "] >";
136: }
137:
138: public Object clone() {
139: RangeRuleParameter rrp = new RangeRuleParameter(my_name);
140: if (my_ranges != null) {
141: rrp
142: .setRanges((RangeRuleParameterEntry[]) my_ranges
143: .clone());
144: }
145: try {
146: rrp.setValue(my_default_value);
147: } catch (RuleParameterIllegalValueException rpive) {
148: }
149: return rrp;
150: }
151:
152: public static void main(String[] args) {
153: RangeRuleParameterEntry p1 = new RangeRuleParameterEntry("LOW",
154: 1, 3);
155: RangeRuleParameterEntry p2 = new RangeRuleParameterEntry(
156: new Integer(37), 4, 6);
157: RangeRuleParameterEntry p3 = new RangeRuleParameterEntry(
158: "HIGH", 7, 9);
159:
160: RangeRuleParameterEntry[] ranges = { p1, p2, p3 };
161: RangeRuleParameter rrp = new RangeRuleParameter(
162: "testRangeParam", ranges);
163:
164: if (rrp.getValue() != null) {
165: System.out
166: .println("Error : Parameter not initialized to null");
167: }
168:
169: try {
170: rrp.setValue("DFLT");
171: } catch (RuleParameterIllegalValueException rpive) {
172: System.out.println("Error detecting illegal set condition");
173: }
174:
175: for (int i = 0; i <= 10; i++) {
176: Object value = rrp.getValue(i);
177: System.out.println("Value for " + i + " = " + value);
178: }
179:
180: System.out.println("RRP = " + rrp);
181: System.out.println("RuleRuleParameter test complete.");
182:
183: }
184:
185: protected String Range_List() {
186: String list = "";
187: for (int i = 0; i < my_ranges.length; i++) {
188: list += my_ranges[i];
189: if (i != my_ranges.length - 1)
190: list += "/";
191: }
192: return list;
193: }
194: }
|