package org.maltparser.core.symbol;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.core.feature.function.FeatureFunction;
import org.maltparser.core.feature.function.Modifiable;
import org.maltparser.core.feature.value.FeatureValue;
import org.maltparser.core.feature.value.SingleFeatureValue;
import org.maltparser.core.symbol.nullvalue.NullValues.NullValueId;
public abstract class TableFeature implements FeatureFunction, Modifiable {
protected SingleFeatureValue featureValue;
protected SymbolTable table;
protected String tableName;
protected SymbolTableHandler tableHandler;
protected int type;
public TableFeature() throws MaltChainedException {
featureValue = new SingleFeatureValue(this);
}
public abstract void update() throws MaltChainedException;
public abstract void initialize(Object[] arguments) throws MaltChainedException;
public abstract Class<?>[] getParameterTypes();
public String getSymbol(int value) throws MaltChainedException {
return table.getSymbolCodeToString(value);
}
public int getCode(String value) throws MaltChainedException {
return table.getSymbolStringToCode(value);
}
public SymbolTable getSymbolTable() {
return table;
}
public void setSymbolTable(SymbolTable table) {
this.table = table;
}
public void updateCardinality() {
// if (table != null) {
// featureValue.setCardinality(table.getValueCounter());
// } else {
// featureValue.setCardinality(0);
// }
}
public void setFeatureValue(int indexCode) throws MaltChainedException {
if (table.getSymbolCodeToString(indexCode) == null) {
featureValue.setIndexCode(indexCode);
featureValue.setValue(1);
featureValue.setSymbol(table.getNullValueSymbol(NullValueId.NO_NODE));
featureValue.setNullValue(true);
} else {
featureValue.setIndexCode(indexCode);
featureValue.setValue(1);
featureValue.setSymbol(table.getSymbolCodeToString(indexCode));
featureValue.setNullValue(table.isNullValue(indexCode));
}
}
public void setFeatureValue(String symbol) throws MaltChainedException {
if (table.getSymbolStringToCode(symbol) < 0) {
featureValue.setIndexCode(table.getNullValueCode(NullValueId.NO_NODE));
featureValue.setValue(1);
featureValue.setSymbol(symbol);
featureValue.setNullValue(true);
} else {
featureValue.setIndexCode(table.getSymbolStringToCode(symbol));
featureValue.setValue(1);
featureValue.setSymbol(symbol);
featureValue.setNullValue(table.isNullValue(symbol));
}
}
public FeatureValue getFeatureValue() {
return featureValue;
}
public SymbolTableHandler getTableHandler() {
return tableHandler;
}
public void setTableHandler(SymbolTableHandler tableHandler) {
this.tableHandler = tableHandler;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof TableFeature)) {
return false;
}
if (!obj.toString().equals(this.toString())) {
return false;
}
return true;
}
public void setTableName(String name) {
this.tableName = name;
}
public String getTableName() {
return tableName;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getMapIdentifier() {
return getSymbolTable().getName();
}
@Override
public String toString() {
return tableName;
}
}