You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by so...@apache.org on 2008/01/31 08:44:36 UTC

svn commit: r617035 [8/22] - in /lenya/branches/revolution/1.3.x: ./ src/java/org/apache/lenya/ac/ src/java/org/apache/lenya/ac/cache/ src/java/org/apache/lenya/ac/cifs/ src/java/org/apache/lenya/ac/file/ src/java/org/apache/lenya/ac/impl/ src/java/org...

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DefaultSiteTree.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DefaultSiteTree.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DefaultSiteTree.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DefaultSiteTree.java Wed Jan 30 23:44:03 2008
@@ -16,7 +16,6 @@
  */
 /* @version $Id$ */
 package org.apache.lenya.cms.publication;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -35,556 +34,533 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
-
 /**
  * Default Sitetree implementation
  */
 public class DefaultSiteTree implements SiteTree, LastModified {
-    private static Logger log = Logger.getLogger(DefaultSiteTree.class);
-    private static Object lock = new Object();
-    public static final String SITE_TREE_FILENAME = "sitetree.xml";
-    private Document document = null;
-    private File treefile = null;
-    // the area is only retained to provide some more info when raising an
-    // exception.
-    private String area = "";
-    private long lastModified = 0;
-    /**
-     * Create a DefaultSiteTree
-     * 
-     * @param pubDir
-     *            the publication directory
-     * @param area
-     *            the area
-     * 
-     * @throws SiteTreeException
-     *             if an error occurs
-     */
-    protected DefaultSiteTree(File pubDir, String area) throws SiteTreeException {
-        this(new File(pubDir, Publication.CONTENT_PATH + File.separator + area + File.separator + SITE_TREE_FILENAME));
-        this.area = area;
-    }
-    /**
-     * Create a DefaultSiteTree from a filename.
-     * 
-     * @param treefilename
-     *            file name of the tree
-     * 
-     * @throws SiteTreeException
-     *             if an error occurs
-     * 
-     * @deprecated use the DefaultSiteTree(File pubDir, String area) constructor
-     *             instead.
-     */
-    public DefaultSiteTree(String treefilename) throws SiteTreeException {
-        this(new File(treefilename));
-    }
-    /**
-     * Create a DefaultSiteTree from a file.
-     * 
-     * @param treefile
-     *            the file containing the tree
-     * 
-     * @throws SiteTreeException
-     *             if an error occurs
-     * 
-     * @deprecated this constructor will be private in the future
-     */
-    public DefaultSiteTree(File treefile) throws SiteTreeException {
-        this.treefile = treefile;
-        try {
-            if (!treefile.isFile()) {
-                // the treefile doesn't exist, so create it
-                document = createDocument();
-            } else {
-                // Read tree
-                document = DocumentHelper.readDocument(treefile);
+   private static Logger log = Logger.getLogger(DefaultSiteTree.class);
+   private static Object lock = new Object();
+   public static final String SITE_TREE_FILENAME = "sitetree.xml";
+   private Document document = null;
+   private File treefile = null;
+   // the area is only retained to provide some more info when raising an
+   // exception.
+   private String area = "";
+   private long lastModified = 0;
+   /**
+    * Create a DefaultSiteTree
+    * 
+    * @param pubDir
+    *           the publication directory
+    * @param area
+    *           the area
+    * 
+    * @throws SiteTreeException
+    *            if an error occurs
+    */
+   protected DefaultSiteTree(File pubDir, String area) throws SiteTreeException {
+      this(new File(pubDir, Publication.CONTENT_PATH + File.separator + area + File.separator + SITE_TREE_FILENAME));
+      this.area = area;
+   }
+   /**
+    * Create a DefaultSiteTree from a filename.
+    * 
+    * @param treefilename
+    *           file name of the tree
+    * 
+    * @throws SiteTreeException
+    *            if an error occurs
+    * 
+    * @deprecated use the DefaultSiteTree(File pubDir, String area) constructor instead.
+    */
+   public DefaultSiteTree(String treefilename) throws SiteTreeException {
+      this(new File(treefilename));
+   }
+   /**
+    * Create a DefaultSiteTree from a file.
+    * 
+    * @param treefile
+    *           the file containing the tree
+    * 
+    * @throws SiteTreeException
+    *            if an error occurs
+    * 
+    * @deprecated this constructor will be private in the future
+    */
+   public DefaultSiteTree(File treefile) throws SiteTreeException {
+      this.treefile = treefile;
+      try{
+         if(!treefile.isFile()){
+            // the treefile doesn't exist, so create it
+            document = createDocument();
+         }else{
+            // Read tree
+            document = DocumentHelper.readDocument(treefile);
+         }
+      }catch(ParserConfigurationException e){
+         throw new SiteTreeException(e);
+      }catch(SAXException e){
+         throw new SiteTreeException(e);
+      }catch(IOException e){
+         throw new SiteTreeException(e);
+      }
+   }
+   /**
+    * Checks if the tree file has been modified externally and reloads the site tree.
+    * 
+    * @throws SiteTreeException
+    *            when something went wrong.
+    */
+   protected synchronized void checkModified() {
+      if(area.equals(Publication.LIVE_AREA) && treefile.isFile() && treefile.lastModified() > lastModified){
+         if(log.isDebugEnabled()){
+            log.debug("Sitetree [" + treefile + "] has changed: reloading.");
+         }
+         try{
+            document = DocumentHelper.readDocument(treefile);
+         }catch(Exception e){
+            throw new IllegalStateException(e.getMessage());
+         }
+         lastModified = treefile.lastModified();
+      }
+   }
+   /**
+    * Create a new DefaultSiteTree xml document.
+    * 
+    * @return the new site document
+    * 
+    * @throws ParserConfigurationException
+    *            if an error occurs
+    */
+   public synchronized Document createDocument() throws ParserConfigurationException {
+      document = DocumentHelper.createDocument(NAMESPACE_URI, "site", null);
+      Element root = document.getDocumentElement();
+      root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+      root.setAttribute("xsi:schemaLocation", "http://apache.org/cocoon/lenya/sitetree/1.0  ../../../../resources/entities/sitetree.xsd");
+      return document;
+   }
+   /**
+    * Find a node in a subtree. The search is started at the given node. The list of ids contains the document-id split by "/".
+    * 
+    * @param node
+    *           where to start the search
+    * @param ids
+    *           list of node ids
+    * 
+    * @return the node that matches the path given in the list of ids
+    */
+   protected synchronized Node findNode(Node node, List ids) {
+      checkModified();
+      if(ids.size() < 1){
+         return node;
+      }else{
+         NodeList nodes = node.getChildNodes();
+         for(int i = 0; i < nodes.getLength(); i++){
+            NamedNodeMap attributes = nodes.item(i).getAttributes();
+            if(attributes != null){
+               Node idAttribute = attributes.getNamedItem("id");
+               if(idAttribute != null && !"".equals(idAttribute.getNodeValue()) && idAttribute.getNodeValue().equals(ids.get(0))){
+                  return findNode(nodes.item(i), ids.subList(1, ids.size()));
+               }
             }
-        } catch (ParserConfigurationException e) {
-            throw new SiteTreeException(e);
-        } catch (SAXException e) {
-            throw new SiteTreeException(e);
-        } catch (IOException e) {
-            throw new SiteTreeException(e);
-        }
-    }
-    /**
-     * Checks if the tree file has been modified externally and reloads the site
-     * tree.
-     * 
-     * @throws SiteTreeException
-     *             when something went wrong.
-     */
-    protected synchronized void checkModified() {
-        if (area.equals(Publication.LIVE_AREA) && treefile.isFile() && treefile.lastModified() > lastModified) {
-            if (log.isDebugEnabled()) {
-                log.debug("Sitetree [" + treefile + "] has changed: reloading.");
-            }
-            try {
-                document = DocumentHelper.readDocument(treefile);
-            } catch (Exception e) {
-                throw new IllegalStateException(e.getMessage());
-            }
-            lastModified = treefile.lastModified();
-        }
-    }
-    /**
-     * Create a new DefaultSiteTree xml document.
-     * 
-     * @return the new site document
-     * 
-     * @throws ParserConfigurationException
-     *             if an error occurs
-     */
-    public synchronized Document createDocument() throws ParserConfigurationException {
-        document = DocumentHelper.createDocument(NAMESPACE_URI, "site", null);
-        Element root = document.getDocumentElement();
-        root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
-        root.setAttribute("xsi:schemaLocation", "http://apache.org/cocoon/lenya/sitetree/1.0  ../../../../resources/entities/sitetree.xsd");
-        return document;
-    }
-    /**
-     * Find a node in a subtree. The search is started at the given node. The
-     * list of ids contains the document-id split by "/".
-     * 
-     * @param node
-     *            where to start the search
-     * @param ids
-     *            list of node ids
-     * 
-     * @return the node that matches the path given in the list of ids
-     */
-    protected synchronized Node findNode(Node node, List ids) {
-        checkModified();
-        if (ids.size() < 1) {
-            return node;
-        } else {
-            NodeList nodes = node.getChildNodes();
-            for (int i = 0; i < nodes.getLength(); i++) {
-                NamedNodeMap attributes = nodes.item(i).getAttributes();
-                if (attributes != null) {
-                    Node idAttribute = attributes.getNamedItem("id");
-                    if (idAttribute != null && !"".equals(idAttribute.getNodeValue()) && idAttribute.getNodeValue().equals(ids.get(0))) {
-                        return findNode(nodes.item(i), ids.subList(1, ids.size()));
-                    }
-                }
-            }
-        }
-        // node wasn't found
-        return null;
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(org.apache.lenya.cms.publication.SiteTreeNode,
-     *      java.lang.String)
-     */
-    public synchronized void addNode(SiteTreeNode node, String refDocumentId) throws SiteTreeException {
-        this.addNode(node.getAbsoluteParentId(), node.getId(), node.getLabels(), node.visibleInNav(), node.getHref(), node.getSuffix(), node.hasLink(), refDocumentId);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String,
-     *      java.lang.String, org.apache.lenya.cms.publication.Label[])
-     */
-    public synchronized void addNode(String parentid, String id, Label[] labels, boolean visibleInNav) throws SiteTreeException {
-        addNode(parentid, id, labels, visibleInNav, null, null, false);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String,
-     *      java.lang.String, org.apache.lenya.cms.publication.Label[], boolean)
-     */
-    public synchronized void addNode(String parentid, String id, Label[] labels) throws SiteTreeException {
-        addNode(parentid, id, labels, true);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(org.apache.lenya.cms.publication.SiteTreeNode)
-     */
-    public synchronized void addNode(SiteTreeNode node) throws SiteTreeException {
-        this.addNode(node, null);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String,
-     *      org.apache.lenya.cms.publication.Label[], java.lang.String,
-     *      java.lang.String, boolean, java.lang.String)
-     */
-    public synchronized void addNode(String documentid, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link, String refDocumentId) throws SiteTreeException {
-        String parentid = "";
-        StringTokenizer st = new StringTokenizer(documentid, "/");
-        int length = st.countTokens();
-        for (int i = 0; i < (length - 1); i++) {
-            parentid = parentid + "/" + st.nextToken();
-        }
-        String id = st.nextToken();
-        this.addNode(parentid, id, labels, visibleInNav, href, suffix, link, refDocumentId);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String,
-     *      org.apache.lenya.cms.publication.Label[], java.lang.String,
-     *      java.lang.String, boolean)
-     */
-    public synchronized void addNode(String documentid, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link) throws SiteTreeException {
-        this.addNode(documentid, labels, visibleInNav, href, suffix, link, null);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String,
-     *      java.lang.String, org.apache.lenya.cms.publication.Label[],
-     *      java.lang.String, java.lang.String, boolean)
-     */
-    public synchronized void addNode(String parentid, String id, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link) throws SiteTreeException {
-        this.addNode(parentid, id, labels, visibleInNav, href, suffix, link, null);
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String,
-     *      java.lang.String, org.apache.lenya.cms.publication.Label[],
-     *      java.lang.String, java.lang.String, boolean)
-     */
-    public synchronized void addNode(String parentid, String id, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link, String refDocumentId) throws SiteTreeException {
-        Node parentNode = getNodeInternal(parentid);
-        if (parentNode == null) {
-            throw new SiteTreeException("Parentid: " + parentid + " in " + area + " tree not found");
-        }
-        log.debug("PARENT ELEMENT: " + parentNode);
-        // Check if child already exists
-        Node childNode = getNodeInternal(parentid + "/" + id);
-        if (childNode != null) {
-            log.info("This node: " + parentid + "/" + id + " has already been inserted");
-            return;
-        }
-        // Create node
-        NamespaceHelper helper = new NamespaceHelper(NAMESPACE_URI, "", document);
-        Element child = helper.createElement(SiteTreeNodeImpl.NODE_NAME);
-        child.setAttribute(SiteTreeNodeImpl.ID_ATTRIBUTE_NAME, id);
-        if (visibleInNav) {
-            child.setAttribute(SiteTreeNodeImpl.VISIBLEINNAV_ATTRIBUTE_NAME, "true");
-        } else {
-            child.setAttribute(SiteTreeNodeImpl.VISIBLEINNAV_ATTRIBUTE_NAME, "false");
-        }
-        if ((href != null) && (href.length() > 0)) {
-            child.setAttribute(SiteTreeNodeImpl.HREF_ATTRIBUTE_NAME, href);
-        }
-        if ((suffix != null) && (suffix.length() > 0)) {
-            child.setAttribute(SiteTreeNodeImpl.SUFFIX_ATTRIBUTE_NAME, suffix);
-        }
-        if (link) {
-            child.setAttribute(SiteTreeNodeImpl.LINK_ATTRIBUTE_NAME, "true");
-        }
-        for (int i = 0; i < labels.length; i++) {
-            String labelName = labels[i].getLabel();
-            Element label = helper.createElement(SiteTreeNodeImpl.LABEL_NAME, labelName);
-            String labelLanguage = labels[i].getLanguage();
-            if ((labelLanguage != null) && (labelLanguage.length() > 0)) {
-                label.setAttribute(SiteTreeNodeImpl.LANGUAGE_ATTRIBUTE_NAME, labelLanguage);
-            }
-            child.appendChild(label);
-        }
-        // Add Node
-        if (refDocumentId != null && !refDocumentId.equals("")) {
-            Node nextSibling = getNodeInternal(refDocumentId);
-            if (nextSibling != null) {
-                parentNode.insertBefore(child, nextSibling);
-            } else {
-                parentNode.appendChild(child);
-            }
-        } else {
+         }
+      }
+      // node wasn't found
+      return null;
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(org.apache.lenya.cms.publication.SiteTreeNode, java.lang.String)
+    */
+   public synchronized void addNode(SiteTreeNode node, String refDocumentId) throws SiteTreeException {
+      this.addNode(node.getAbsoluteParentId(), node.getId(), node.getLabels(), node.visibleInNav(), node.getHref(), node.getSuffix(), node.hasLink(), refDocumentId);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String, java.lang.String, org.apache.lenya.cms.publication.Label[])
+    */
+   public synchronized void addNode(String parentid, String id, Label[] labels, boolean visibleInNav) throws SiteTreeException {
+      addNode(parentid, id, labels, visibleInNav, null, null, false);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String, java.lang.String, org.apache.lenya.cms.publication.Label[], boolean)
+    */
+   public synchronized void addNode(String parentid, String id, Label[] labels) throws SiteTreeException {
+      addNode(parentid, id, labels, true);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(org.apache.lenya.cms.publication.SiteTreeNode)
+    */
+   public synchronized void addNode(SiteTreeNode node) throws SiteTreeException {
+      this.addNode(node, null);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String, org.apache.lenya.cms.publication.Label[], java.lang.String, java.lang.String, boolean, java.lang.String)
+    */
+   public synchronized void addNode(String documentid, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link, String refDocumentId) throws SiteTreeException {
+      String parentid = "";
+      StringTokenizer st = new StringTokenizer(documentid, "/");
+      int length = st.countTokens();
+      for(int i = 0; i < (length - 1); i++){
+         parentid = parentid + "/" + st.nextToken();
+      }
+      String id = st.nextToken();
+      this.addNode(parentid, id, labels, visibleInNav, href, suffix, link, refDocumentId);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String, org.apache.lenya.cms.publication.Label[], java.lang.String, java.lang.String, boolean)
+    */
+   public synchronized void addNode(String documentid, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link) throws SiteTreeException {
+      this.addNode(documentid, labels, visibleInNav, href, suffix, link, null);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String, java.lang.String, org.apache.lenya.cms.publication.Label[], java.lang.String, java.lang.String, boolean)
+    */
+   public synchronized void addNode(String parentid, String id, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link) throws SiteTreeException {
+      this.addNode(parentid, id, labels, visibleInNav, href, suffix, link, null);
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addNode(java.lang.String, java.lang.String, org.apache.lenya.cms.publication.Label[], java.lang.String, java.lang.String, boolean)
+    */
+   public synchronized void addNode(String parentid, String id, Label[] labels, boolean visibleInNav, String href, String suffix, boolean link, String refDocumentId) throws SiteTreeException {
+      Node parentNode = getNodeInternal(parentid);
+      if(parentNode == null){
+         throw new SiteTreeException("Parentid: " + parentid + " in " + area + " tree not found");
+      }
+      log.debug("PARENT ELEMENT: " + parentNode);
+      // Check if child already exists
+      Node childNode = getNodeInternal(parentid + "/" + id);
+      if(childNode != null){
+         log.info("This node: " + parentid + "/" + id + " has already been inserted");
+         return;
+      }
+      // Create node
+      NamespaceHelper helper = new NamespaceHelper(NAMESPACE_URI, "", document);
+      Element child = helper.createElement(SiteTreeNodeImpl.NODE_NAME);
+      child.setAttribute(SiteTreeNodeImpl.ID_ATTRIBUTE_NAME, id);
+      if(visibleInNav){
+         child.setAttribute(SiteTreeNodeImpl.VISIBLEINNAV_ATTRIBUTE_NAME, "true");
+      }else{
+         child.setAttribute(SiteTreeNodeImpl.VISIBLEINNAV_ATTRIBUTE_NAME, "false");
+      }
+      if((href != null) && (href.length() > 0)){
+         child.setAttribute(SiteTreeNodeImpl.HREF_ATTRIBUTE_NAME, href);
+      }
+      if((suffix != null) && (suffix.length() > 0)){
+         child.setAttribute(SiteTreeNodeImpl.SUFFIX_ATTRIBUTE_NAME, suffix);
+      }
+      if(link){
+         child.setAttribute(SiteTreeNodeImpl.LINK_ATTRIBUTE_NAME, "true");
+      }
+      for(int i = 0; i < labels.length; i++){
+         String labelName = labels[i].getLabel();
+         Element label = helper.createElement(SiteTreeNodeImpl.LABEL_NAME, labelName);
+         String labelLanguage = labels[i].getLanguage();
+         if((labelLanguage != null) && (labelLanguage.length() > 0)){
+            label.setAttribute(SiteTreeNodeImpl.LANGUAGE_ATTRIBUTE_NAME, labelLanguage);
+         }
+         child.appendChild(label);
+      }
+      // Add Node
+      if(refDocumentId != null && !refDocumentId.equals("")){
+         Node nextSibling = getNodeInternal(refDocumentId);
+         if(nextSibling != null){
+            parentNode.insertBefore(child, nextSibling);
+         }else{
             parentNode.appendChild(child);
-        }
-        log.debug("Tree has been modified: " + document.getDocumentElement());
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#addLabel(java.lang.String,
-     *      org.apache.lenya.cms.publication.Label)
-     */
-    public synchronized void addLabel(String documentId, Label label) {
-        SiteTreeNode node = getNode(documentId);
-        if (node != null) {
-            node.addLabel(label);
-        }
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#removeLabel(java.lang.String,
-     *      org.apache.lenya.cms.publication.Label)
-     */
-    public synchronized void removeLabel(String documentId, Label label) {
-        SiteTreeNode node = getNode(documentId);
-        if (node != null) {
-            node.removeLabel(label);
-        }
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#removeNode(java.lang.String)
-     */
-    public synchronized SiteTreeNode removeNode(String documentId) {
-        // assert documentId != null;
-        Node node = removeNodeInternal(documentId);
-        if (node == null) {
-            return null;
-        }
-        return new SiteTreeNodeImpl(node, this);
-    }
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#deleteNode(java.lang.String)
-     */
-    public void deleteNode(String documentId) throws SiteTreeException {
-        Node node = this.getNodeInternal(documentId);
-        Node parentNode = node.getParentNode();
-        Node newNode = parentNode.removeChild(node);
-    }
-    /**
-     * removes the node corresponding to the given document-id and returns it
-     * 
-     * @param documentId
-     *            the document-id of the Node to be removed
-     * 
-     * @return the <code>Node</code> that was removed
-     */
-    private synchronized Node removeNodeInternal(String documentId) {
-        Node node = this.getNodeInternal(documentId);
-        Node parentNode = node.getParentNode();
-        Node newNode = parentNode.removeChild(node);
-        return newNode;
-    }
-    /**
-     * Find a node for a given document-id
-     * 
-     * @param documentId
-     *            the document-id of the Node that we're trying to get
-     * 
-     * @return the Node if there is a Node for the given document-id, null
-     *         otherwise
-     */
-    private synchronized Node getNodeInternal(String documentId) {
-        StringTokenizer st = new StringTokenizer(documentId, "/");
-        ArrayList ids = new ArrayList();
-        while (st.hasMoreTokens()) {
-            ids.add(st.nextToken());
-        }
-        Node node = findNode(document.getDocumentElement(), ids);
-        return node;
-    }
-    /**
-     * @see org.apache.lenya.cms.publication.SiteTree#getNode(java.lang.String)
-     */
-    public synchronized SiteTreeNode getNode(String documentId) {
-        // assert documentId != null;
-        SiteTreeNode treeNode = null;
-        Node node = getNodeInternal(documentId);
-        if (node != null) {
-            treeNode = new SiteTreeNodeImpl(node, this);
-        }
-        return treeNode;
-    }
-    /**
-     * @see org.apache.lenya.cms.publication.SiteTree#getTopNodes()
-     */
-    public SiteTreeNode[] getTopNodes() {
-        List childElements = new ArrayList();
-        NamespaceHelper helper = new NamespaceHelper(NAMESPACE_URI, "", document);
-        Element[] elements = helper.getChildren((Element) document.getDocumentElement(), SiteTreeNodeImpl.NODE_NAME);
-        for (int i = 0; i < elements.length; i++) {
-            SiteTreeNode newNode = new SiteTreeNodeImpl(elements[i], this);
-            childElements.add(newNode);
-        }
-        return (SiteTreeNode[]) childElements.toArray(new SiteTreeNode[childElements.size()]);
-    }
-    /**
-     * Move up the node amongst its siblings.
-     * 
-     * @param documentid
-     *            The document id for the node.
-     * @throws SiteTreeException
-     *             if the moving failed.
-     */
-    public synchronized void moveUp(String documentid) throws SiteTreeException {
-        Node node = this.getNodeInternal(documentid);
-        if (node == null) {
-            throw new SiteTreeException("Node to move: " + documentid + " not found");
-        }
-        Node parentNode = node.getParentNode();
-        if (parentNode == null) {
-            throw new SiteTreeException("Parentid of node with documentid: " + documentid + " not found");
-        }
-        Node previousNode;
-        try {
-            previousNode = XPathAPI.selectSingleNode(node, "(preceding-sibling::*[local-name() = 'node'])[last()]");
-        } catch (TransformerException e) {
-            throw new SiteTreeException(e);
-        }
-        if (previousNode == null) {
-            log.warn("Couldn't found a preceding sibling");
-            return;
-        }
-        Node insertNode = parentNode.removeChild(node);
-        parentNode.insertBefore(insertNode, previousNode);
-    }
-    /**
-     * Move down the node amongst its siblings.
-     * 
-     * @param documentid
-     *            The document id for the node.
-     * @throws SiteTreeException
-     *             if the moving failed.
-     */
-    public synchronized void moveDown(String documentid) throws SiteTreeException {
-        Node node = this.getNodeInternal(documentid);
-        if (node == null) {
-            throw new SiteTreeException("Node to move: " + documentid + " not found");
-        }
-        Node parentNode = node.getParentNode();
-        if (parentNode == null) {
-            throw new SiteTreeException("Parentid of node with documentid: " + documentid + " not found");
-        }
-        Node nextNode;
-        try {
-            nextNode = XPathAPI.selectSingleNode(node, "following-sibling::*[local-name() = 'node'][position()=2]");
-        } catch (TransformerException e) {
-            throw new SiteTreeException(e);
-        }
-        Node insertNode = parentNode.removeChild(node);
-        if (nextNode == null) {
-            log.warn("Couldn't found the second following sibling");
-            parentNode.appendChild(insertNode);
-        } else {
-            parentNode.insertBefore(insertNode, nextNode);
-        }
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @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);
-            }
-        }
-    }
-    /**
-     * (non-Javadoc)
-     * 
-     * @see org.apache.lenya.cms.publication.SiteTree#save()
-     */
-    public synchronized void save() throws SiteTreeException {
-        try {
-            DocumentHelper.writeDocument(document, treefile);
-        } catch (TransformerException e) {
-            throw new SiteTreeException("The document [" + document.getLocalName() + "] could not be transformed");
-        } catch (IOException e) {
-            throw new SiteTreeException("The saving of document [" + document.getLocalName() + "] failed");
-        }
-        lastModified = new Date().getTime();
-    }
-    /**
-     * @see org.apache.lenya.cms.publication.SiteTree#setLabel(java.lang.String,
-     *      org.apache.lenya.cms.publication.Label)
-     */
-    public synchronized void setLabel(String documentId, Label label) {
-        SiteTreeNode node = getNode(documentId);
-        if (node != null) {
-            node.setLabel(label);
-        }
-    }
-    /**
-     * @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 dst instanceof SiteTreeNodeImpl;
-        SiteTreeNodeImpl dstNode = (SiteTreeNodeImpl) dst;
-        if (this.equals(dstNode.getDefaultSiteTree())) {
-            // Copy if this sitetree is the destination sitetree.
-            // Acquire global sitetree lock to establish lock hierarchy in case
-            // of copy operation
-            synchronized (DefaultSiteTree.lock) {
-                DefaultSiteTree srcSiteTree = ((SiteTreeNodeImpl) src).getDefaultSiteTree();
-                synchronized (srcSiteTree) {
-                    synchronized (this) {
-                        String parentId = dst.getAbsoluteId();
-                        String id = newId;
-                        this.addNode(parentId, id, src.getLabels(), src.visibleInNav(), src.getHref(), src.getSuffix(), src.hasLink(), followingSibling);
-                        SiteTreeNode node = this.getNode(parentId + "/" + id);
-                        if (node == null) {
-                            throw new SiteTreeException("The added node was not found.");
-                        }
-                        SiteTreeNode[] children = src.getChildren();
-                        if (children == null) {
-                            log.debug("The node " + src.toString() + " has no children");
-                            return;
-                        } else {
-                            for (int i = 0; i < children.length; i++) {
-                                copy(children[i], node, children[i].getId(), null);
-                            }
-                        }
-                    }
-                }
+         }
+      }else{
+         parentNode.appendChild(child);
+      }
+      log.debug("Tree has been modified: " + document.getDocumentElement());
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#addLabel(java.lang.String, org.apache.lenya.cms.publication.Label)
+    */
+   public synchronized void addLabel(String documentId, Label label) {
+      SiteTreeNode node = getNode(documentId);
+      if(node != null){
+         node.addLabel(label);
+      }
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#removeLabel(java.lang.String, org.apache.lenya.cms.publication.Label)
+    */
+   public synchronized void removeLabel(String documentId, Label label) {
+      SiteTreeNode node = getNode(documentId);
+      if(node != null){
+         node.removeLabel(label);
+      }
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#removeNode(java.lang.String)
+    */
+   public synchronized SiteTreeNode removeNode(String documentId) {
+      // assert documentId != null;
+      Node node = removeNodeInternal(documentId);
+      if(node == null){
+         return null;
+      }
+      return new SiteTreeNodeImpl(node, this);
+   }
+   /*
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#deleteNode(java.lang.String)
+    */
+   public void deleteNode(String documentId) throws SiteTreeException {
+      Node node = this.getNodeInternal(documentId);
+      Node parentNode = node.getParentNode();
+      // Node newNode =
+      parentNode.removeChild(node);
+   }
+   /**
+    * removes the node corresponding to the given document-id and returns it
+    * 
+    * @param documentId
+    *           the document-id of the Node to be removed
+    * 
+    * @return the <code>Node</code> that was removed
+    */
+   private synchronized Node removeNodeInternal(String documentId) {
+      Node node = this.getNodeInternal(documentId);
+      Node parentNode = node.getParentNode();
+      Node newNode = parentNode.removeChild(node);
+      return newNode;
+   }
+   /**
+    * Find a node for a given document-id
+    * 
+    * @param documentId
+    *           the document-id of the Node that we're trying to get
+    * 
+    * @return the Node if there is a Node for the given document-id, null otherwise
+    */
+   private synchronized Node getNodeInternal(String documentId) {
+      StringTokenizer st = new StringTokenizer(documentId, "/");
+      ArrayList ids = new ArrayList();
+      while(st.hasMoreTokens()){
+         ids.add(st.nextToken());
+      }
+      Node node = findNode(document.getDocumentElement(), ids);
+      return node;
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.SiteTree#getNode(java.lang.String)
+    */
+   public synchronized SiteTreeNode getNode(String documentId) {
+      // assert documentId != null;
+      SiteTreeNode treeNode = null;
+      Node node = getNodeInternal(documentId);
+      if(node != null){
+         treeNode = new SiteTreeNodeImpl(node, this);
+      }
+      return treeNode;
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.SiteTree#getTopNodes()
+    */
+   public SiteTreeNode[] getTopNodes() {
+      List childElements = new ArrayList();
+      NamespaceHelper helper = new NamespaceHelper(NAMESPACE_URI, "", document);
+      Element[] elements = helper.getChildren((Element) document.getDocumentElement(), SiteTreeNodeImpl.NODE_NAME);
+      for(int i = 0; i < elements.length; i++){
+         SiteTreeNode newNode = new SiteTreeNodeImpl(elements[i], this);
+         childElements.add(newNode);
+      }
+      return (SiteTreeNode[]) childElements.toArray(new SiteTreeNode[childElements.size()]);
+   }
+   /**
+    * Move up the node amongst its siblings.
+    * 
+    * @param documentid
+    *           The document id for the node.
+    * @throws SiteTreeException
+    *            if the moving failed.
+    */
+   public synchronized void moveUp(String documentid) throws SiteTreeException {
+      Node node = this.getNodeInternal(documentid);
+      if(node == null){
+         throw new SiteTreeException("Node to move: " + documentid + " not found");
+      }
+      Node parentNode = node.getParentNode();
+      if(parentNode == null){
+         throw new SiteTreeException("Parentid of node with documentid: " + documentid + " not found");
+      }
+      Node previousNode;
+      try{
+         previousNode = XPathAPI.selectSingleNode(node, "(preceding-sibling::*[local-name() = 'node'])[last()]");
+      }catch(TransformerException e){
+         throw new SiteTreeException(e);
+      }
+      if(previousNode == null){
+         log.warn("Couldn't found a preceding sibling");
+         return;
+      }
+      Node insertNode = parentNode.removeChild(node);
+      parentNode.insertBefore(insertNode, previousNode);
+   }
+   /**
+    * Move down the node amongst its siblings.
+    * 
+    * @param documentid
+    *           The document id for the node.
+    * @throws SiteTreeException
+    *            if the moving failed.
+    */
+   public synchronized void moveDown(String documentid) throws SiteTreeException {
+      Node node = this.getNodeInternal(documentid);
+      if(node == null){
+         throw new SiteTreeException("Node to move: " + documentid + " not found");
+      }
+      Node parentNode = node.getParentNode();
+      if(parentNode == null){
+         throw new SiteTreeException("Parentid of node with documentid: " + documentid + " not found");
+      }
+      Node nextNode;
+      try{
+         nextNode = XPathAPI.selectSingleNode(node, "following-sibling::*[local-name() = 'node'][position()=2]");
+      }catch(TransformerException e){
+         throw new SiteTreeException(e);
+      }
+      Node insertNode = parentNode.removeChild(node);
+      if(nextNode == null){
+         log.warn("Couldn't found the second following sibling");
+         parentNode.appendChild(insertNode);
+      }else{
+         parentNode.insertBefore(insertNode, nextNode);
+      }
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @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);
+         }
+      }
+   }
+   /**
+    * (non-Javadoc)
+    * 
+    * @see org.apache.lenya.cms.publication.SiteTree#save()
+    */
+   public synchronized void save() throws SiteTreeException {
+      try{
+         DocumentHelper.writeDocument(document, treefile);
+      }catch(TransformerException e){
+         throw new SiteTreeException("The document [" + document.getLocalName() + "] could not be transformed");
+      }catch(IOException e){
+         throw new SiteTreeException("The saving of document [" + document.getLocalName() + "] failed");
+      }
+      lastModified = new Date().getTime();
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.SiteTree#setLabel(java.lang.String, org.apache.lenya.cms.publication.Label)
+    */
+   public synchronized void setLabel(String documentId, Label label) {
+      SiteTreeNode node = getNode(documentId);
+      if(node != null){
+         node.setLabel(label);
+      }
+   }
+   /**
+    * @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 dst instanceof SiteTreeNodeImpl;
+      SiteTreeNodeImpl dstNode = (SiteTreeNodeImpl) dst;
+      if(this.equals(dstNode.getDefaultSiteTree())){
+         // Copy if this sitetree is the destination sitetree.
+         // Acquire global sitetree lock to establish lock hierarchy in case
+         // of copy operation
+         synchronized (DefaultSiteTree.lock){
+            DefaultSiteTree srcSiteTree = ((SiteTreeNodeImpl) src).getDefaultSiteTree();
+            synchronized (srcSiteTree){
+               synchronized (this){
+                  String parentId = dst.getAbsoluteId();
+                  String id = newId;
+                  this.addNode(parentId, id, src.getLabels(), src.visibleInNav(), src.getHref(), src.getSuffix(), src.hasLink(), followingSibling);
+                  SiteTreeNode node = this.getNode(parentId + "/" + id);
+                  if(node == null){
+                     throw new SiteTreeException("The added node was not found.");
+                  }
+                  SiteTreeNode[] children = src.getChildren();
+                  if(children == null){
+                     log.debug("The node " + src.toString() + " has no children");
+                     return;
+                  }else{
+                     for(int i = 0; i < children.length; i++){
+                        copy(children[i], node, children[i].getId(), null);
+                     }
+                  }
+               }
             }
-        } else {
-            // Delegate copy operation to destination sitetree.
-            dstNode.getDefaultSiteTree().copy(src, dst, newId, followingSibling);
-        }
-    }
-    /**
-     * @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 dst != null;
-        // assert src instanceof SiteTreeNodeImpl;
-        // Acquire global sitetree lock to establish lock hierarchy in case of
-        // move operation
-        synchronized (DefaultSiteTree.lock) {
-            // Lock both source and destination sitetree.
-            synchronized (((SiteTreeNodeImpl) src).getDefaultSiteTree()) {
-                synchronized (((SiteTreeNodeImpl) dst).getDefaultSiteTree()) {
-                    copy(src, dst, newId, followingSibling);
-                    DefaultSiteTree sitetree = ((SiteTreeNodeImpl) src).getDefaultSiteTree();
-                    sitetree.deleteNode(src.getAbsoluteId());
-                }
+         }
+      }else{
+         // Delegate copy operation to destination sitetree.
+         dstNode.getDefaultSiteTree().copy(src, dst, newId, followingSibling);
+      }
+   }
+   /**
+    * @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 dst != null;
+      // assert src instanceof SiteTreeNodeImpl;
+      // Acquire global sitetree lock to establish lock hierarchy in case of
+      // move operation
+      synchronized (DefaultSiteTree.lock){
+         // Lock both source and destination sitetree.
+         synchronized (((SiteTreeNodeImpl) src).getDefaultSiteTree()){
+            synchronized (((SiteTreeNodeImpl) dst).getDefaultSiteTree()){
+               copy(src, dst, newId, followingSibling);
+               DefaultSiteTree sitetree = ((SiteTreeNodeImpl) src).getDefaultSiteTree();
+               sitetree.deleteNode(src.getAbsoluteId());
             }
-        }
-    }
-    /**
-     * @see org.apache.lenya.cms.publication.LastModified#getLastModified()
-     */
-    public long getLastModified() {
-        return lastModified;
-    }
+         }
+      }
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.LastModified#getLastModified()
+    */
+   public long getLastModified() {
+      return lastModified;
+   }
 }

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentBuildException.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentBuildException.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentBuildException.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentBuildException.java Wed Jan 30 23:44:03 2008
@@ -14,41 +14,43 @@
  *  limitations under the License.
  *
  */
-
 /* $Id$  */
-
 package org.apache.lenya.cms.publication;
-
 public class DocumentBuildException extends PublicationException {
-    /**
-     * Constructor.
-     */
-    public DocumentBuildException() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     * @param message A message.
-     */
-    public DocumentBuildException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructor.
-     * @param cause The cause of the exception.
-     */
-    public DocumentBuildException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Constructor.
-     * @param message A message.
-     * @param cause The cause of the exception.
-     */
-    public DocumentBuildException(String message, Throwable cause) {
-        super(message, cause);
-    }
+   private static final long serialVersionUID = 1L;
+   /**
+    * Constructor.
+    */
+   public DocumentBuildException() {
+      super();
+   }
+   /**
+    * Constructor.
+    * 
+    * @param message
+    *           A message.
+    */
+   public DocumentBuildException(String message) {
+      super(message);
+   }
+   /**
+    * Constructor.
+    * 
+    * @param cause
+    *           The cause of the exception.
+    */
+   public DocumentBuildException(Throwable cause) {
+      super(cause);
+   }
+   /**
+    * Constructor.
+    * 
+    * @param message
+    *           A message.
+    * @param cause
+    *           The cause of the exception.
+    */
+   public DocumentBuildException(String message, Throwable cause) {
+      super(message, cause);
+   }
 }

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentDoesNotExistException.java Wed Jan 30 23:44:03 2008
@@ -14,47 +14,44 @@
  *  limitations under the License.
  *
  */
-
 /* $Id$  */
-
 package org.apache.lenya.cms.publication;
-
 public class DocumentDoesNotExistException extends DocumentException {
-
-    /**
-     * Creates a new DocumentDoesNotExistException
-     * 
-     */
-    public DocumentDoesNotExistException() {
-        super();
-    }
-
-    /**
-     * Creates a new DocumentDoesNotExistException
-     * 
-     * @param message the exception message
-     */
-    public DocumentDoesNotExistException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates a new DocumentDoesNotExistException
-     * 
-     * @param message the exception message
-     * @param cause the cause of the exception
-     */
-    public DocumentDoesNotExistException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * Creates a new DocumentDoesNotExistException
-     * 
-     * @param cause the cause of the exception
-     */
-    public DocumentDoesNotExistException(Throwable cause) {
-        super(cause);
-    }
-
+   private static final long serialVersionUID = 1L;
+   /**
+    * Creates a new DocumentDoesNotExistException
+    * 
+    */
+   public DocumentDoesNotExistException() {
+      super();
+   }
+   /**
+    * Creates a new DocumentDoesNotExistException
+    * 
+    * @param message
+    *           the exception message
+    */
+   public DocumentDoesNotExistException(String message) {
+      super(message);
+   }
+   /**
+    * Creates a new DocumentDoesNotExistException
+    * 
+    * @param message
+    *           the exception message
+    * @param cause
+    *           the cause of the exception
+    */
+   public DocumentDoesNotExistException(String message, Throwable cause) {
+      super(message, cause);
+   }
+   /**
+    * Creates a new DocumentDoesNotExistException
+    * 
+    * @param cause
+    *           the cause of the exception
+    */
+   public DocumentDoesNotExistException(Throwable cause) {
+      super(cause);
+   }
 }

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentException.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentException.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentException.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentException.java Wed Jan 30 23:44:03 2008
@@ -14,47 +14,44 @@
  *  limitations under the License.
  *
  */
-
 /* $Id$  */
-
 package org.apache.lenya.cms.publication;
-
 public class DocumentException extends PublicationException {
-
-    /**
-     * Creates a new DocumentException
-     * 
-     */
-    public DocumentException() {
-        super();
-    }
-
-    /**
-     * Creates a new DocumentException
-     * 
-     * @param message the exception message
-     */
-    public DocumentException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates a new DocumentException
-     * 
-     * @param message the exception message
-     * @param cause the cause of the exception
-     */
-    public DocumentException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * Creates a new DocumentException
-     * 
-     * @param cause the cause of the exception
-     */
-    public DocumentException(Throwable cause) {
-        super(cause);
-    }
-
+   private static final long serialVersionUID = 1L;
+   /**
+    * Creates a new DocumentException
+    * 
+    */
+   public DocumentException() {
+      super();
+   }
+   /**
+    * Creates a new DocumentException
+    * 
+    * @param message
+    *           the exception message
+    */
+   public DocumentException(String message) {
+      super(message);
+   }
+   /**
+    * Creates a new DocumentException
+    * 
+    * @param message
+    *           the exception message
+    * @param cause
+    *           the cause of the exception
+    */
+   public DocumentException(String message, Throwable cause) {
+      super(message, cause);
+   }
+   /**
+    * Creates a new DocumentException
+    * 
+    * @param cause
+    *           the cause of the exception
+    */
+   public DocumentException(Throwable cause) {
+      super(cause);
+   }
 }

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentTypeBuildException.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentTypeBuildException.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentTypeBuildException.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DocumentTypeBuildException.java Wed Jan 30 23:44:03 2008
@@ -14,44 +14,40 @@
  *  limitations under the License.
  *
  */
-
 /* $Id$  */
-
 package org.apache.lenya.cms.publication;
-
 public class DocumentTypeBuildException extends Exception {
-    /**
-     *
-     */
-    public DocumentTypeBuildException() {
-        super();
-    }
-
-    /**
-     * Creates a new DocumentTypeBuildException.
-     * 
-     * @param message the exception message
-     */
-    public DocumentTypeBuildException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates a new DocumentTypeBuildException.
-     * 
-     * @param message the exception message
-     * @param cause the cause of the exception
-     */
-    public DocumentTypeBuildException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * Creates a new DocumentTypeBuildException.
-     * 
-     * @param cause the cause of the exception
-     */
-    public DocumentTypeBuildException(Throwable cause) {
-        super(cause);
-    }
+   private static final long serialVersionUID = 1L;
+   public DocumentTypeBuildException() {
+      super();
+   }
+   /**
+    * Creates a new DocumentTypeBuildException.
+    * 
+    * @param message
+    *           the exception message
+    */
+   public DocumentTypeBuildException(String message) {
+      super(message);
+   }
+   /**
+    * Creates a new DocumentTypeBuildException.
+    * 
+    * @param message
+    *           the exception message
+    * @param cause
+    *           the cause of the exception
+    */
+   public DocumentTypeBuildException(String message, Throwable cause) {
+      super(message, cause);
+   }
+   /**
+    * Creates a new DocumentTypeBuildException.
+    * 
+    * @param cause
+    *           the cause of the exception
+    */
+   public DocumentTypeBuildException(Throwable cause) {
+      super(cause);
+   }
 }

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreHelper.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreHelper.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreHelper.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreHelper.java Wed Jan 30 23:44:03 2008
@@ -14,76 +14,64 @@
  *  limitations under the License.
  *
  */
-
 /* $Id$  */
-
 package org.apache.lenya.cms.publication;
-
-import org.apache.log4j.Category;
-
+import org.apache.log4j.Logger;
 /**
  * Facade to get the DublinCore through the cms Document
  */
 public final class DublinCoreHelper {
-
-	/**
-	 *  
-	 */
-	private DublinCoreHelper() {
-	}
-
-	private static Category log = Category.getInstance(DublinCoreHelper.class);
-
-	/**
-	 * Get the value of the DCIdentifier corresponding to a document id.
-	 * 
-	 * @param publication
-	 *            The publication the document(s) belongs to.
-	 * @param area
-	 *            The area the document(s) belongs to.
-	 * @param documentId
-	 *            The document id.
-	 * @return a String. The value of the DCIdentifier.
-	 * @throws SiteTreeException
-	 *             when something with the sitetree went wrong.
-	 * @throws DocumentBuildException
-	 *             when the building of a document failed.
-	 * @throws DocumentException
-	 *             when something with the document went wrong.
-	 */
-	public static String getDCIdentifier(Publication publication, String area, String documentId)
-		throws SiteTreeException, DocumentBuildException, DocumentException {
-		String identifier = null;
-		String language = null;
-		String url = null;
-		Document document = null;
-
-		SiteTree tree = publication.getTree(area);
-		SiteTreeNode node = tree.getNode(documentId);
-
-		DocumentBuilder builder = publication.getDocumentBuilder();
-
-		int i = 0;
-		Label[] labels = node.getLabels();
-		if (labels.length > 0) {
-			while (identifier == null && i < labels.length) {
-				language = labels[i].getLanguage();
-				url = builder.buildCanonicalUrl(publication, area, documentId, language);
-				document = builder.buildDocument(publication, url);
-				log.debug("document file : " + document.getFile().getAbsolutePath());
-				DublinCore dublincore = document.getDublinCore();
-				log.debug("dublincore title : " + dublincore.getFirstValue(DublinCore.ELEMENT_TITLE));
-				identifier = dublincore.getFirstValue(DublinCore.ELEMENT_IDENTIFIER);
-				i = i + 1;
-			}
-		}
-		if (labels.length < 1 || identifier == null) {
-			url = builder.buildCanonicalUrl(publication, area, documentId);
-			document = builder.buildDocument(publication, url);
-			DublinCore dublincore = document.getDublinCore();
-			identifier = dublincore.getFirstValue(DublinCore.ELEMENT_IDENTIFIER);
-		}
-
-		return identifier;
-	}
+   /**
+    * 
+    */
+   private DublinCoreHelper() {
+   }
+   private static Logger log = Logger.getLogger(DublinCoreHelper.class);
+   /**
+    * Get the value of the DCIdentifier corresponding to a document id.
+    * 
+    * @param publication
+    *           The publication the document(s) belongs to.
+    * @param area
+    *           The area the document(s) belongs to.
+    * @param documentId
+    *           The document id.
+    * @return a String. The value of the DCIdentifier.
+    * @throws SiteTreeException
+    *            when something with the sitetree went wrong.
+    * @throws DocumentBuildException
+    *            when the building of a document failed.
+    * @throws DocumentException
+    *            when something with the document went wrong.
+    */
+   public static String getDCIdentifier(Publication publication, String area, String documentId) throws SiteTreeException, DocumentBuildException, DocumentException {
+      String identifier = null;
+      String language = null;
+      String url = null;
+      Document document = null;
+      SiteTree tree = publication.getTree(area);
+      SiteTreeNode node = tree.getNode(documentId);
+      DocumentBuilder builder = publication.getDocumentBuilder();
+      int i = 0;
+      Label[] labels = node.getLabels();
+      if(labels.length > 0){
+         while(identifier == null && i < labels.length){
+            language = labels[i].getLanguage();
+            url = builder.buildCanonicalUrl(publication, area, documentId, language);
+            document = builder.buildDocument(publication, url);
+            log.debug("document file : " + document.getFile().getAbsolutePath());
+            DublinCore dublincore = document.getDublinCore();
+            log.debug("dublincore title : " + dublincore.getFirstValue(DublinCore.ELEMENT_TITLE));
+            identifier = dublincore.getFirstValue(DublinCore.ELEMENT_IDENTIFIER);
+            i = i + 1;
+         }
+      }
+      if(labels.length < 1 || identifier == null){
+         url = builder.buildCanonicalUrl(publication, area, documentId);
+         document = builder.buildDocument(publication, url);
+         DublinCore dublincore = document.getDublinCore();
+         identifier = dublincore.getFirstValue(DublinCore.ELEMENT_IDENTIFIER);
+      }
+      return identifier;
+   }
 }

Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreImpl.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreImpl.java?rev=617035&r1=617034&r2=617035&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreImpl.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/publication/DublinCoreImpl.java Wed Jan 30 23:44:03 2008
@@ -14,11 +14,8 @@
  *  limitations under the License.
  *
  */
-
 /* $Id$  */
-
 package org.apache.lenya.cms.publication;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,389 +23,289 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
-
 import org.apache.lenya.xml.DocumentHelper;
 import org.apache.lenya.xml.NamespaceHelper;
-import org.apache.log4j.Category;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
-
 /**
- * Access dublin core meta data in documents.
- * This class uses the dublin core specification from 2003-03-04.
+ * Access dublin core meta data in documents. This class uses the dublin core specification from 2003-03-04.
  */
 public class DublinCoreImpl {
-    private static final Category log = Category.getInstance(DublinCoreImpl.class);
-    private Document cmsdocument;
-    private File infofile;
-
-    private Map elements = new HashMap();
-    private Map terms = new HashMap();
-
-    private static final String META = "meta";
-
-    private static final String DC_NAMESPACE = "http://purl.org/dc/elements/1.1/";
-    private static final String DC_PREFIX = "dc";
-
-    public static final String[] ELEMENTS =
-        {
-            DublinCore.ELEMENT_TITLE,
-            DublinCore.ELEMENT_CREATOR,
-            DublinCore.ELEMENT_SUBJECT,
-            DublinCore.ELEMENT_DESCRIPTION,
-            DublinCore.ELEMENT_PUBLISHER,
-            DublinCore.ELEMENT_CONTRIBUTOR,
-            DublinCore.ELEMENT_DATE,
-            DublinCore.ELEMENT_TYPE,
-            DublinCore.ELEMENT_FORMAT,
-            DublinCore.ELEMENT_IDENTIFIER,
-            DublinCore.ELEMENT_SOURCE,
-            DublinCore.ELEMENT_LANGUAGE,
-            DublinCore.ELEMENT_RELATION,
-            DublinCore.ELEMENT_COVERAGE,
-            DublinCore.ELEMENT_RIGHTS };
-
-    // Dublin Core Terms
-
-    private static final String DCTERMS_NAMESPACE = "http://purl.org/dc/terms/";
-    private static final String DCTERMS_PREFIX = "dcterms";
-
-    public static final String[] TERMS =
-        {
-            DublinCore.TERM_AUDIENCE,
-            DublinCore.TERM_ALTERNATIVE,
-            DublinCore.TERM_TABLEOFCONTENTS,
-            DublinCore.TERM_ABSTRACT,
-            DublinCore.TERM_CREATED,
-            DublinCore.TERM_VALID,
-            DublinCore.TERM_EXTENT,
-            DublinCore.TERM_AVAILABLE,
-            DublinCore.TERM_ISSUED,
-            DublinCore.TERM_MODIFIED,
-            DublinCore.TERM_EXTENT,
-            DublinCore.TERM_MEDIUM,
-            DublinCore.TERM_ISVERSIONOF,
-            DublinCore.TERM_HASVERSION,
-            DublinCore.TERM_ISREPLACEDBY,
-            DublinCore.TERM_REPLACES,
-            DublinCore.TERM_ISREQUIREDBY,
-            DublinCore.TERM_REQUIRES,
-            DublinCore.TERM_ISPARTOF,
-            DublinCore.TERM_HASPART,
-            DublinCore.TERM_ISREFERENCEDBY,
-            DublinCore.TERM_REFERENCES,
-            DublinCore.TERM_ISFORMATOF,
-            DublinCore.TERM_HASFORMAT,
-            DublinCore.TERM_CONFORMSTO,
-            DublinCore.TERM_SPATIAL,
-            DublinCore.TERM_TEMPORAL,
-            DublinCore.TERM_MEDIATOR,
-            DublinCore.TERM_DATEACCEPTED,
-            DublinCore.TERM_DATECOPYRIGHTED,
-            DublinCore.TERM_DATESUBMITTED,
-            DublinCore.TERM_EDUCATIONLEVEL,
-            DublinCore.TERM_ACCESSRIGHTS,
-            DublinCore.TERM_BIBLIOGRAPHICCITATION };
-
-    /** 
-     * Creates a new instance of Dublin Core
-     * 
-     * @param aDocument the document for which the Dublin Core instance is created.
-     * 
-     * @throws DocumentException if an error occurs
-     */
-    protected DublinCoreImpl(Document aDocument) throws DocumentException {
-        this.cmsdocument = aDocument;
-        infofile =
-            cmsdocument.getPublication().getPathMapper().getFile(
-                cmsdocument.getPublication(),
-                cmsdocument.getArea(),
-                cmsdocument.getId(),
-                cmsdocument.getLanguage());
-        loadValues();
-    }
-
-    /**
-     * Loads the dublin core values from the XML file.
-     * @throws DocumentException when something went wrong.
-     */
-    protected void loadValues() throws DocumentException {
-
-        if (infofile.exists()) {
-            org.w3c.dom.Document doc = null;
-            try {
-                doc = DocumentHelper.readDocument(infofile);
-            } catch (Exception e) {
-                throw new DocumentException("Parsing file [" + infofile + "] failed: ", e);
-            }
-
-            // FIXME: what if "lenya:meta" element doesn't exist yet?
-            // Currently the element is inserted.
-            Element metaElement = getMetaElement(doc);
-
-            String[] namespaces = { DC_NAMESPACE, DCTERMS_NAMESPACE };
-            String[] prefixes = { DC_PREFIX, DCTERMS_PREFIX };
-            String[][] arrays = { ELEMENTS, TERMS };
-            Map[] maps = { elements, terms };
-
-            for (int type = 0; type < 2; type++) {
-                NamespaceHelper helper = new NamespaceHelper(namespaces[type], prefixes[type], doc);
-                String[] elementNames = arrays[type];
-                for (int i = 0; i < elementNames.length; i++) {
-                    Element[] children = helper.getChildren(metaElement, elementNames[i]);
-                    String[] values = new String[children.length];
-                    for (int valueIndex = 0; valueIndex < children.length; valueIndex++) {
-                        values[valueIndex] =
-                            DocumentHelper.getSimpleElementText(children[valueIndex]);
-                    }
-                    maps[type].put(elementNames[i], values);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * Save the meta data.
-     *
-     * @throws DocumentException if the meta data could not be made persistent.
-     */
-    public void save() throws DocumentException {
-        org.w3c.dom.Document doc = null;
-        try {
+   private Document cmsdocument;
+   private File infofile;
+   private Map elements = new HashMap();
+   private Map terms = new HashMap();
+   private static final String META = "meta";
+   private static final String DC_NAMESPACE = "http://purl.org/dc/elements/1.1/";
+   private static final String DC_PREFIX = "dc";
+   public static final String[] ELEMENTS = {DublinCore.ELEMENT_TITLE, DublinCore.ELEMENT_CREATOR, DublinCore.ELEMENT_SUBJECT, DublinCore.ELEMENT_DESCRIPTION, DublinCore.ELEMENT_PUBLISHER, DublinCore.ELEMENT_CONTRIBUTOR, DublinCore.ELEMENT_DATE, DublinCore.ELEMENT_TYPE, DublinCore.ELEMENT_FORMAT, DublinCore.ELEMENT_IDENTIFIER, DublinCore.ELEMENT_SOURCE, DublinCore.ELEMENT_LANGUAGE, DublinCore.ELEMENT_RELATION, DublinCore.ELEMENT_COVERAGE, DublinCore.ELEMENT_RIGHTS};
+   // Dublin Core Terms
+   private static final String DCTERMS_NAMESPACE = "http://purl.org/dc/terms/";
+   private static final String DCTERMS_PREFIX = "dcterms";
+   public static final String[] TERMS = {DublinCore.TERM_AUDIENCE, DublinCore.TERM_ALTERNATIVE, DublinCore.TERM_TABLEOFCONTENTS, DublinCore.TERM_ABSTRACT, DublinCore.TERM_CREATED, DublinCore.TERM_VALID, DublinCore.TERM_EXTENT, DublinCore.TERM_AVAILABLE, DublinCore.TERM_ISSUED, DublinCore.TERM_MODIFIED, DublinCore.TERM_EXTENT, DublinCore.TERM_MEDIUM, DublinCore.TERM_ISVERSIONOF, DublinCore.TERM_HASVERSION, DublinCore.TERM_ISREPLACEDBY, DublinCore.TERM_REPLACES, DublinCore.TERM_ISREQUIREDBY, DublinCore.TERM_REQUIRES, DublinCore.TERM_ISPARTOF, DublinCore.TERM_HASPART, DublinCore.TERM_ISREFERENCEDBY, DublinCore.TERM_REFERENCES, DublinCore.TERM_ISFORMATOF, DublinCore.TERM_HASFORMAT, DublinCore.TERM_CONFORMSTO, DublinCore.TERM_SPATIAL, DublinCore.TERM_TEMPORAL, DublinCore.TERM_MEDIATOR, DublinCore.TERM_DATEACCEPTED, DublinCore.TERM_DATECOPYRIGHTED, DublinCore.TERM_DATESUBMITTED, DublinCore.TERM_EDUCATIONLEVEL, DublinCore.TERM_ACCESSRIGHTS, DublinCore.TERM_BIBLIOGRAPHICCITATION};
+   /**
+    * Creates a new instance of Dublin Core
+    * 
+    * @param aDocument
+    *           the document for which the Dublin Core instance is created.
+    * 
+    * @throws DocumentException
+    *            if an error occurs
+    */
+   protected DublinCoreImpl(Document aDocument) throws DocumentException {
+      this.cmsdocument = aDocument;
+      infofile = cmsdocument.getPublication().getPathMapper().getFile(cmsdocument.getPublication(), cmsdocument.getArea(), cmsdocument.getId(), cmsdocument.getLanguage());
+      loadValues();
+   }
+   /**
+    * Loads the dublin core values from the XML file.
+    * 
+    * @throws DocumentException
+    *            when something went wrong.
+    */
+   protected void loadValues() throws DocumentException {
+      if(infofile.exists()){
+         org.w3c.dom.Document doc = null;
+         try{
             doc = DocumentHelper.readDocument(infofile);
-        } catch (ParserConfigurationException e) {
-            throw new DocumentException(e);
-        } catch (SAXException e) {
-            throw new DocumentException(e);
-        } catch (IOException e) {
-            throw new DocumentException(e);
-        }
-
-        Element metaElement = getMetaElement(doc);
-
-        String[] namespaces = { DC_NAMESPACE, DCTERMS_NAMESPACE };
-        String[] prefixes = { DC_PREFIX, DCTERMS_PREFIX };
-        String[][] arrays = { ELEMENTS, TERMS };
-        Map[] maps = { elements, terms };
-
-        List childNodes = new ArrayList();
-        NodeList nodes = metaElement.getChildNodes();
-        for (int i = 0; i < nodes.getLength(); i++) {
-            if (nodes.item(i).getParentNode() == metaElement) {
-                childNodes.add(nodes.item(i));
-            }
-        }
-        Node[] children = (Node[])childNodes.toArray(new Node[childNodes.size()]);
-        for (int i = 0; i < children.length; i++){
-            metaElement.removeChild(children[i]);  
-        }
-
-        for (int type = 0; type < 2; type++) {
+         }catch(Exception e){
+            throw new DocumentException("Parsing file [" + infofile + "] failed: ", e);
+         }
+         // FIXME: what if "lenya:meta" element doesn't exist yet?
+         // Currently the element is inserted.
+         Element metaElement = getMetaElement(doc);
+         String[] namespaces = {DC_NAMESPACE, DCTERMS_NAMESPACE};
+         String[] prefixes = {DC_PREFIX, DCTERMS_PREFIX};
+         String[][] arrays = {ELEMENTS, TERMS};
+         Map[] maps = {elements, terms};
+         for(int type = 0; type < 2; type++){
             NamespaceHelper helper = new NamespaceHelper(namespaces[type], prefixes[type], doc);
             String[] elementNames = arrays[type];
-            for (int i = 0; i < elementNames.length; i++) {
-                String[] values = (String[]) maps[type].get(elementNames[i]);
-                for (int valueIndex = 0; valueIndex < values.length; valueIndex++) {
-                    Element valueElement =
-                        helper.createElement(elementNames[i], values[valueIndex]);
-                    metaElement.appendChild(valueElement);
-                }
+            for(int i = 0; i < elementNames.length; i++){
+               Element[] children = helper.getChildren(metaElement, elementNames[i]);
+               String[] values = new String[children.length];
+               for(int valueIndex = 0; valueIndex < children.length; valueIndex++){
+                  values[valueIndex] = DocumentHelper.getSimpleElementText(children[valueIndex]);
+               }
+               maps[type].put(elementNames[i], values);
             }
-        }
-
-        try {
-            DocumentHelper.writeDocument(doc, infofile);
-        } catch (TransformerConfigurationException e) {
-            throw new DocumentException(e);
-        } catch (TransformerException e) {
-            throw new DocumentException(e);
-        } catch (IOException e) {
-            throw new DocumentException(e);
-        }
-
-    }
-
-    /**
-     * Returns the Lenya meta data element.
-     * @param doc The XML document.
-     * @return A DOM element.
-     */
-    protected Element getMetaElement(org.w3c.dom.Document doc) throws DocumentException {
-        NamespaceHelper namespaceHelper =
-            new NamespaceHelper(PageEnvelope.NAMESPACE, PageEnvelope.DEFAULT_PREFIX, doc);
-        Element documentElement = doc.getDocumentElement();
-        Element metaElement = namespaceHelper.getFirstChild(documentElement, META);
-
-        if (metaElement == null) {
-            metaElement = namespaceHelper.createElement(META);
-            Element[] children = DocumentHelper.getChildren(documentElement);
-            if (children.length == 0) {
-                documentElement.appendChild(metaElement);
-            } else {
-                documentElement.insertBefore(metaElement, children[0]);
+         }
+      }
+   }
+   /**
+    * Save the meta data.
+    * 
+    * @throws DocumentException
+    *            if the meta data could not be made persistent.
+    */
+   public void save() throws DocumentException {
+      org.w3c.dom.Document doc = null;
+      try{
+         doc = DocumentHelper.readDocument(infofile);
+      }catch(ParserConfigurationException e){
+         throw new DocumentException(e);
+      }catch(SAXException e){
+         throw new DocumentException(e);
+      }catch(IOException e){
+         throw new DocumentException(e);
+      }
+      Element metaElement = getMetaElement(doc);
+      String[] namespaces = {DC_NAMESPACE, DCTERMS_NAMESPACE};
+      String[] prefixes = {DC_PREFIX, DCTERMS_PREFIX};
+      String[][] arrays = {ELEMENTS, TERMS};
+      Map[] maps = {elements, terms};
+      List childNodes = new ArrayList();
+      NodeList nodes = metaElement.getChildNodes();
+      for(int i = 0; i < nodes.getLength(); i++){
+         if(nodes.item(i).getParentNode() == metaElement){
+            childNodes.add(nodes.item(i));
+         }
+      }
+      Node[] children = (Node[]) childNodes.toArray(new Node[childNodes.size()]);
+      for(int i = 0; i < children.length; i++){
+         metaElement.removeChild(children[i]);
+      }
+      for(int type = 0; type < 2; type++){
+         NamespaceHelper helper = new NamespaceHelper(namespaces[type], prefixes[type], doc);
+         String[] elementNames = arrays[type];
+         for(int i = 0; i < elementNames.length; i++){
+            String[] values = (String[]) maps[type].get(elementNames[i]);
+            for(int valueIndex = 0; valueIndex < values.length; valueIndex++){
+               Element valueElement = helper.createElement(elementNames[i], values[valueIndex]);
+               metaElement.appendChild(valueElement);
             }
-        }
-
-        return metaElement;
-    }
-
-    /**
-     * Returns the first value for a certain key.
-     * @param key The key.
-     * @return A string.
-     */
-    public String getFirstValue(String key) throws DocumentException {
-        String value = null;
-        String[] values = getElementOrTerm(key);
-        if (values.length > 0) {
-            value = values[0];
-        }
-        return value;
-    }
-
-    /**
-     * Returns the element or term values, resp.,  for a certain key.
-     * @param key The key.
-     * @return An array of strings.
-     */
-    protected String[] getElementOrTerm(String key) throws DocumentException {
-        String[] values;
-
-        List elementList = Arrays.asList(ELEMENTS);
-        List termList = Arrays.asList(TERMS);
-        if (elementList.contains(key)) {
-            values = (String[]) elements.get(key);
-        } else if (termList.contains(key)) {
-            values = (String[]) terms.get(key);
-        } else {
-            throw new DocumentException(
-                "The key [" + key + "] does not refer to a dublin core element or term!");
-        }
-        if (values == null) {
-            values = new String[0];
-        }
-        return values;
-    }
-
-    /**
-     * @see org.apache.lenya.cms.publication.DublinCore#getValues(java.lang.String)
-     */
-    public String[] getValues(String key) throws DocumentException {
-        return getElementOrTerm(key);
-    }
-
-    /**
-     * @see org.apache.lenya.cms.publication.DublinCore#addValue(java.lang.String, java.lang.String)
-     */
-    public void addValue(String key, String value) throws DocumentException {
-        String[] existingValues = getElementOrTerm(key);
-        List list = new ArrayList(Arrays.asList(existingValues));
-        list.add(value);
-        String[] newValues = (String[]) list.toArray(new String[list.size()]);
-
-        List elementList = Arrays.asList(ELEMENTS);
-        List termList = Arrays.asList(TERMS);
-        if (elementList.contains(key)) {
-            elements.put(key, newValues);
-        } else if (termList.contains(key)) {
-            terms.put(key, newValues);
-        } else {
-            throw new DocumentException(
-                "The key [" + key + "] does not refer to a dublin core element or term!");
-        }
-    }
-	
-    /**
-     * @see org.apache.lenya.cms.publication.DublinCore#setValue(java.lang.String, java.lang.String)
-     */
-    public void setValue(String key, String value) throws DocumentException {
-        String[] newValues = { value };
-        
-        List elementList = Arrays.asList(ELEMENTS);
-        List termList = Arrays.asList(TERMS);
-        if (elementList.contains(key)) {
-            elements.put(key, newValues);
-        } else if (termList.contains(key)) {
-            terms.put(key, newValues);
-        } else {
-            throw new DocumentException(
-                "The key [" + key + "] does not refer to a dublin core element or term!");
-        }
-    }
-    
-	/**
-	 * @see org.apache.lenya.cms.publication.DublinCore#addValues(java.lang.String, java.lang.String[])
-	 */
-	public void addValues(String key, String[] values) throws DocumentException {
-		for (int i = 0; i < values.length; i++) {
-            addValue(key,values[i]);
-        }
-	}
-	
-    /**
-     * @see org.apache.lenya.cms.publication.DublinCore#removeValue(java.lang.String, java.lang.String)
-     */
-    public void removeValue(String key, String value) throws DocumentException {
-        String[] existingValues = getElementOrTerm(key);
-        List list = new ArrayList(Arrays.asList(existingValues));
-
-        if (!list.contains(value)) {
-            throw new DocumentException(
-                "The key [" + key + "] does not contain the value [" + value + "]!");
-        }
-
-        list.remove(value);
-        String[] newValues = (String[]) list.toArray(new String[list.size()]);
-
-        List elementList = Arrays.asList(ELEMENTS);
-        List termList = Arrays.asList(TERMS);
-        if (elementList.contains(key)) {
-            elements.put(key, newValues);
-        } else if (termList.contains(key)) {
-            terms.put(key, newValues);
-        } else {
-            throw new DocumentException(
-                "The key [" + key + "] does not refer to a dublin core element or term!");
-        }
-    }
-
-    /**
-     * @see org.apache.lenya.cms.publication.DublinCore#removeAllValues(java.lang.String)
-     */
-    public void removeAllValues(String key) throws DocumentException {
-        List elementList = Arrays.asList(ELEMENTS);
-        List termList = Arrays.asList(TERMS);
-        if (elementList.contains(key)) {
-            elements.put(key, new String[0]);
-        } else if (termList.contains(key)) {
-            terms.put(key, new String[0]);
-        } else {
-            throw new DocumentException(
-                "The key [" + key + "] does not refer to a dublin core element or term!");
-        }
-    }
-    
-	/**
-	 * @see org.apache.lenya.cms.publication.DublinCore#replaceBy(org.apache.lenya.cms.publication.DublinCore)
-	 */
-	public void replaceBy(DublinCore other) throws DocumentException {
-		for (int i = 0; i < ELEMENTS.length; i++) {
-            String key = ELEMENTS[i];
-            removeAllValues(key);
-            addValues(key, other.getValues(key));
-        }
-        for (int i = 0; i < TERMS.length; i++) {
-            String key = TERMS[i];
-            removeAllValues(key);
-            addValues(key, other.getValues(key));
-        }
-	}
-
+         }
+      }
+      try{
+         DocumentHelper.writeDocument(doc, infofile);
+      }catch(TransformerConfigurationException e){
+         throw new DocumentException(e);
+      }catch(TransformerException e){
+         throw new DocumentException(e);
+      }catch(IOException e){
+         throw new DocumentException(e);
+      }
+   }
+   /**
+    * Returns the Lenya meta data element.
+    * 
+    * @param doc
+    *           The XML document.
+    * @return A DOM element.
+    */
+   protected Element getMetaElement(org.w3c.dom.Document doc) throws DocumentException {
+      NamespaceHelper namespaceHelper = new NamespaceHelper(PageEnvelope.NAMESPACE, PageEnvelope.DEFAULT_PREFIX, doc);
+      Element documentElement = doc.getDocumentElement();
+      Element metaElement = namespaceHelper.getFirstChild(documentElement, META);
+      if(metaElement == null){
+         metaElement = namespaceHelper.createElement(META);
+         Element[] children = DocumentHelper.getChildren(documentElement);
+         if(children.length == 0){
+            documentElement.appendChild(metaElement);
+         }else{
+            documentElement.insertBefore(metaElement, children[0]);
+         }
+      }
+      return metaElement;
+   }
+   /**
+    * Returns the first value for a certain key.
+    * 
+    * @param key
+    *           The key.
+    * @return A string.
+    */
+   public String getFirstValue(String key) throws DocumentException {
+      String value = null;
+      String[] values = getElementOrTerm(key);
+      if(values.length > 0){
+         value = values[0];
+      }
+      return value;
+   }
+   /**
+    * Returns the element or term values, resp., for a certain key.
+    * 
+    * @param key
+    *           The key.
+    * @return An array of strings.
+    */
+   protected String[] getElementOrTerm(String key) throws DocumentException {
+      String[] values;
+      List elementList = Arrays.asList(ELEMENTS);
+      List termList = Arrays.asList(TERMS);
+      if(elementList.contains(key)){
+         values = (String[]) elements.get(key);
+      }else if(termList.contains(key)){
+         values = (String[]) terms.get(key);
+      }else{
+         throw new DocumentException("The key [" + key + "] does not refer to a dublin core element or term!");
+      }
+      if(values == null){
+         values = new String[0];
+      }
+      return values;
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#getValues(java.lang.String)
+    */
+   public String[] getValues(String key) throws DocumentException {
+      return getElementOrTerm(key);
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#addValue(java.lang.String, java.lang.String)
+    */
+   public void addValue(String key, String value) throws DocumentException {
+      String[] existingValues = getElementOrTerm(key);
+      List list = new ArrayList(Arrays.asList(existingValues));
+      list.add(value);
+      String[] newValues = (String[]) list.toArray(new String[list.size()]);
+      List elementList = Arrays.asList(ELEMENTS);
+      List termList = Arrays.asList(TERMS);
+      if(elementList.contains(key)){
+         elements.put(key, newValues);
+      }else if(termList.contains(key)){
+         terms.put(key, newValues);
+      }else{
+         throw new DocumentException("The key [" + key + "] does not refer to a dublin core element or term!");
+      }
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#setValue(java.lang.String, java.lang.String)
+    */
+   public void setValue(String key, String value) throws DocumentException {
+      String[] newValues = {value};
+      List elementList = Arrays.asList(ELEMENTS);
+      List termList = Arrays.asList(TERMS);
+      if(elementList.contains(key)){
+         elements.put(key, newValues);
+      }else if(termList.contains(key)){
+         terms.put(key, newValues);
+      }else{
+         throw new DocumentException("The key [" + key + "] does not refer to a dublin core element or term!");
+      }
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#addValues(java.lang.String, java.lang.String[])
+    */
+   public void addValues(String key, String[] values) throws DocumentException {
+      for(int i = 0; i < values.length; i++){
+         addValue(key, values[i]);
+      }
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#removeValue(java.lang.String, java.lang.String)
+    */
+   public void removeValue(String key, String value) throws DocumentException {
+      String[] existingValues = getElementOrTerm(key);
+      List list = new ArrayList(Arrays.asList(existingValues));
+      if(!list.contains(value)){
+         throw new DocumentException("The key [" + key + "] does not contain the value [" + value + "]!");
+      }
+      list.remove(value);
+      String[] newValues = (String[]) list.toArray(new String[list.size()]);
+      List elementList = Arrays.asList(ELEMENTS);
+      List termList = Arrays.asList(TERMS);
+      if(elementList.contains(key)){
+         elements.put(key, newValues);
+      }else if(termList.contains(key)){
+         terms.put(key, newValues);
+      }else{
+         throw new DocumentException("The key [" + key + "] does not refer to a dublin core element or term!");
+      }
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#removeAllValues(java.lang.String)
+    */
+   public void removeAllValues(String key) throws DocumentException {
+      List elementList = Arrays.asList(ELEMENTS);
+      List termList = Arrays.asList(TERMS);
+      if(elementList.contains(key)){
+         elements.put(key, new String[0]);
+      }else if(termList.contains(key)){
+         terms.put(key, new String[0]);
+      }else{
+         throw new DocumentException("The key [" + key + "] does not refer to a dublin core element or term!");
+      }
+   }
+   /**
+    * @see org.apache.lenya.cms.publication.DublinCore#replaceBy(org.apache.lenya.cms.publication.DublinCore)
+    */
+   public void replaceBy(DublinCore other) throws DocumentException {
+      for(int i = 0; i < ELEMENTS.length; i++){
+         String key = ELEMENTS[i];
+         removeAllValues(key);
+         addValues(key, other.getValues(key));
+      }
+      for(int i = 0; i < TERMS.length; i++){
+         String key = TERMS[i];
+         removeAllValues(key);
+         addValues(key, other.getValues(key));
+      }
+   }
 }



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