package at.ac.tuwien.dsg.scaledom.dom;
import java.util.LinkedList;
import org.apache.xerces.dom.ParentNode;
public class LoadProcessState {
/** Parent node hierarchy of the current load process from root node down to the current parent node. */
private final LinkedList<ParentNode> hierarchy;
/** Previous parent node. */
private ParentNode previousParentNode;
/** Number of events to skip. */
private int eventsToSkip;
/** Last occurred event type. */
private int lastEventType;
/** Number of created nodes. */
private long numberOfCreatedNodes;
public LoadProcessState(final ParentNode root, final int elementsToSkip) {
hierarchy = new LinkedList<ParentNode>();
hierarchy.add(root);
previousParentNode = null;
this.eventsToSkip = elementsToSkip;
lastEventType = -1;
numberOfCreatedNodes = 0;
}
public boolean shouldSkipEvent() {
return eventsToSkip > 0;
}
public void skippedEvent() {
--eventsToSkip;
}
public int getLastEventType() {
return lastEventType;
}
public void setLastEventType(final int eventType) {
lastEventType = eventType;
}
public ParentNode getPreviousParentNode() {
return previousParentNode;
}
public ParentNode getCurrentParentNode() {
if (hierarchy.isEmpty()) {
// May be empty if there are more EndElement events processed than StartElement events, this is possible if
// eventsToSkip > 0 and StartElement events have been skipped
return null;
}
return hierarchy.getLast();
}
public void addParentNodeAtBottom(final ParentNode parent) {
hierarchy.addLast(parent);
}
public void removeCurrentParentNode() {
if (hierarchy.isEmpty()) {
// May be empty if there are more EndElement events processed than StartElement events, this is possible if
// eventsToSkip > 0 and StartElement events have been skipped
return;
}
previousParentNode = hierarchy.removeLast();
}
public void createdNode() {
++numberOfCreatedNodes;
}
public long getNumberOfCreatedNodes() {
return numberOfCreatedNodes;
}
}