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 }