org.maltparserx.parser.algorithm.twoplanar.TwoPlanarAddressFunction Maven / Gradle / Ivy
package org.maltparserx.parser.algorithm.twoplanar;
import org.maltparserx.core.exception.MaltChainedException;
import org.maltparserx.core.feature.function.AddressFunction;
import org.maltparserx.core.feature.value.AddressValue;
import org.maltparserx.parser.Algorithm;
import org.maltparserx.parser.ParsingException;
/**
*
* @author Carlos Gomez Rodriguez
**/
public class TwoPlanarAddressFunction extends AddressFunction {
public enum TwoPlanarSubFunction {
ACTIVESTACK, INACTIVESTACK , INPUT
};
protected String subFunctionName;
protected TwoPlanarSubFunction subFunction;
protected Algorithm parsingAlgorithm;
protected int index;
public TwoPlanarAddressFunction(String subFunctionName, Algorithm parsingAlgorithm) {
super();
setSubFunctionName(subFunctionName);
setAlgorithm(parsingAlgorithm);
}
public void initialize(Object[] arguments) throws MaltChainedException {
if (arguments.length != 1) {
throw new ParsingException("Could not initialize "+this.getClass().getName()+": number of arguments are not correct. ");
}
if (!(arguments[0] instanceof Integer)) {
throw new ParsingException("Could not initialize "+this.getClass().getName()+": the first argument is not an integer. ");
}
setIndex(((Integer)arguments[0]).intValue());
}
public Class>[] getParameterTypes() {
Class>[] paramTypes = { java.lang.Integer.class };
return paramTypes;
}
public void update() throws MaltChainedException {
update((TwoPlanarConfig)parsingAlgorithm.getCurrentParserConfiguration());
}
public void update(Object[] arguments) throws MaltChainedException {
if (arguments.length != 1 || !(arguments[0] instanceof TwoPlanarConfig)) {
throw new ParsingException("Arguments to the two-planar address function are not correct. ");
}
update((TwoPlanarConfig)arguments[0]);
}
private void update(TwoPlanarConfig config) throws MaltChainedException {
if (subFunction == TwoPlanarSubFunction.ACTIVESTACK) {
address.setAddress(config.getActiveStackNode(index));
} else if ( subFunction == TwoPlanarSubFunction.INACTIVESTACK ) {
address.setAddress(config.getInactiveStackNode(index));
} else if (subFunction == TwoPlanarSubFunction.INPUT) {
address.setAddress(config.getInputNode(index));
} else {
address.setAddress(null);
}
}
public String getSubFunctionName() {
return subFunctionName;
}
public void setSubFunctionName(String subFunctionName) {
this.subFunctionName = subFunctionName;
subFunction = TwoPlanarSubFunction.valueOf(subFunctionName.toUpperCase());
}
public TwoPlanarSubFunction getSubFunction() {
return subFunction;
}
public AddressValue getAddressValue() {
return address;
}
public Algorithm getParsingAlgorithm() {
return parsingAlgorithm;
}
public void setAlgorithm(Algorithm parsingAlgorithm) {
this.parsingAlgorithm = parsingAlgorithm;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TwoPlanarAddressFunction other = (TwoPlanarAddressFunction) obj;
if (index != other.index)
return false;
if (parsingAlgorithm == null) {
if (other.parsingAlgorithm != null)
return false;
} else if (!parsingAlgorithm.equals(other.parsingAlgorithm))
return false;
if (subFunction == null) {
if (other.subFunction != null)
return false;
} else if (!subFunction.equals(other.subFunction))
return false;
return true;
}
public String toString() {
return subFunctionName + "[" + index + "]";
}
}