001 package org.maltparser.core.feature.value;
002
003 import java.util.Set;
004 import java.util.SortedMap;
005 import java.util.TreeMap;
006
007 import org.maltparser.core.feature.function.Function;
008 import org.maltparser.core.helper.HashSet;
009 /**
010 *
011 *
012 * @author Johan Hall
013 * @since 1.0
014 **/
015 public class MultipleFeatureValue extends FeatureValue {
016 protected SortedMap<Integer, String> featureValues;
017
018 public MultipleFeatureValue(Function function) {
019 super(function);
020 setFeatureValues(new TreeMap<Integer, String>());
021 }
022
023 public void reset() {
024 super.reset();
025 featureValues.clear();
026 }
027
028 public void addFeatureValue(int code, String Symbol) {
029 featureValues.put(code, Symbol);
030 }
031
032 protected void setFeatureValues(SortedMap<Integer, String> featureValues) {
033 this.featureValues = featureValues;
034 }
035
036 public Set<Integer> getCodes() {
037 return (Set<Integer>)featureValues.keySet();
038 }
039
040 public int getFirstCode() {
041 return featureValues.firstKey();
042 }
043
044 public Set<String> getSymbols() {
045 return new HashSet<String>(featureValues.values());
046 }
047
048 public String getFirstSymbol() {
049 return featureValues.get(featureValues.firstKey());
050 }
051
052 public boolean isMultiple() {
053 return true;
054 }
055
056 public boolean equals(Object obj) {
057 if (this == obj)
058 return true;
059 if (obj == null)
060 return false;
061 if (getClass() != obj.getClass())
062 return false;
063 MultipleFeatureValue v = ((MultipleFeatureValue)obj);
064 if (!featureValues.equals(v.featureValues))
065 return false;
066 return super.equals(obj);
067 }
068
069 public String toString() {
070 final StringBuilder sb = new StringBuilder();
071 sb.append(super.toString());
072 sb.append('{');
073 for (Integer code : featureValues.keySet()) {
074 sb.append('{');
075 sb.append(featureValues.get(code));
076 sb.append("->");
077 sb.append(code);
078 sb.append('}');
079 }
080 sb.append('}');
081 return sb.toString();
082 }
083 }