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