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