package tc.oc.pgm.xml.property;
import org.jdom2.Element;
import tc.oc.pgm.xml.InvalidXMLException;
import tc.oc.pgm.xml.Node;
import tc.oc.pgm.xml.parser.PrimitiveParser;
public abstract class TransfiniteProperty<T extends Comparable, Self extends TransfiniteProperty<T, Self>> extends ComparableProperty<T, Self> {
boolean infinity;
public TransfiniteProperty(Element parent, String name, PrimitiveParser<T> parser) {
super(parent, name, parser);
}
public Self infinity(boolean allow) {
infinity = allow;
return self();
}
@Override
protected T parseAndValidate(Node node, String text) throws InvalidXMLException {
final T value = super.parseAndValidate(node, text);
if(!infinity && !isFinite(value)) {
throw new InvalidXMLException("Value must be finite", node);
}
return value;
}
protected abstract boolean isFinite(T value);
}