001 package org.maltparser.core.syntaxgraph.feature; 002 003 import org.maltparser.core.exception.MaltChainedException; 004 import org.maltparser.core.feature.function.AddressFunction; 005 import org.maltparser.core.feature.value.AddressValue; 006 import org.maltparser.core.io.dataformat.DataFormatInstance; 007 import org.maltparser.core.symbol.TableFeature; 008 import org.maltparser.core.symbol.nullvalue.NullValues.NullValueId; 009 import org.maltparser.core.syntaxgraph.SyntaxGraphException; 010 import org.maltparser.core.syntaxgraph.node.DependencyNode; 011 012 public class InputTableFeature extends TableFeature { 013 protected AddressFunction addressFunction; 014 015 public InputTableFeature(DataFormatInstance dataFormatInstance) throws MaltChainedException { 016 super(); 017 setTableHandler(dataFormatInstance.getSymbolTables()); 018 } 019 020 public void initialize(Object[] arguments) throws MaltChainedException { 021 if (arguments.length != 2) { 022 throw new SyntaxGraphException("Could not initialize InputTableFeature: number of arguments are not correct. "); 023 } 024 if (!(arguments[0] instanceof String)) { 025 throw new SyntaxGraphException("Could not initialize InputTableFeature: the first argument is not a string. "); 026 } 027 if (!(arguments[1] instanceof AddressFunction)) { 028 throw new SyntaxGraphException("Could not initialize InputTableFeature: the second argument is not an address function. "); 029 } 030 setTableName((String)arguments[0]); 031 setSymbolTable(tableHandler.getSymbolTable(getTableName())); 032 setAddressFunction((AddressFunction)arguments[1]); 033 } 034 035 public Class<?>[] getParameterTypes() { 036 Class<?>[] paramTypes = { java.lang.String.class, org.maltparser.core.feature.function.AddressFunction.class }; 037 return paramTypes; 038 } 039 040 public void update() throws MaltChainedException { 041 final AddressValue a = addressFunction.getAddressValue(); 042 043 if (a.getAddress() == null) { 044 if (getSymbolTable() != null) { 045 featureValue.setCode(getSymbolTable().getNullValueCode(NullValueId.NO_NODE)); 046 featureValue.setSymbol(getSymbolTable().getNullValueSymbol(NullValueId.NO_NODE)); 047 } else { 048 featureValue.setCode(0); 049 featureValue.setSymbol("#null"); 050 } 051 featureValue.setKnown(true); 052 featureValue.setNullValue(true); 053 } else { 054 // try { 055 // a.getAddressClass().asSubclass(org.maltparser.core.syntaxgraph.node.DependencyNode.class); 056 057 final DependencyNode node = (DependencyNode)a.getAddress(); 058 if (!node.isRoot()) { 059 if (getSymbolTable() != null && node.hasLabel(getSymbolTable())) { 060 featureValue.setCode(node.getLabelCode(getSymbolTable())); 061 featureValue.setSymbol(getSymbolTable().getSymbolCodeToString(node.getLabelCode(getSymbolTable()))); 062 featureValue.setKnown(getSymbolTable().getKnown(node.getLabelCode(getSymbolTable()))); 063 featureValue.setNullValue(false); 064 } else { 065 featureValue.setCode(0); 066 featureValue.setSymbol("#null"); 067 // if (getSymbolTable() != null) { 068 // featureValue.setCode(getSymbolTable().getNullValueCode(NullValueId.NO_VALUE)); 069 // featureValue.setSymbol(getSymbolTable().getNullValueSymbol(NullValueId.NO_VALUE)); 070 // } else { 071 // featureValue.setCode(0); 072 // featureValue.setSymbol("#null"); 073 // } 074 featureValue.setKnown(true); 075 featureValue.setNullValue(true); 076 } 077 } else { 078 // if (getSymbolTable() != null) { 079 // featureValue.setCode(getSymbolTable().getNullValueCode(NullValueId.ROOT_NODE)); 080 // featureValue.setSymbol(getSymbolTable().getNullValueSymbol(NullValueId.ROOT_NODE)); 081 // } else { 082 // featureValue.setCode(0); 083 // featureValue.setSymbol("#null"); 084 // } 085 featureValue.setCode(0); 086 featureValue.setSymbol("#null"); 087 featureValue.setKnown(true); 088 featureValue.setNullValue(true); 089 } 090 // } catch (ClassCastException e) { 091 // featureValue.setCode(getSymbolTable().getNullValueCode(NullValueId.NO_NODE)); 092 // featureValue.setSymbol(getSymbolTable().getNullValueSymbol(NullValueId.NO_NODE)); 093 // featureValue.setKnown(true); 094 // featureValue.setNullValue(true); 095 // } 096 } 097 } 098 099 public AddressFunction getAddressFunction() { 100 return addressFunction; 101 } 102 103 public void setAddressFunction(AddressFunction addressFunction) { 104 this.addressFunction = addressFunction; 105 } 106 107 public boolean equals(Object obj) { 108 if (this == obj) 109 return true; 110 if (obj == null) 111 return false; 112 if (getClass() != obj.getClass()) 113 return false; 114 return obj.toString().equals(toString()); 115 } 116 117 public int hashCode() { 118 return 217 + (null == toString() ? 0 : toString().hashCode()); 119 } 120 121 public String toString() { 122 final StringBuilder sb = new StringBuilder(); 123 sb.append("InputTable("); 124 sb.append(super.toString()); 125 sb.append(", "); 126 sb.append(addressFunction.toString()); 127 sb.append(")"); 128 return sb.toString(); 129 } 130 131 }