} catch (NoSuchItemStateException e) {
// should never happen actually. this would mean
// the parent of this modified node is deleted
String msg = "Parent of node " + state.getId() + " is deleted.";
log.error(msg);
throw new ItemStateException(msg, e);
}
if (parent != null) {
// check if node has been renamed
NodeState.ChildNodeEntry moved = null;
for (Iterator removedNodes = parent.getRemovedChildNodeEntries().iterator(); removedNodes.hasNext();) {
NodeState.ChildNodeEntry child = (NodeState.ChildNodeEntry) removedNodes.next();
if (child.getId().equals(n.getNodeId())) {
// found node re-added with different name
moved = child;
}
}
if (moved != null) {
NodeTypeImpl nodeType = getNodeType(parent, session);
Set mixins = parent.getMixinTypeNames();
Path newPath = getPath(state.getId(), hmgr);
Path parentPath = getParent(newPath);
Path oldPath;
try {
if (moved.getIndex() == 0) {
oldPath = Path.create(parentPath, moved.getName(), false);
} else {
oldPath = Path.create(parentPath, moved.getName(), moved.getIndex(), false);
}
} catch (MalformedPathException e) {
// should never happen actually
String msg = "Malformed path for item: " + state.getId();
log.error(msg);
throw new ItemStateException(msg, e);
}
events.add(EventState.childNodeRemoved(parent.getNodeId(),
parentPath,
n.getNodeId(),
oldPath.getNameElement(),
nodeType,
mixins,
session));
events.add(EventState.childNodeAdded(parent.getNodeId(),
parentPath,
n.getNodeId(),
newPath.getNameElement(),
nodeType,
mixins,
session));
}
}
}
}
// check if child nodes of modified node state have been reordered
List reordered = n.getReorderedChildNodeEntries();
NodeTypeImpl nodeType = getNodeType(n, session);
Set mixins = n.getMixinTypeNames();
if (reordered.size() > 0) {
// create a node removed and a node added event for every
// reorder
for (Iterator ro = reordered.iterator(); ro.hasNext();) {
NodeState.ChildNodeEntry child = (NodeState.ChildNodeEntry) ro.next();
QName name = child.getName();
int index = (child.getIndex() != 1) ? child.getIndex() : 0;
Path parentPath = getPath(n.getNodeId(), hmgr);
Path.PathElement addedElem = Path.create(name, index).getNameElement();
// get removed index
NodeState overlayed = (NodeState) n.getOverlayedState();
NodeState.ChildNodeEntry entry = overlayed.getChildNodeEntry(child.getId());
if (entry == null) {
throw new ItemStateException("Unable to retrieve old child index for item: " + child.getId());
}
int oldIndex = (entry.getIndex() != 1) ? entry.getIndex() : 0;
Path.PathElement removedElem = Path.create(name, oldIndex).getNameElement();
events.add(EventState.childNodeRemoved(n.getNodeId(),