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 }