You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by mi...@apache.org on 2005/04/11 11:09:08 UTC

svn commit: r160851 - in lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication: ImportSiteTree.java JCRSiteTree.java JCRSiteTreeNodeImpl.java

Author: michi
Date: Mon Apr 11 02:09:06 2005
New Revision: 160851

URL: http://svn.apache.org/viewcvs?view=rev&rev=160851
Log:
patch of Felix Roethenbacher added

Modified:
    lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/ImportSiteTree.java
    lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTree.java
    lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTreeNodeImpl.java

Modified: lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/ImportSiteTree.java
URL: http://svn.apache.org/viewcvs/lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/ImportSiteTree.java?view=diff&r1=160850&r2=160851
==============================================================================
--- lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/ImportSiteTree.java (original)
+++ lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/ImportSiteTree.java Mon Apr 11 02:09:06 2005
@@ -70,22 +70,11 @@
 
             // Import authoring sitetree.
             Session authSession = repo.login(new SimpleCredentials(REPO_USER, "".toCharArray()), Publication.AUTHORING_AREA);
-            NamespaceRegistry registry = authSession.getWorkspace().getNamespaceRegistry();
-            try {
-                nsPrefixAuthSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixAuthUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            } catch (NamespaceException nse) {
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_USER, JCRSiteTree.NS_URI_USER);
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_SYSTEM, JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixAuthSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixAuthUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            }
+            nsPrefixAuthSys = getNamespacePrefix(authSession, JCRSiteTree.NS_URI_SYSTEM, JCRSiteTree.NS_PREFIX_SYSTEM);
+            nsPrefixAuthUser = getNamespacePrefix(authSession, JCRSiteTree.NS_URI_USER, JCRSiteTree.NS_PREFIX_USER);
             
             authSession.importXML("/", new FileInputStream(defaultPubDir + "/content/authoring/sitetree.xml.import"));
 
-            authSession.setNamespacePrefix(nsPrefixAuthSys, JCRSiteTree.NS_URI_SYSTEM);
-            authSession.setNamespacePrefix(nsPrefixAuthUser, JCRSiteTree.NS_URI_USER);
-            
             // Remove empty text nodes and add referenceable/versionable mixinType
             NodeIterator iter = authSession.getRootNode().getNodes(nsPrefixAuthSys + ":*");
             iter = authSession.getRootNode().getNodes(nsPrefixAuthSys + ":*");
@@ -98,20 +87,9 @@
             // Clone authoring sitetree to live workspace
             System.out.println("Cloning authoring area to live area.");
             Session liveSession = repo.login(new SimpleCredentials(REPO_USER, "".toCharArray()), Publication.LIVE_AREA);
-            registry = liveSession.getWorkspace().getNamespaceRegistry();
-            try {
-                nsPrefixLiveSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixLiveUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            } catch (NamespaceException nse) {
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_USER, JCRSiteTree.NS_URI_USER);
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_SYSTEM, JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixLiveSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixLiveUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            }
+            nsPrefixLiveSys = getNamespacePrefix(liveSession, JCRSiteTree.NS_URI_SYSTEM, JCRSiteTree.NS_PREFIX_SYSTEM);
+            nsPrefixLiveUser = getNamespacePrefix(liveSession, JCRSiteTree.NS_URI_USER, JCRSiteTree.NS_PREFIX_USER);
             
-            liveSession.setNamespacePrefix(nsPrefixLiveSys, JCRSiteTree.NS_URI_SYSTEM);
-            liveSession.setNamespacePrefix(nsPrefixLiveUser, JCRSiteTree.NS_URI_USER);
-          
             liveSession.getWorkspace().clone(Publication.AUTHORING_AREA,
                                              "/" + nsPrefixAuthSys + ":site",
                                              "/" + nsPrefixLiveSys + ":site", true);
@@ -119,20 +97,10 @@
             // Remove nodes that are not in live sitetree.
             System.out.println("Removing nodes not in live area");
             Session defaultSession = repo.login(new SimpleCredentials(REPO_USER, "".toCharArray()), null);
-            registry = defaultSession.getWorkspace().getNamespaceRegistry();
-            try {
-                nsPrefixDefaultSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixDefaultUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            } catch (NamespaceException nse) {
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_USER, JCRSiteTree.NS_URI_USER);
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_SYSTEM, JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixDefaultSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixDefaultUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            }
+            nsPrefixDefaultSys = getNamespacePrefix(defaultSession, JCRSiteTree.NS_URI_SYSTEM, JCRSiteTree.NS_PREFIX_SYSTEM);
+            nsPrefixDefaultUser = getNamespacePrefix(defaultSession, JCRSiteTree.NS_URI_USER, JCRSiteTree.NS_PREFIX_USER);
 
             defaultSession.importXML("/", new FileInputStream(defaultPubDir + "/content/live/sitetree.xml.import"));
-            defaultSession.setNamespacePrefix(nsPrefixDefaultSys, JCRSiteTree.NS_URI_SYSTEM);
-            defaultSession.setNamespacePrefix(nsPrefixDefaultUser, JCRSiteTree.NS_URI_USER);
 
             iter = authSession.getRootNode().getNodes(nsPrefixAuthSys + ":*");
             while (iter.hasNext()) {
@@ -151,19 +119,8 @@
             // Creating trash workspace.
             System.out.println("Creating 'trash' workspace.");
             Session trashSession = repo.login(new SimpleCredentials(REPO_USER, "".toCharArray()), Publication.TRASH_AREA);
-            registry = trashSession.getWorkspace().getNamespaceRegistry();
-            try {
-                nsPrefixTrashSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixTrashUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            } catch (NamespaceException nse) {
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_USER, JCRSiteTree.NS_URI_USER);
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_SYSTEM, JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixTrashSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixTrashUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            }
-            
-            trashSession.setNamespacePrefix(nsPrefixTrashSys, JCRSiteTree.NS_URI_SYSTEM);
-            trashSession.setNamespacePrefix(nsPrefixTrashUser, JCRSiteTree.NS_URI_USER);
+            nsPrefixTrashSys = getNamespacePrefix(trashSession, JCRSiteTree.NS_URI_SYSTEM, JCRSiteTree.NS_PREFIX_SYSTEM);
+            nsPrefixTrashUser = getNamespacePrefix(trashSession, JCRSiteTree.NS_URI_USER, JCRSiteTree.NS_PREFIX_USER);
             
             // Create sitetree root node.
             trashSession.getRootNode().addNode(nsPrefixTrashSys + ":site");
@@ -173,19 +130,8 @@
             // Creating archive workspace.
             System.out.println("Creating 'archive' workspace.");
             Session archiveSession = repo.login(new SimpleCredentials(REPO_USER, "".toCharArray()), Publication.ARCHIVE_AREA);
-            registry = archiveSession.getWorkspace().getNamespaceRegistry();
-            try {
-                nsPrefixArchiveSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixArchiveUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            } catch (NamespaceException nse) {
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_USER, JCRSiteTree.NS_URI_USER);
-                registry.registerNamespace(JCRSiteTree.NS_PREFIX_SYSTEM, JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixArchiveSys = registry.getPrefix(JCRSiteTree.NS_URI_SYSTEM);
-                nsPrefixArchiveUser = registry.getPrefix(JCRSiteTree.NS_URI_USER);
-            }
-            
-            archiveSession.setNamespacePrefix(nsPrefixTrashSys, JCRSiteTree.NS_URI_SYSTEM);
-            archiveSession.setNamespacePrefix(nsPrefixTrashUser, JCRSiteTree.NS_URI_USER);
+            nsPrefixArchiveSys = getNamespacePrefix(archiveSession, JCRSiteTree.NS_URI_SYSTEM, JCRSiteTree.NS_PREFIX_SYSTEM);
+            nsPrefixArchiveUser = getNamespacePrefix(archiveSession, JCRSiteTree.NS_URI_USER, JCRSiteTree.NS_PREFIX_USER);
             
             // Create sitetree root node.
             archiveSession.getRootNode().addNode(nsPrefixTrashSys + ":site");
@@ -217,6 +163,33 @@
         RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);
         return (Repository) ctx.lookup("repo");
     }
+
+    /**
+     * Get namespace prefix for given namespace URI.
+     * @param session Session object
+     * @param namespace namespace URI of the prefix you want
+     * @param defaultPrefix if no prefix is registered with that namespace URI
+     * @return namespace prefix of given namespace URI
+     */
+    private String getNamespacePrefix(Session session, String namespace, String defaultPrefix) {
+        String prefix = null;
+        NamespaceRegistry registry = null;
+        try {
+            registry = session.getWorkspace().getNamespaceRegistry();
+            try {
+                prefix = registry.getPrefix(namespace);
+            } catch (NamespaceException e) {
+                // If prefix is not found, register default prefix
+                registry.registerNamespace(defaultPrefix, namespace);
+                prefix = defaultPrefix;
+                session.setNamespacePrefix(defaultPrefix, namespace);
+            }
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+        }
+        return prefix;
+    }
+
     
     /**
      * Remove empty jcr:xmltext nodes (artifact from importXML()).

Modified: lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTree.java
URL: http://svn.apache.org/viewcvs/lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTree.java?view=diff&r1=160850&r2=160851
==============================================================================
--- lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTree.java (original)
+++ lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTree.java Mon Apr 11 02:09:06 2005
@@ -27,8 +27,10 @@
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.InvalidItemStateException;
+import javax.jcr.ItemExistsException;
 import javax.jcr.NamespaceException;
 import javax.jcr.NamespaceRegistry;
+import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.PathNotFoundException;
@@ -62,7 +64,8 @@
     public static final String NS_PREFIX_USER = "lust"; // lenya user site tree
     public static final String NS_URI_SYSTEM = "http://apache.org/cocoon/lenya/sitetree/system/1.0";
     public static final String NS_PREFIX_SYSTEM = "lst"; // lenya system site tree
-    
+
+    // Repository node names
     public static final String SITETREE_NAME = "site";
     public static final String DOCUMENT_NAME = "document";
     protected static final String Q_CONTENT_NAME = "jcr:content";
@@ -70,8 +73,7 @@
     // Nodetype names
     protected static final String NODE_NT_NAME = "node";
     protected static final String DOCUMENT_NT_NAME = "document";
-
-
+    protected static final String Q_CONTENT_NT_NAME = "jcr:content";
     
     public static final String REPOSITORY_HOME = "repos" + File.separator + "repo-sitetree";
 
@@ -80,6 +82,8 @@
     
     private Repository repository = null;
     private Session session = null;
+    
+    private String workspace = null;
 
     /**
      * Create a JCRSiteTree
@@ -90,6 +94,7 @@
      * @throws SiteTreeException if an error occurs
      */
     protected JCRSiteTree(File pubDir, String area) throws SiteTreeException {
+        this.workspace = area;
         try {
             repository = getRepository(pubDir.getAbsolutePath() + File.separator + REPOSITORY_HOME);
             String userId = REPO_USER;
@@ -103,7 +108,6 @@
             // Add sitetree root node if it does not exist already
             if (!session.getRootNode().hasNode(prefixSys + ":" + SITETREE_NAME)) {
                 Node siteNode = session.getRootNode().addNode(prefixSys + ":" + SITETREE_NAME);
-                siteNode.addMixin("mix:referenceable");
                 session.save();
             }
         } catch (RepositoryException e) {
@@ -266,22 +270,8 @@
      * @see org.apache.lenya.cms.publication.SiteTree#removeNode(java.lang.String)
      */
     public synchronized SiteTreeNode removeNode(String documentId) {
-        assert documentId != null;
-        
-        Node node = null;
-        try {
-            node = session.getRootNode().getNode(mapDocumentIdToJCRAbsolute(documentId).substring(1));
-            node.remove();
-        } catch (PathNotFoundException e) {
-            // No node found. 
-        } catch (RepositoryException e) {
-            log.error("JCRSiteTree.removeNode() failed for document id " + documentId, e);
-        }
-        if (node != null) {
-            return new JCRSiteTreeNodeImpl(node,  this);
-        } else {
-            return null;
-        }
+        throw new RuntimeException("importSubTree() is not supported by the JCRSiteTree " +
+                "implementation. Use copy() and move() instead");
     }
 
     /**
@@ -413,39 +403,23 @@
     }
 
     /** (non-Javadoc)
+     * @throws NotSupportedException
+     * @throws RepositoryException
+     * @throws LockException
+     * @throws ItemExistsException
+     * @throws PathNotFoundException
+     * @throws AccessDeniedException
+     * @throws VersionException
+     * @throws ConstraintViolationException
+     * @throws NoSuchWorkspaceException
      * @see org.apache.lenya.cms.publication.SiteTree#importSubtree(org.apache.lenya.cms.publication.SiteTreeNode, org.apache.lenya.cms.publication.SiteTreeNode, java.lang.String)
      */
     public synchronized void importSubtree(SiteTreeNode newParent, SiteTreeNode subtreeRoot,
         String newid, String refDocumentId)
     throws SiteTreeException
     {
-        assert subtreeRoot != null;
-        assert newParent != null;
-        String parentId = newParent.getAbsoluteId();
-        String id = newid;
-
-        this.addNode(
-            parentId,
-            id,
-            subtreeRoot.getLabels(),
-            subtreeRoot.visibleInNav(),
-            subtreeRoot.getHref(),
-            subtreeRoot.getSuffix(),
-            subtreeRoot.hasLink(),
-            refDocumentId);
-        newParent = this.getNode(parentId + "/" + id);
-        if (newParent == null) {
-            throw new SiteTreeException("The added node was not found.");
-        }
-        SiteTreeNode[] children = subtreeRoot.getChildren();
-        if (children == null) {
-            log.info("The node " + subtreeRoot.toString() + " has no children");
-            return;
-        } else {
-            for (int i = 0; i < children.length; i++) {
-                importSubtree(newParent, children[i], children[i].getId(), null);
-            }
-        }
+        throw new SiteTreeException("importSubTree() is not supported by the JCRSiteTree " +
+                        "implementation. Use copy() and move() instead");
     }
 
     /** (non-Javadoc)
@@ -582,4 +556,128 @@
         }
         return (Repository) ctx.lookup("repo");
     }
+    
+    public String getWorkspace() {
+        return workspace;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.lenya.cms.publication.SiteTree#copy(org.apache.lenya.cms.publication.SiteTreeNode, org.apache.lenya.cms.publication.SiteTreeNode, java.lang.String, java.lang.String)
+     */
+    public void copy(SiteTreeNode src, SiteTreeNode dst, String newId, String followingSibling)
+        throws SiteTreeException
+    {
+        assert src instanceof JCRSiteTreeNodeImpl;
+        assert dst instanceof JCRSiteTreeNodeImpl;
+        
+        JCRSiteTreeNodeImpl srcNode = (JCRSiteTreeNodeImpl)src;
+        JCRSiteTreeNodeImpl dstNode = (JCRSiteTreeNodeImpl)dst;
+        
+        String dstPath = null;
+        String srcWorkspace = srcNode.getJCRSiteTree().getWorkspace(); 
+        String dstWorkspace = dstNode.getJCRSiteTree().getWorkspace(); 
+
+        try {
+            if (dstWorkspace != this.getWorkspace()) {
+                // Destination node not in this sitetree. Delegate to destination sitetree.
+                dstNode.getJCRSiteTree().copy(src, dst, newId, followingSibling);
+            } else {
+                // Destination node is in this sitetree.
+                dstPath = dstNode.getJCRNode().getPath() + "/" + prefixUser + ":" + newId;
+                if (srcWorkspace == this.getWorkspace()) {
+                    // Source node is in this sitetree.
+                    session.getWorkspace().copy(srcNode.getJCRNode().getPath(), dstPath);
+                } else {
+                    // Source node not in this sitetree.
+                    session.getWorkspace().copy(srcWorkspace,
+                            srcNode.getJCRNode().getPath(), dstPath);
+                }
+            }
+            // TODO: Ordering of nodes
+        } catch (NoSuchWorkspaceException e) {
+            throw new SiteTreeException("Workspace does not exist: " + srcWorkspace, e);
+        } catch (ConstraintViolationException e) {
+            throw new SiteTreeException("Constraint violation exception.", e);
+        } catch (VersionException e) {
+            throw new SiteTreeException("Version exception.", e);
+        } catch (AccessDeniedException e) {
+            throw new SiteTreeException("Access denied exception.", e);
+        } catch (PathNotFoundException e) {
+            throw new SiteTreeException("Path not found exception.", e);
+        } catch (ItemExistsException e) {
+            throw new SiteTreeException("Item exists exception: " + dstPath, e);
+        } catch (LockException e) {
+            throw new SiteTreeException("Lock exception.", e);
+        } catch (RepositoryException e) {
+            throw new SiteTreeException("Repository exception.", e);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.lenya.cms.publication.SiteTree#move(org.apache.lenya.cms.publication.SiteTreeNode, org.apache.lenya.cms.publication.SiteTreeNode, java.lang.String, java.lang.String)
+     */
+    public void move(SiteTreeNode src, SiteTreeNode dst, String newId, String followingSibling) throws SiteTreeException {
+        assert src instanceof JCRSiteTreeNodeImpl;
+        assert dst instanceof JCRSiteTreeNodeImpl;
+        
+        JCRSiteTreeNodeImpl srcNode = (JCRSiteTreeNodeImpl)src;
+        JCRSiteTreeNodeImpl dstNode = (JCRSiteTreeNodeImpl)dst;
+        
+        String srcPath = null;
+        String dstPath = null;
+        String srcWorkspace = srcNode.getJCRSiteTree().getWorkspace();
+        String dstWorkspace = dstNode.getJCRSiteTree().getWorkspace(); 
+
+        try {
+            srcPath = srcNode.getJCRNode().getPath();
+            dstPath = dstNode.getJCRNode().getPath() + "/" + prefixUser + ":" + newId;
+            
+            if (dstWorkspace != this.getWorkspace()) {
+                // Delegate move operation to destination sitetree.
+                dstNode.getJCRSiteTree().move(src, dst, newId, followingSibling);
+            } else if (srcWorkspace == this.getWorkspace()) {
+                // Move node intra-sitetree.
+                session.getWorkspace().move(srcPath, dstPath);
+            } else {
+                // First, copy src node into this sitetree, then delete src node.
+                copy(src, dst, newId, followingSibling);
+                srcNode.getJCRSiteTree().deleteNode(srcNode.getJCRNode().getPath());
+            }
+            // TODO: Ordering of nodes
+        } catch (NoSuchWorkspaceException e) {
+            throw new SiteTreeException("Workspace does not exist: " + srcWorkspace, e);
+        } catch (ConstraintViolationException e) {
+            throw new SiteTreeException("Constraint violation exception.", e);
+        } catch (VersionException e) {
+            throw new SiteTreeException("Version exception.", e);
+        } catch (AccessDeniedException e) {
+            throw new SiteTreeException("Access denied exception.", e);
+        } catch (PathNotFoundException e) {
+            throw new SiteTreeException("Path not found exception.", e);
+        } catch (ItemExistsException e) {
+            throw new SiteTreeException("Item exists exception: " + dstPath, e);
+        } catch (LockException e) {
+            throw new SiteTreeException("Lock exception.", e);
+        } catch (RepositoryException e) {
+            throw new SiteTreeException("Repository exception.", e);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.lenya.cms.publication.SiteTree#deleteNode(java.lang.String)
+     */
+    public void deleteNode(String documentId) throws SiteTreeException {
+        assert documentId != null;
+        
+        Node node = null;
+        try {
+            node = session.getRootNode().getNode(mapDocumentIdToJCRAbsolute(documentId).substring(1));
+            node.remove();
+        } catch (PathNotFoundException e) {
+            throw new SiteTreeException("Node not found: " + documentId, e);
+        } catch (RepositoryException e) {
+            throw new SiteTreeException("Repository exception.", e);
+        }
+    }
+
 }

Modified: lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTreeNodeImpl.java
URL: http://svn.apache.org/viewcvs/lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTreeNodeImpl.java?view=diff&r1=160850&r2=160851
==============================================================================
--- lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTreeNodeImpl.java (original)
+++ lenya/sandbox/jcrsitetree/src/java/org/apache/lenya/cms/publication/JCRSiteTreeNodeImpl.java Mon Apr 11 02:09:06 2005
@@ -168,12 +168,15 @@
         assert label.getLanguage() != null;
         
         if (getLabel(label.getLanguage()) == null) {
-            Node labelNode = null;
             // only add the label if there is no label with the same language yet.
+            Node labelNode = null;
             try {
-                labelNode = node.addNode(sitetree.getSystemPrefix() + ":" + JCRSiteTree.DOCUMENT_NAME);
+                labelNode = node.addNode(sitetree.getSystemPrefix() + ":" + JCRSiteTree.DOCUMENT_NAME,
+                        sitetree.getSystemPrefix() + ":" + JCRSiteTree.DOCUMENT_NT_NAME);
                 labelNode.setProperty(sitetree.getSystemPrefix() + ":" + LABEL_NAME, label.getLabel());
                 labelNode.setProperty("xml:" + LANGUAGE_ATTRIBUTE_NAME, label.getLanguage());
+                labelNode.addNode(JCRSiteTree.Q_CONTENT_NAME, JCRSiteTree.Q_CONTENT_NT_NAME);
+                
             } catch (ItemExistsException e) {
                 log.error("JCRSiteTreeNodeImpl.addLabel() failed: item exists exception", e);
             } catch (PathNotFoundException e) {
@@ -301,20 +304,24 @@
      * @see org.apache.lenya.cms.publication.SiteTreeNode#removeChildren()
      */
     public SiteTreeNode[] removeChildren() {
-        List childElements = new ArrayList();
+        throw new RuntimeException("removeChildren() unsupported (deprecated). Use deleteChildren() instead.");
+    }
+
+    /**
+     * @see org.apache.lenya.cms.publication.SiteTreeNode#deleteChildren()
+     */
+    public void deleteChildren() throws SiteTreeException {
         try {
             NodeIterator iter;
             iter = node.getNodes(sitetree.getUserPrefix() + ":*");
             while (iter.hasNext()) {
-                childElements.add(new JCRSiteTreeNodeImpl(iter.nextNode(), sitetree));
                 iter.nextNode().remove();
             }
         } catch (RepositoryException e) {
-            log.error("JCRSiteTreeNodeImpl.removeChildren() failed: repository exception");
+            throw new SiteTreeException(e);
         }
-        return (SiteTreeNode[]) childElements.toArray(new SiteTreeNode[childElements.size()]);
     }
-
+    
     /**
      * @see org.apache.lenya.cms.publication.SiteTreeNode#getChildren()
      */
@@ -496,4 +503,11 @@
         return list;
     }
     
+    protected JCRSiteTree getJCRSiteTree() {
+        return sitetree;
+    }
+    
+    protected Node getJCRNode() {
+        return node;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org