package org.maltparser.core.symbol.nullvalue;
import java.util.SortedMap;
import java.util.TreeMap;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.core.helper.HashMap;
import org.maltparser.core.symbol.SymbolException;
import org.maltparser.core.symbol.SymbolTable;
/**
*
*
* @author Johan Hall
* @since 1.0
*/
public abstract class NullValues {
protected enum NullValueDegree {
NONE, ONE, ROOTNODE, NOVALUE
};
public enum NullValueId {
NO_NODE, ROOT_NODE, NO_VALUE
};
protected HashMap<NullValueId, String> nullValue2SymbolMap;
protected HashMap<NullValueId, Integer> nullValue2CodeMap;
protected HashMap<String, Integer> symbol2CodeMap;
protected SortedMap<Integer, String> code2SymbolMap;
protected SymbolTable table;
protected NullValueDegree nullValueEncoding;
protected String nullValueStrategy;
protected int nextCode;
public NullValues(SymbolTable table) {
setSymbolTable(table);
nullValue2SymbolMap = new HashMap<NullValueId, String>();
nullValue2CodeMap = new HashMap<NullValueId, Integer>();
symbol2CodeMap = new HashMap<String, Integer>();
code2SymbolMap = new TreeMap<Integer, String>();
}
private void setSymbolTable(SymbolTable table) {
this.table = table;
}
public SymbolTable getSymbolTable() {
return table;
}
public String getNullValueStrategy() {
return nullValueStrategy;
}
protected void setNullValueStrategy(String nullValueStrategy) {
this.nullValueStrategy = nullValueStrategy;
}
public NullValueDegree getNullValueEncoding() {
return nullValueEncoding;
}
public int getNextCode() {
return nextCode;
}
protected void setNextCode(int nextCode) {
this.nextCode = nextCode;
}
public boolean isNullValue(int code) {
return code2SymbolMap.containsKey(code);
}
public boolean isNullValue(String symbol) {
return symbol2CodeMap.containsKey(symbol);
}
public boolean isNullValue(StringBuilder symbol) {
return symbol2CodeMap.containsKey(symbol);
}
public int nullvalueToCode(NullValueId nullValueIdentifier) throws MaltChainedException {
if (!nullValue2CodeMap.containsKey(nullValueIdentifier)) {
throw new SymbolException("Illegal null-value identifier. ");
}
return nullValue2CodeMap.get(nullValueIdentifier);
}
public String nullvalueToSymbol(NullValueId nullValueIdentifier) throws MaltChainedException {
if (!nullValue2SymbolMap.containsKey(nullValueIdentifier)) {
throw new SymbolException("Illegal null-value identifier. ");
}
return nullValue2SymbolMap.get(nullValueIdentifier);
}
public int symbolToCode(String symbol) {
if (!symbol2CodeMap.containsKey(symbol)) {
return -1;
}
return symbol2CodeMap.get(symbol);
}
public int symbolToCode(StringBuilder symbol) {
if (!symbol2CodeMap.containsKey(symbol)) {
return -1;
}
return symbol2CodeMap.get(symbol);
}
public String codeToSymbol(int code) {
if (!code2SymbolMap.containsKey(code)) {
return null;
}
return code2SymbolMap.get(code);
}
protected abstract void setNullValueEncoding(String nullValueStrategy);
protected abstract void makeNullValues();
/*
* (non-Javadoc) @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
NullValues nl = (NullValues) obj;
if (!nullValueStrategy.equalsIgnoreCase(nl.getNullValueStrategy())) {
return false;
}
if (nextCode != nl.getNextCode()) {
return false;
}
if (!nullValue2SymbolMap.equals(nl.nullValue2SymbolMap)) {
return false;
}
if (!nullValue2CodeMap.equals(nl.nullValue2CodeMap)) {
return false;
}
if (!code2SymbolMap.equals(nl.code2SymbolMap)) {
return false;
}
if (!symbol2CodeMap.equals(nl.symbol2CodeMap)) {
return false;
}
return true;
}
/*
* (non-Javadoc) @see java.lang.Object#toString()
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Null-values:\n");
sb.append(" Strategy: ").append(nullValueStrategy);
sb.append(" NO_NODE -> ").append(nullValue2CodeMap.get(NullValueId.NO_NODE)).append(" ").append(nullValue2SymbolMap.get(NullValueId.NO_NODE)).append("\n");
sb.append(" ROOT_NODE -> ").append(nullValue2CodeMap.get(NullValueId.ROOT_NODE)).append(" ").append(nullValue2SymbolMap.get(NullValueId.ROOT_NODE)).append("\n");
sb.append(" NO_VALUE -> ").append(nullValue2CodeMap.get(NullValueId.NO_VALUE)).append(" ").append(nullValue2SymbolMap.get(NullValueId.NO_VALUE)).append("\n");
return sb.toString();
}
}