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 equals(Object obj) {
053                    if (this == obj)
054                            return true;
055                    if (obj == null)
056                            return false;
057                    if (getClass() != obj.getClass())
058                            return false;
059                    MultipleFeatureValue v = ((MultipleFeatureValue)obj);
060                    if (!featureValues.equals(v.featureValues))
061                            return false;
062                    return super.equals(obj);
063            }
064            
065            public String toString() {
066                    final StringBuilder sb = new StringBuilder();
067                    sb.append(super.toString());
068                    sb.append('{');
069                    for (Integer code : featureValues.keySet()) {
070                            sb.append('{');
071                            sb.append(featureValues.get(code));
072                            sb.append("->");
073                            sb.append(code);
074                            sb.append('}');
075                    }
076                    sb.append('}');
077                    return sb.toString();
078            }
079    }