package org.yamcs.xtce; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Vector; public class EnumeratedDataType extends BaseDataType { private static final long serialVersionUID = 201002231432L; EnumeratedDataType(String name) { super(name); } protected HashMap<Long,ValueEnumeration> enumeration = new HashMap<Long,ValueEnumeration>(); protected List<ValueEnumeration> enumerationList = new ArrayList<ValueEnumeration>();//this keeps track of the duplicates but is not really used protected Vector<ValueEnumerationRange> ranges = null; protected String initialValue = null; /** * Set initial value * @param initialValue */ public void setInitialValue(String initialValue) { this.initialValue = initialValue; } public String getInitialValue() { return initialValue; } public ValueEnumeration enumValue(Long key) { if ( enumeration.containsKey(key) ) { return enumeration.get(key); } else if ( ranges != null ) { for (ValueEnumerationRange range:ranges) { if (range.isValueInRange(key)) { return new ValueEnumeration(key, range.getLabel()); } } } return null; } public ValueEnumeration enumValue(String label) { for(ValueEnumeration enumeration:enumerationList) { if(enumeration.getLabel().equals(label)) { return enumeration; } } return null; } public boolean hasLabel(String label) { for(ValueEnumeration enumeration:enumerationList) { if(enumeration.getLabel().equals(label)) { return true; } } if ( ranges != null ) { for (ValueEnumerationRange range:ranges) { if (range.getLabel().equals(label)) { return true; } } } return false; } /** * Add value to enumeration list * @param value Integer value * @param label Label associated with value */ public void addEnumerationValue(long value, String label) { ValueEnumeration valEnum = new ValueEnumeration(value, label); enumerationList.add(valEnum); enumeration.put(value, valEnum); } /** * Add range to enumeration list */ public void addEnumerationRange(double min, double max, boolean isMinInclusive, boolean isMaxInclusive, String label) { assert(min < max); ValueEnumerationRange range = new ValueEnumerationRange(min, max, isMinInclusive, isMaxInclusive, label); ranges.add(range); } public void addEnumerationRange(ValueEnumerationRange range) { if ( ranges == null ) { ranges = new Vector<ValueEnumerationRange>(2); } ranges.add(range); } public List<ValueEnumeration> getValueEnumerationList() { return Collections.unmodifiableList(enumerationList); } /** * returns stringValue */ @Override public Object parseString(String stringValue) { return stringValue; } }