package tc.oc.pgm.xml; import org.jdom2.Element; import org.jdom2.Namespace; import org.jdom2.located.LocatedElement; /** * This exists in order to capture both start and ending lines of elements for error messages. * {@link LocatedElement} only captures the ending line, which is rather unintuitive. * * {@link BoundedJDOMFactory} and {@link BoundedSAXHandler} are mostly just hoop-jumping to make JDOM use this class. */ public class BoundedElement extends LocatedElement { private int startLine, endLine; private int indexInParent = Integer.MIN_VALUE; public BoundedElement(String name, Namespace namespace) { super(name, namespace); } public BoundedElement(String name) { super(name); } public BoundedElement(String name, String uri) { super(name, uri); } public BoundedElement(String name, String prefix, String uri) { super(name, prefix, uri); } public int getStartLine() { return startLine; } public void setStartLine(int startLine) { setLine(startLine); this.startLine = startLine; } public int getEndLine() { return endLine; } public void setEndLine(int endLine) { this.endLine = endLine; } public int indexInParent() { if(indexInParent < -1) { final Element parent = getParentElement(); indexInParent = parent == null ? -1 : parent.indexOf(this); } return indexInParent; } @Override public BoundedElement clone() { final BoundedElement that = (BoundedElement) super.clone(); that.setLine(getLine()); that.setColumn(getColumn()); that.setStartLine(getStartLine()); that.setEndLine(getEndLine()); return that; } }