+ protected void serializeLevelToDom(Node currentJcrNode,
+ org.w3c.dom.Node currentDomNode, int currentDepth, int targetDepth)
+ throws RepositoryException, SAXException {
+ DomContentHandler domContentHandler = new DomContentHandler(
+ currentDomNode);
+ currentJcrNode.getSession().exportDocumentView(
+ currentJcrNode.getPath(), domContentHandler, true, true);
+
+ if (currentDepth == targetDepth)
+ return;
+
+ // TODO: filter
+ NodeIterator nit = currentJcrNode.getNodes();
+ while (nit.hasNext()) {
+ Node nextJcrNode = nit.nextNode();
+ org.w3c.dom.Node nextDomNode;
+ if (currentDomNode instanceof Document)
+ nextDomNode = ((Document) currentDomNode).getDocumentElement();
+ else {
+ String name = currentJcrNode.getName();
+ NodeList nodeList = ((Element) currentDomNode)
+ .getElementsByTagName(name);
+ if (nodeList.getLength() < 1)
+ throw new ArgeoException("No elment named " + name
+ + " under " + currentDomNode);
+ // we know it is the last one added
+ nextDomNode = nodeList.item(nodeList.getLength() - 1);
+ }
+ // recursive call
+ serializeLevelToDom(nextJcrNode, nextDomNode, currentDepth + 1,
+ targetDepth);
+ }