001 package org.maltparser.core.symbol;
002
003 import org.maltparser.core.exception.MaltChainedException;
004 import org.maltparser.core.feature.function.FeatureFunction;
005 import org.maltparser.core.feature.function.Modifiable;
006 import org.maltparser.core.feature.value.FeatureValue;
007 import org.maltparser.core.feature.value.SingleFeatureValue;
008 import org.maltparser.core.symbol.nullvalue.NullValues.NullValueId;
009
010 public abstract class TableFeature implements FeatureFunction, Modifiable {
011 protected SingleFeatureValue featureValue;
012 protected SymbolTable table;
013 protected String tableName;
014 protected SymbolTableHandler tableHandler;
015 protected int type;
016
017 public TableFeature() throws MaltChainedException {
018 featureValue = new SingleFeatureValue(this);
019 }
020
021 public abstract void update() throws MaltChainedException;
022 public abstract void initialize(Object[] arguments) throws MaltChainedException;
023 public abstract Class<?>[] getParameterTypes();
024
025 public String getSymbol(int value) throws MaltChainedException {
026 return table.getSymbolCodeToString(value);
027 }
028
029 public int getCode(String value) throws MaltChainedException {
030 return table.getSymbolStringToCode(value);
031 }
032
033 public SymbolTable getSymbolTable() {
034 return table;
035 }
036
037 public void setSymbolTable(SymbolTable table) {
038 this.table = table;
039 }
040
041 public void updateCardinality() {
042 // if (table != null) {
043 // featureValue.setCardinality(table.getValueCounter());
044 // } else {
045 // featureValue.setCardinality(0);
046 // }
047 }
048
049 public void setFeatureValue(int indexCode) throws MaltChainedException {
050 if (table.getSymbolCodeToString(indexCode) == null) {
051 featureValue.setIndexCode(indexCode);
052 featureValue.setValue(1);
053 featureValue.setSymbol(table.getNullValueSymbol(NullValueId.NO_NODE));
054 featureValue.setNullValue(true);
055 } else {
056 featureValue.setIndexCode(indexCode);
057 featureValue.setValue(1);
058 featureValue.setSymbol(table.getSymbolCodeToString(indexCode));
059 featureValue.setNullValue(table.isNullValue(indexCode));
060 }
061 }
062
063 public void setFeatureValue(String symbol) throws MaltChainedException {
064 if (table.getSymbolStringToCode(symbol) < 0) {
065 featureValue.setIndexCode(table.getNullValueCode(NullValueId.NO_NODE));
066 featureValue.setValue(1);
067 featureValue.setSymbol(symbol);
068 featureValue.setNullValue(true);
069 } else {
070 featureValue.setIndexCode(table.getSymbolStringToCode(symbol));
071 featureValue.setValue(1);
072 featureValue.setSymbol(symbol);
073 featureValue.setNullValue(table.isNullValue(symbol));
074 }
075 }
076
077 public FeatureValue getFeatureValue() {
078 return featureValue;
079 }
080
081 public SymbolTableHandler getTableHandler() {
082 return tableHandler;
083 }
084
085 public void setTableHandler(SymbolTableHandler tableHandler) {
086 this.tableHandler = tableHandler;
087 }
088
089 public boolean equals(Object obj) {
090 if (!(obj instanceof TableFeature)) {
091 return false;
092 }
093 if (!obj.toString().equals(this.toString())) {
094 return false;
095 }
096 return true;
097 }
098
099 public void setTableName(String name) {
100 this.tableName = name;
101 }
102
103 public String getTableName() {
104 return tableName;
105 }
106
107 public int getType() {
108 return type;
109 }
110
111 public void setType(int type) {
112 this.type = type;
113 }
114
115 public String getMapIdentifier() {
116 return getSymbolTable().getName();
117 }
118
119 public String toString() {
120 return tableName;
121 }
122 }