001 package org.maltparser.core.symbol.nullvalue;
002
003 import java.util.HashMap;
004 import java.util.SortedMap;
005 import java.util.TreeMap;
006
007 import org.maltparser.core.exception.MaltChainedException;
008 import org.maltparser.core.symbol.SymbolException;
009 import org.maltparser.core.symbol.SymbolTable;
010 /**
011
012
013 @author Johan Hall
014 @since 1.0
015 */
016 public abstract class NullValues {
017 protected enum NullValueDegree {
018 NONE, ONE, ROOTLABEL, ROOTNODE, NOVALUE
019 };
020 public enum NullValueId {
021 NO_NODE, ROOT_NODE, NO_VALUE
022 };
023 protected HashMap<NullValueId, String> nullValue2SymbolMap;
024 protected HashMap<NullValueId, Integer> nullValue2CodeMap;
025 protected HashMap<String, Integer> symbol2CodeMap;
026 protected SortedMap<Integer, String> code2SymbolMap;
027 protected SymbolTable table;
028 protected NullValueDegree nullValueEncoding;
029 protected String nullValueStrategy;
030 protected int nextCode;
031
032 public NullValues(SymbolTable table) {
033 setSymbolTable(table);
034 nullValue2SymbolMap = new HashMap<NullValueId, String>();
035 nullValue2CodeMap = new HashMap<NullValueId, Integer>();
036 symbol2CodeMap = new HashMap<String, Integer>();
037 code2SymbolMap = new TreeMap<Integer, String>();
038 }
039
040 private void setSymbolTable(SymbolTable table) {
041 this.table = table;
042 }
043
044 public SymbolTable getSymbolTable() {
045 return table;
046 }
047
048 public String getNullValueStrategy() {
049 return nullValueStrategy;
050 }
051
052 protected void setNullValueStrategy(String nullValueStrategy) {
053 this.nullValueStrategy = nullValueStrategy;
054 }
055
056 public NullValueDegree getNullValueEncoding() {
057 return nullValueEncoding;
058 }
059
060 public int getNextCode() {
061 return nextCode;
062 }
063
064 protected void setNextCode(int nextCode) {
065 this.nextCode = nextCode;
066 }
067
068 public boolean isNullValue(int code) {
069 return code2SymbolMap.containsKey(code);
070 }
071
072 public boolean isNullValue(String symbol) {
073 return symbol2CodeMap.containsKey(symbol);
074 }
075
076 public boolean isNullValue(StringBuilder symbol) {
077 return symbol2CodeMap.containsKey(symbol);
078 }
079
080 public int nullvalueToCode(NullValueId nullValueIdentifier) throws MaltChainedException {
081 if (!nullValue2CodeMap.containsKey(nullValueIdentifier)) {
082 throw new SymbolException("Illegal null-value identifier. ");
083 }
084 return nullValue2CodeMap.get(nullValueIdentifier);
085 }
086
087 public String nullvalueToSymbol(NullValueId nullValueIdentifier) throws MaltChainedException {
088 if (!nullValue2SymbolMap.containsKey(nullValueIdentifier)) {
089 throw new SymbolException("Illegal null-value identifier. ");
090 }
091 return nullValue2SymbolMap.get(nullValueIdentifier);
092 }
093
094 public int symbolToCode(String symbol) {
095 if (!symbol2CodeMap.containsKey(symbol)) {
096 return -1;
097 }
098 return symbol2CodeMap.get(symbol);
099 }
100
101 public int symbolToCode(StringBuilder symbol) {
102 if (!symbol2CodeMap.containsKey(symbol)) {
103 return -1;
104 }
105 return symbol2CodeMap.get(symbol);
106 }
107
108 public String codeToSymbol(int code) {
109 if (!code2SymbolMap.containsKey(code)) {
110 return null;
111 }
112 return code2SymbolMap.get(code);
113 }
114
115 protected abstract void setNullValueEncoding(String nullValueStrategy);
116 protected abstract void makeNullValues();
117
118 /* (non-Javadoc)
119 * @see java.lang.Object#equals(java.lang.Object)
120 */
121 public boolean equals(Object obj) {
122 if (this == obj)
123 return true;
124 if (obj == null)
125 return false;
126 if (getClass() != obj.getClass())
127 return false;
128
129 NullValues nl = (NullValues)obj;
130 if (!nullValueStrategy.equalsIgnoreCase(nl.getNullValueStrategy())) { return false; }
131 if (nextCode != nl.getNextCode()) { return false; }
132 if (!nullValue2SymbolMap.equals(nl.nullValue2SymbolMap)) { return false; }
133 if (!nullValue2CodeMap.equals(nl.nullValue2CodeMap)) { return false; }
134 if (!code2SymbolMap.equals(nl.code2SymbolMap)) { return false; }
135 if (!symbol2CodeMap.equals(nl.symbol2CodeMap)) { return false; }
136 return true;
137 }
138
139 /* (non-Javadoc)
140 * @see java.lang.Object#toString()
141 */
142 public String toString() {
143 StringBuilder sb = new StringBuilder();
144 sb.append("Null-values:\n");
145 sb.append(" Strategy: "+ nullValueStrategy);
146 sb.append(" NO_NODE -> "+ nullValue2CodeMap.get(NullValueId.NO_NODE) + " " + nullValue2SymbolMap.get(NullValueId.NO_NODE)+"\n");
147 sb.append(" ROOT_NODE -> "+ nullValue2CodeMap.get(NullValueId.ROOT_NODE) + " " + nullValue2SymbolMap.get(NullValueId.ROOT_NODE)+"\n");
148 sb.append(" NO_VALUE -> "+ nullValue2CodeMap.get(NullValueId.NO_VALUE) + " " + nullValue2SymbolMap.get(NullValueId.NO_VALUE)+"\n");
149 return sb.toString();
150 }
151 }