org.maltparserx.parser.algorithm.planar.PlanarAddressFunction Maven / Gradle / Ivy
package org.maltparserx.parser.algorithm.planar;
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 PlanarAddressFunction extends AddressFunction {
public enum PlanarSubFunction {
STACK, INPUT
};
private String subFunctionName;
private PlanarSubFunction subFunction;
private Algorithm parsingAlgorithm;
private int index;
public PlanarAddressFunction(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((PlanarConfig)parsingAlgorithm.getCurrentParserConfiguration());
}
public void update(Object[] arguments) throws MaltChainedException {
if (arguments.length != 1 || !(arguments[0] instanceof PlanarConfig)) {
throw new ParsingException("Arguments to the planar address function is not correct. ");
}
update((PlanarConfig)arguments[0]);
}
private void update(PlanarConfig config) throws MaltChainedException {
if (subFunction == PlanarSubFunction.STACK) {
address.setAddress(config.getStackNode(index));
} else if (subFunction == PlanarSubFunction.INPUT) {
address.setAddress(config.getInputNode(index));
} else {
address.setAddress(null);
}
}
public String getSubFunctionName() {
return subFunctionName;
}
public void setSubFunctionName(String subFunctionName) {
this.subFunctionName = subFunctionName;
subFunction = PlanarSubFunction.valueOf(subFunctionName.toUpperCase());
}
public PlanarSubFunction 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;
PlanarAddressFunction other = (PlanarAddressFunction) 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() {
StringBuilder sb = new StringBuilder();
sb.append(subFunctionName);
sb.append('[');
sb.append(index);
sb.append(']');
return sb.toString();
}
}