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 016 public TableFeature() throws MaltChainedException { 017 featureValue = new SingleFeatureValue(this); 018 } 019 020 public abstract void update() throws MaltChainedException; 021 public abstract void initialize(Object[] arguments) throws MaltChainedException; 022 public abstract Class<?>[] getParameterTypes(); 023 024 public String getSymbol(int value) throws MaltChainedException { 025 return table.getSymbolCodeToString(value); 026 } 027 028 public int getCode(String value) throws MaltChainedException { 029 return table.getSymbolStringToCode(value); 030 } 031 032 public SymbolTable getSymbolTable() { 033 return table; 034 } 035 036 public void setSymbolTable(SymbolTable table) { 037 this.table = table; 038 } 039 040 public void updateCardinality() { 041 if (table != null) { 042 featureValue.setCardinality(table.getValueCounter()); 043 } else { 044 featureValue.setCardinality(0); 045 } 046 } 047 048 public void setFeatureValue(int value) throws MaltChainedException { 049 if (table.getSymbolCodeToString(value) == null) { 050 featureValue.setCode(value); 051 featureValue.setKnown(table.getKnown(value)); 052 featureValue.setSymbol(table.getNullValueSymbol(NullValueId.NO_NODE)); 053 featureValue.setNullValue(true); 054 } else { 055 featureValue.setCode(value); 056 featureValue.setKnown(table.getKnown(value)); 057 featureValue.setSymbol(table.getSymbolCodeToString(value)); 058 featureValue.setNullValue(table.isNullValue(value)); 059 } 060 } 061 062 public void setFeatureValue(String value) throws MaltChainedException { 063 if (table.getSymbolStringToCode(value) < 0) { 064 featureValue.setCode(table.getNullValueCode(NullValueId.NO_NODE)); 065 featureValue.setKnown(table.getKnown(value)); 066 featureValue.setSymbol(value); 067 featureValue.setNullValue(true); 068 } else { 069 featureValue.setCode(table.getSymbolStringToCode(value)); 070 featureValue.setKnown(table.getKnown(value)); 071 featureValue.setSymbol(value); 072 featureValue.setNullValue(table.isNullValue(value)); 073 } 074 } 075 076 public FeatureValue getFeatureValue() { 077 return featureValue; 078 } 079 080 public SymbolTableHandler getTableHandler() { 081 return tableHandler; 082 } 083 084 public void setTableHandler(SymbolTableHandler tableHandler) { 085 this.tableHandler = tableHandler; 086 } 087 088 public boolean equals(Object obj) { 089 if (!(obj instanceof TableFeature)) { 090 return false; 091 } 092 if (!obj.toString().equals(this.toString())) { 093 return false; 094 } 095 return true; 096 } 097 098 public void setTableName(String name) { 099 this.tableName = name; 100 } 101 102 public String getTableName() { 103 return tableName; 104 } 105 106 public String toString() { 107 return tableName; 108 } 109 }