package tc.oc.pgm.xml;
import org.jdom2.Attribute;
import org.jdom2.Element;
/**
* Deep-copies a given {@link Element}.
*
* Unlike a {@link #clone}d element, calling {@link #getParent} or {@link #getDocument} on this element will
* return the same value as the original element, even though this element is not actually a child of the
* original element's parent. This is needed so that copied elements know which document they came from, and
* can generate proper error messages.
*/
public class ClonedElement extends BoundedElement {
protected final int indexInParent;
public ClonedElement(Element el) {
super(el.getName(), el.getNamespace());
setParent(el.getParent());
final BoundedElement bounded = (BoundedElement) el;
setLine(bounded.getLine());
setColumn(bounded.getColumn());
setStartLine(bounded.getStartLine());
setEndLine(bounded.getEndLine());
this.indexInParent = bounded.indexInParent();
setContent(el.cloneContent());
for(Attribute attribute : el.getAttributes()) {
setAttribute(attribute.clone());
}
}
@Override
public int indexInParent() {
return indexInParent;
}
}