You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2006/07/27 22:41:30 UTC

svn commit: r426230 - in /lenya/trunk/src: impl/java/org/apache/lenya/cms/publication/ java/org/apache/lenya/cms/publication/ java/org/apache/lenya/cms/publication/util/ java/org/apache/lenya/cms/site/ java/org/apache/lenya/cms/site/simple/ java/org/ap...

Author: andreas
Date: Thu Jul 27 13:41:28 2006
New Revision: 426230

URL: http://svn.apache.org/viewvc?rev=426230&view=rev
Log:
Introducing DocumentLocator, starting to decouple document ID from path (towards UUIDs)

Added:
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentLocator.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/SiteNode.java
      - copied, changed from r426061, lenya/trunk/src/java/org/apache/lenya/cms/site/Node.java
Removed:
    lenya/trunk/src/java/org/apache/lenya/cms/site/Node.java
Modified:
    lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java
    lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentBuilder.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentifier.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/NodeFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/NodeSet.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/simple/SimpleSiteManager.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java
    lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/ChangeNodeID.java
    lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java
    lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/MoveSubsite.java
    lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree/TreeSiteManager.java
    lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java
    lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java
    lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java

Modified: lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java (original)
+++ lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java Thu Jul 27 13:41:28 2006
@@ -25,6 +25,7 @@
 import org.apache.lenya.cms.repository.RepositoryException;
 import org.apache.lenya.cms.repository.RepositoryItem;
 import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.cms.site.SiteUtil;
 
 /**
  * A DocumentIdentityMap avoids the multiple instanciation of a document object.
@@ -59,20 +60,20 @@
      * Returns a document.
      * @param publication The publication.
      * @param area The area.
-     * @param documentId The document ID.
+     * @param uuid The document UUID.
      * @param language The language.
      * @return A document.
      * @throws DocumentBuildException if an error occurs.
      */
-    public Document get(Publication publication, String area, String documentId, String language)
+    public Document get(Publication publication, String area, String uuid, String language)
             throws DocumentBuildException {
 
         if (getLogger().isDebugEnabled())
             getLogger().debug("DocumentIdentityMap::get() called on publication ["
-                    + publication.getId() + "], area [" + area + "], documentId [" + documentId
+                    + publication.getId() + "], area [" + area + "], UUID [" + uuid
                     + "], language [" + language + "]");
 
-        String key = getKey(publication, area, documentId, language);
+        String key = getKey(publication, area, uuid, language);
 
         if (getLogger().isDebugEnabled())
             getLogger().debug("DocumentIdentityMap::get() got key [" + key
@@ -109,7 +110,7 @@
      */
     public Document getLanguageVersion(Document document, String language)
             throws DocumentBuildException {
-        return get(document.getPublication(), document.getArea(), document.getId(), language);
+        return get(document.getPublication(), document.getArea(), document.getUUID(), language);
     }
 
     /**
@@ -120,45 +121,7 @@
      * @throws DocumentBuildException if an error occurs.
      */
     public Document getAreaVersion(Document document, String area) throws DocumentBuildException {
-        return get(document.getPublication(), area, document.getId(), document.getLanguage());
-    }
-
-    /**
-     * Returns the parent of a document.
-     * @param document A document.
-     * @return A document or <code>null</code> if the document has no parent.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    public Document getParent(Document document) throws DocumentBuildException {
-        Document parent = null;
-        int lastSlashIndex = document.getId().lastIndexOf("/");
-        if (lastSlashIndex > 0) {
-            String parentId = document.getId().substring(0, lastSlashIndex);
-            parent = get(document.getPublication(),
-                    document.getArea(),
-                    parentId,
-                    document.getLanguage());
-        }
-        return parent;
-    }
-
-    /**
-     * Returns the parent of a document.
-     * @param document A document.
-     * @param defaultDocumentId The document ID to use if the document has no parent.
-     * @return A document.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    public Document getParent(Document document, String defaultDocumentId)
-            throws DocumentBuildException {
-        Document parent = getParent(document);
-        if (parent == null) {
-            parent = get(document.getPublication(),
-                    document.getArea(),
-                    defaultDocumentId,
-                    document.getLanguage());
-        }
-        return parent;
+        return get(document.getPublication(), area, document.getUUID(), document.getLanguage());
     }
 
     /**
@@ -241,12 +204,12 @@
      * Builds a document key.
      * @param publication The publication.
      * @param area The area.
-     * @param documentId The document ID.
+     * @param uuid The document UUID.
      * @param language The language.
      * @return A key.
      */
-    public String getKey(Publication publication, String area, String documentId, String language) {
-        return publication.getId() + ":" + area + ":" + documentId + ":" + language;
+    public String getKey(Publication publication, String area, String uuid, String language) {
+        return publication.getId() + ":" + area + ":" + uuid + ":" + language;
     }
 
     /**
@@ -257,12 +220,15 @@
     public String getKey(String webappUrl) {
         ServiceSelector selector = null;
         DocumentBuilder builder = null;
-        DocumentIdentifier identifier;
         try {
             Publication publication = PublicationUtil.getPublicationFromUrl(this.manager, webappUrl);
             selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
             builder = (DocumentBuilder) selector.select(publication.getDocumentBuilderHint());
-            identifier = builder.getIdentitfier(webappUrl);
+            DocumentLocator locator = builder.getLocator(webappUrl);
+
+            String area = locator.getArea();
+            String uuid = SiteUtil.getUUID(this.manager, publication, area, locator.getPath());
+            return getKey(publication, area, uuid, locator.getLanguage());
         } catch (Exception e) {
             throw new RuntimeException(e);
         } finally {
@@ -273,10 +239,6 @@
                 this.manager.release(selector);
             }
         }
-        return getKey(identifier.getPublication(),
-                identifier.getArea(),
-                identifier.getId(),
-                identifier.getLanguage());
     }
 
     /**
@@ -290,7 +252,7 @@
         String[] snippets = key.split(":");
         String publicationId = snippets[0];
         String area = snippets[1];
-        String documentId = snippets[2];
+        String uuid = snippets[2];
         String language = snippets[3];
 
         ServiceSelector selector = null;
@@ -304,7 +266,7 @@
             builder = (DocumentBuilder) selector.select(publication.getDocumentBuilderHint());
             DocumentIdentifier identifier = new DocumentIdentifier(publication,
                     area,
-                    documentId,
+                    uuid,
                     language);
             document = buildDocument(this, identifier, builder);
         } catch (Exception e) {
@@ -343,7 +305,7 @@
     protected DocumentImpl createDocument(DocumentFactory map, DocumentIdentifier identifier,
             DocumentBuilder builder) throws DocumentBuildException {
         DocumentImpl document = new DocumentImpl(this.manager, map, identifier, getLogger());
-        final String canonicalUrl = builder.buildCanonicalUrl(identifier);
+        final String canonicalUrl = builder.buildCanonicalUrl(document.getLocator());
         final String prefix = "/" + identifier.getPublication().getId() + "/"
                 + identifier.getArea();
         final String canonicalDocumentUrl = canonicalUrl.substring(prefix.length());
@@ -354,11 +316,22 @@
     public Document get(DocumentIdentifier identifier) throws DocumentBuildException {
         return get(identifier.getPublication(),
                 identifier.getArea(),
-                identifier.getId(),
+                identifier.getUUID(),
                 identifier.getLanguage());
     }
 
     public String getItemType() {
         return Document.TRANSACTIONABLE_TYPE;
+    }
+
+    public Document get(DocumentLocator locator) throws DocumentBuildException {
+        try {
+            Publication pub = PublicationUtil.getPublication(this.manager,
+                    locator.getPublicationId());
+            String uuid = SiteUtil.getUUID(this.manager, pub, locator.getArea(), locator.getPath());
+            return get(pub, locator.getArea(), uuid, locator.getLanguage());
+        } catch (PublicationException e) {
+            throw new DocumentBuildException(e);
+        }
     }
 }

Modified: lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentImpl.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentImpl.java (original)
+++ lenya/trunk/src/impl/java/org/apache/lenya/cms/publication/DocumentImpl.java Thu Jul 27 13:41:28 2006
@@ -35,7 +35,9 @@
 import org.apache.lenya.cms.publication.util.DocumentVisitor;
 import org.apache.lenya.cms.repository.Node;
 import org.apache.lenya.cms.repository.RepositoryException;
+import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteManager;
+import org.apache.lenya.cms.site.SiteUtil;
 
 /**
  * A typical CMS document.
@@ -98,15 +100,15 @@
         ContainerUtil.enableLogging(this, _logger);
         if (getLogger().isDebugEnabled()) {
             getLogger().debug("DefaultDocument() creating new instance with id ["
-                    + identifier.getId() + "], language [" + identifier.getLanguage() + "]");
+                    + identifier.getUUID() + "], language [" + identifier.getLanguage() + "]");
         }
 
         this.manager = manager;
         this.identifier = identifier;
-        if (identifier.getId() == null) {
+        if (identifier.getUUID() == null) {
             throw new IllegalArgumentException("The document ID must not be null!");
         }
-        if (!identifier.getId().startsWith("/")) {
+        if (!identifier.getUUID().startsWith("/")) {
             throw new IllegalArgumentException("The document ID must start with a slash!");
         }
 
@@ -114,7 +116,7 @@
 
         if (getLogger().isDebugEnabled()) {
             getLogger().debug("DefaultDocument() done building instance with _id ["
-                    + identifier.getId() + "], _language [" + identifier.getLanguage() + "]");
+                    + identifier.getUUID() + "], _language [" + identifier.getLanguage() + "]");
         }
     }
 
@@ -154,7 +156,7 @@
      * @see org.apache.lenya.cms.publication.Document#getId()
      */
     public String getId() {
-        return this.identifier.getId();
+        return this.identifier.getUUID();
     }
 
     /**
@@ -275,36 +277,8 @@
     /**
      * @see org.apache.lenya.cms.publication.Document#getUUID()
      */
-    public String getUUID() throws DocumentException {
-        String uuid = null;
-        String hint = getPublication().getSiteManagerHint();
-        if (hint == null) {
-            getLogger().error("SiteManagerHint is null!");
-        } else {
-            SiteManager siteManager = null;
-            ServiceSelector selector = null;
-            try {
-                selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
-                siteManager = (SiteManager) selector.select(hint);
-                uuid = siteManager.getUUID(this);
-                if (uuid == null) {
-                    uuid = getCanonicalDocumentURL();
-                    getLogger().warn("No UUID found for document [" + this
-                            + "]. Use canonical document URL: " + uuid);
-                }
-                return uuid;
-            } catch (Exception e) {
-                throw new DocumentException(e);
-            } finally {
-                if (selector != null) {
-                    if (siteManager != null) {
-                        selector.release(siteManager);
-                    }
-                    this.manager.release(selector);
-                }
-            }
-        }
-        return uuid;
+    public String getUUID() {
+        return getIdentifier().getUUID();
     }
 
     private String defaultSourceExtension = "xml";
@@ -598,4 +572,21 @@
         }
     }
 
+    private DocumentLocator locator;
+
+    public DocumentLocator getLocator() {
+        if (this.locator == null) {
+            String path;
+            try {
+                path = SiteUtil.getPath(this.manager, this);
+            } catch (SiteException e) {
+                throw new RuntimeException(e);
+            }
+            this.locator = DocumentLocator.getLocator(getPublication().getId(),
+                    getArea(),
+                    path,
+                    getLanguage());
+        }
+        return this.locator;
+    }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java Thu Jul 27 13:41:28 2006
@@ -115,37 +115,44 @@
 
     /**
      * Builds the canonical document URL.
-     * @param identifier The identifier.
+     * @param locator The document.
      * @return A string.
      */
-    protected String buildCanonicalDocumentUrl(DocumentIdentifier identifier) {
+    protected String buildCanonicalDocumentUrl(DocumentLocator locator) {
 
         String languageSuffix = "";
-        String language = identifier.getLanguage();
-        if (!language.equals(identifier.getPublication().getDefaultLanguage())) {
+        String language = locator.getLanguage();
+
+        Publication pub;
+        try {
+            pub = PublicationUtil.getPublication(this.manager, locator.getPublicationId());
+        } catch (PublicationException e) {
+            throw new RuntimeException(e);
+        }
+
+        if (!language.equals(pub.getDefaultLanguage())) {
             languageSuffix = "_" + language;
         }
 
-        String url = identifier.getId() + languageSuffix + ".html";
+        String url = locator.getPath() + languageSuffix + ".html";
         return url;
     }
 
     /**
-     * @see org.apache.lenya.cms.publication.DocumentBuilder#buildCanonicalUrl(org.apache.lenya.cms.publication.DocumentIdentifier)
+     * @see org.apache.lenya.cms.publication.DocumentBuilder#buildCanonicalUrl(
+     *      org.apache.lenya.cms.publication.DocumentLocator)
      */
-    public String buildCanonicalUrl(DocumentIdentifier identifier) {
-
-        String documentUrl = buildCanonicalDocumentUrl(identifier);
-        String url = "/" + identifier.getPublication().getId() + "/" + identifier.getArea()
-                + documentUrl;
+    public String buildCanonicalUrl(DocumentLocator doc) {
 
+        String documentUrl = buildCanonicalDocumentUrl(doc);
+        String url = "/" + doc.getPublicationId() + "/" + doc.getArea() + documentUrl;
         return url;
     }
 
     /**
-     * @see org.apache.lenya.cms.publication.DocumentBuilder#getIdentitfier(java.lang.String)
+     * @see org.apache.lenya.cms.publication.DocumentBuilder#getLocator( java.lang.String)
      */
-    public DocumentIdentifier getIdentitfier(String webappUrl) throws DocumentBuildException {
+    public DocumentLocator getLocator(String webappUrl) throws DocumentBuildException {
 
         if (!isDocument(webappUrl)) {
             throw new DocumentBuildException("The webapp URL [" + webappUrl
@@ -173,18 +180,13 @@
             language = publication.getDefaultLanguage();
         }
 
-        String documentId = documentURL;
+        String path = documentURL;
 
-        if (!documentId.startsWith("/")) {
-            throw new DocumentBuildException("Document ID [" + documentId
-                    + "] does not start with '/'!");
+        if (!path.startsWith("/")) {
+            throw new DocumentBuildException("Path [" + path + "] does not start with '/'!");
         }
 
-        DocumentIdentifier identifier = new DocumentIdentifier(publication,
-                info.getArea(),
-                documentId,
-                language);
-        return identifier;
+        return DocumentLocator.getLocator(publication.getId(), info.getArea(), path, language);
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java Thu Jul 27 13:41:28 2006
@@ -145,9 +145,8 @@
     /**
      * Returns the UUID.
      * @return A string.
-     * @throws DocumentException if an error occurs.
      */
-    String getUUID() throws DocumentException;
+    String getUUID();
     
     /**
      * Check if a document with the given document-id, language and in the given
@@ -243,4 +242,9 @@
      * @return The document identifier for this document.
      */
     DocumentIdentifier getIdentifier();
+    
+    /**
+     * @return The locator for this document.
+     */
+    DocumentLocator getLocator();
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentBuilder.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentBuilder.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentBuilder.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentBuilder.java Thu Jul 27 13:41:28 2006
@@ -30,12 +30,13 @@
     String ROLE = DocumentBuilder.class.getName();
     
     /**
-     * Returns a document identifier for a web application URL.
+     * Returns a document for a web application URL.
+     * @param factory The factory.
      * @param webappUrl The web application URL.
      * @return A document identifier.
      * @throws DocumentBuildException if an error occurs.
      */
-    DocumentIdentifier getIdentitfier(String webappUrl) throws DocumentBuildException;
+    DocumentLocator getLocator(String webappUrl) throws DocumentBuildException;
 
     /**
      * Checks if an URL corresponds to a CMS document.
@@ -47,10 +48,10 @@
 
     /**
      * Builds an URL corresponding to a CMS document.
-     * @param identifier The document identifier.
+     * @param locator The locator.
      * @return a String The corresponding URL.
      */
-    String buildCanonicalUrl(DocumentIdentifier identifier);
+    String buildCanonicalUrl(DocumentLocator locator);
 
     /**
      * Checks if a document name is valid.

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java Thu Jul 27 13:41:28 2006
@@ -38,12 +38,12 @@
      * Returns a document.
      * @param publication The publication.
      * @param area The area.
-     * @param documentId The document ID.
+     * @param uuid The document ID.
      * @param language The language.
      * @return A document.
      * @throws DocumentBuildException if an error occurs.
      */
-    Document get(Publication publication, String area, String documentId, String language)
+    Document get(Publication publication, String area, String uuid, String language)
             throws DocumentBuildException;
 
     /**
@@ -73,41 +73,17 @@
     Document getAreaVersion(Document document, String area) throws DocumentBuildException;
 
     /**
-     * Returns the parent of a document.
-     * @param document A document.
-     * @return A document or <code>null</code> if the document has no parent.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    Document getParent(Document document) throws DocumentBuildException;
-
-    /**
-     * Returns the parent of a document.
-     * @param document A document.
-     * @param defaultDocumentId The document ID to use if the document has no parent.
-     * @return A document.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    Document getParent(Document document, String defaultDocumentId) throws DocumentBuildException;
-
-    /**
      * Builds a document for the default language.
      * @param publication The publication.
      * @param area The area.
-     * @param documentId The document ID.
+     * @param uuid The document UUID.
      * @return A document.
      * @throws DocumentBuildException if an error occurs.
      */
-    Document get(Publication publication, String area, String documentId)
+    Document get(Publication publication, String area, String uuid)
             throws DocumentBuildException;
 
     /**
-     * Checks if a string represents a valid document ID.
-     * @param id The string.
-     * @return A boolean value.
-     */
-    boolean isValidDocumentId(String id);
-
-    /**
      * Checks if a webapp URL represents a document.
      * @param webappUrl A web application URL.
      * @return A boolean value.
@@ -119,5 +95,12 @@
      * @return The session.
      */
     Session getSession();
+    
+    /**
+     * @param locator The locator.
+     * @return A document.
+     * @throws DocumentBuildException if an error occurs.
+     */
+    Document get(DocumentLocator locator) throws DocumentBuildException;
     
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentifier.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentifier.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentifier.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentifier.java Thu Jul 27 13:41:28 2006
@@ -23,35 +23,36 @@
 
     private Publication publication;
     private String area;
-    private String id;
     private String language;
-    
+    private String uuid;
+
     /**
      * Ctor.
      * @param publication The publication.
      * @param area The area.
      * @param id The document ID.
      * @param language The language.
+     * @param uuid The UUID.
      */
-    public DocumentIdentifier(Publication publication, String area, String id, String language) {
+    public DocumentIdentifier(Publication publication, String area, String uuid, String language) {
         this.publication = publication;
         this.area = area;
-        this.id = id;
         this.language = language;
+        this.uuid = uuid;
     }
-
+    
     /**
-     * @return The area.
+     * @return The UUID.
      */
-    public String getArea() {
-        return area;
+    public String getUUID() {
+        return this.uuid;
     }
 
     /**
-     * @return The document ID.
+     * @return The area.
      */
-    public String getId() {
-        return id;
+    public String getArea() {
+        return area;
     }
 
     /**
@@ -67,19 +68,19 @@
     public Publication getPublication() {
         return publication;
     }
-    
+
     public boolean equals(Object obj) {
         return (obj instanceof DocumentIdentifier) && obj.hashCode() == hashCode();
     }
-    
+
     public int hashCode() {
         return getKey().hashCode();
     }
-    
+
     protected String getKey() {
-        return this.publication.getId() + ":" + this.area + ":" + this.id + ":" + this.language;
+        return this.publication.getId() + ":" + this.area + ":" + this.uuid + ":" + this.language;
     }
-    
+
     public String toString() {
         return getKey();
     }

Added: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentLocator.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentLocator.java?rev=426230&view=auto
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentLocator.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentLocator.java Thu Jul 27 13:41:28 2006
@@ -0,0 +1,105 @@
+/*
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.lenya.cms.publication;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.apache.lenya.cms.site.SiteNode;
+
+public class DocumentLocator {
+
+    private static Map locators = new WeakHashMap();
+
+    public static DocumentLocator getLocator(String pubId, String area, String path, String language) {
+        String key = DocumentLocator.getKey(pubId, area, path, language);
+        DocumentLocator locator = null;
+        if (locators.containsKey(key)) {
+            locator = (DocumentLocator) locators.get(key);
+        } else {
+            locator = new DocumentLocator(pubId, area, path, language);
+            locators.put(key, locator);
+        }
+        return locator;
+    }
+
+    protected static final String getKey(String pubId, String area, String path, String language) {
+        return pubId + ":" + area + ":" + path + ":" + language;
+    }
+
+    private String pubId;
+    private String area;
+    private String path;
+    private String language;
+
+    protected DocumentLocator(String pubId, String area, String path, String language) {
+        this.path = path;
+        this.pubId = pubId;
+        this.area = area;
+        this.language = language;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public String getLanguage() {
+        return language;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public String getPublicationId() {
+        return pubId;
+    }
+
+    public DocumentLocator getPathVersion(String path) {
+        return DocumentLocator.getLocator(getPublicationId(), getArea(), path, getLanguage());
+    }
+
+    public DocumentLocator getDescendant(String relativePath) {
+        return getPathVersion(getPath() + "/" + relativePath);
+    }
+
+    public DocumentLocator getChild(String step) {
+        if (step.indexOf("/") > -1) {
+            throw new IllegalArgumentException("The step [" + step + "] must not contain a slash!");
+        }
+        return getDescendant(step);
+    }
+
+    public DocumentLocator getParent() {
+        int lastSlashIndex = getPath().lastIndexOf("/");
+        if (lastSlashIndex > 0) {
+            String parentPath = getPath().substring(0, lastSlashIndex);
+            return getPathVersion(parentPath);
+        } else {
+            return null;
+        }
+    }
+
+    public DocumentLocator getParent(String defaultPath) {
+        DocumentLocator parent = getParent();
+        if (parent != null) {
+            return parent;
+        } else {
+            return getPathVersion(defaultPath);
+        }
+    }
+}

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java Thu Jul 27 13:41:28 2006
@@ -31,6 +31,7 @@
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentException;
 import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.DocumentUtil;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationException;
@@ -143,7 +144,8 @@
 
             contextPath = request.getContextPath();
 
-            Document parent = this.identityMap.getParent(document, "/index");
+            DocumentLocator parentLocator = document.getLocator().getParent("/index");
+            Document parent = this.identityMap.get(parentLocator);
             parentUrl = parent.getCanonicalWebappURL();
         } catch (final DocumentBuildException e) {
             throw new ProcessingException(e);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java Thu Jul 27 13:41:28 2006
@@ -81,7 +81,7 @@
      * @throws SiteException when something went wrong.
      */
     protected boolean isAntisymmetric(DocumentFactory map, NodeSet set) throws SiteException {
-        Node[] resources = set.getNodes();
+        SiteNode[] resources = set.getNodes();
         boolean isAntisymmetric = true;
         for (int i = 0; i < resources.length; i++) {
             for (int j = i + 1; j < resources.length; j++) {
@@ -104,7 +104,7 @@
      * @throws SiteException when something went wrong.
      */
     protected boolean isTransitive(DocumentFactory map, NodeSet set) throws SiteException {
-        Node[] resources = set.getNodes();
+        SiteNode[] resources = set.getNodes();
         boolean isTransitive = true;
         for (int i = 0; i < resources.length; i++) {
             for (int j = i + 1; j < resources.length; j++) {
@@ -129,7 +129,7 @@
      * @throws SiteException
      */
     protected boolean isIrreflexive(DocumentFactory map, NodeSet set) throws SiteException {
-        Node[] resources = set.getNodes();
+        SiteNode[] resources = set.getNodes();
         boolean isIrreflexive = true;
         for (int i = 0; i < resources.length; i++) {
             if (requires(map, resources[i], resources[i])) {
@@ -160,9 +160,9 @@
          */
         public int compare(Object arg0, Object arg1) {
             int result = 0;
-            if (arg0 instanceof Node && arg1 instanceof Node) {
-                Node doc1 = (Node) arg0;
-                Node doc2 = (Node) arg1;
+            if (arg0 instanceof SiteNode && arg1 instanceof SiteNode) {
+                SiteNode doc1 = (SiteNode) arg0;
+                SiteNode doc2 = (SiteNode) arg1;
 
                 try {
                     if (AbstractSiteManager.this.requires(map, doc1, doc2)) {
@@ -203,8 +203,8 @@
             if (arg0 instanceof Document && arg1 instanceof Document) {
                 Document doc1 = (Document) arg0;
                 Document doc2 = (Document) arg1;
-                Node node1 = NodeFactory.getNode(doc1);
-                Node node2 = NodeFactory.getNode(doc2);
+                SiteNode node1 = NodeFactory.getNode(doc1);
+                SiteNode node2 = NodeFactory.getNode(doc2);
 
                 try {
                     if (AbstractSiteManager.this.requires(map, node1, node2)) {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/NodeFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/NodeFactory.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/NodeFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/NodeFactory.java Thu Jul 27 13:41:28 2006
@@ -26,19 +26,20 @@
 
     private static Map nodes = new WeakHashMap();
     
-    public static Node getNode(Publication pub, String area, String docId) {
-        String key = Node.getKey(pub, area, docId);
-        Node node = null;
+    public static SiteNode getNode(Publication pub, String area, String docId) {
+        String key = SiteNode.getKey(pub, area, docId);
+        SiteNode node = null;
         if (nodes.containsKey(key)) {
-            node = (Node) nodes.get(key);
+            node = (SiteNode) nodes.get(key);
         }
         else {
-            node = new Node(pub, area, docId);
+            node = new SiteNode(pub, area, docId);
+            nodes.put(key, node);
         }
         return node;
     }
     
-    public static Node getNode(Document document) {
+    public static SiteNode getNode(Document document) {
         return getNode(document.getPublication(), document.getArea(), document.getId());
     }
     

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/NodeSet.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/NodeSet.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/NodeSet.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/NodeSet.java Thu Jul 27 13:41:28 2006
@@ -38,7 +38,7 @@
      * Ctor.
      * @param _nodes The initial nodes.
      */
-    public NodeSet(Node[] _nodes) {
+    public NodeSet(SiteNode[] _nodes) {
         for (int i = 0; i < _nodes.length; i++) {
             add(_nodes[i]);
         }
@@ -51,7 +51,7 @@
     public NodeSet(DocumentSet documents) {
         Document[] docs = documents.getDocuments();
         for (int i = 0; i < docs.length; i++) {
-            Node node = new Node(docs[i].getPublication(), docs[i].getArea(), docs[i].getId());
+            SiteNode node = new SiteNode(docs[i].getPublication(), docs[i].getArea(), docs[i].getId());
             if (!contains(node)) {
                 add(node);
             }
@@ -62,7 +62,7 @@
      * @param node A node.
      * @return If the node is contained.
      */
-    public boolean contains(Node node) {
+    public boolean contains(SiteNode node) {
         return getList().contains(node);
     }
 
@@ -81,15 +81,15 @@
      * 
      * @return An array of documents.
      */
-    public Node[] getNodes() {
-        return (Node[]) this.nodes.toArray(new Node[this.nodes.size()]);
+    public SiteNode[] getNodes() {
+        return (SiteNode[]) this.nodes.toArray(new SiteNode[this.nodes.size()]);
     }
 
     /**
      * Adds a node to this set.
      * @param node The node to add.
      */
-    public void add(Node node) {
+    public void add(SiteNode node) {
         assert node != null;
         assert !this.nodes.contains(node);
         this.nodes.add(node);
@@ -107,7 +107,7 @@
      * Removes a node.
      * @param resource The node.
      */
-    public void remove(Node resource) {
+    public void remove(SiteNode resource) {
         assert resource != null;
         assert getList().contains(resource);
         getList().remove(resource);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java Thu Jul 27 13:41:28 2006
@@ -57,7 +57,7 @@
      * @return A boolean value.
      * @throws SiteException if an error occurs.
      */
-    boolean requires(DocumentFactory map, Node dependingResource, Node requiredResource)
+    boolean requires(DocumentFactory map, SiteNode dependingResource, SiteNode requiredResource)
             throws SiteException;
 
     /**
@@ -68,7 +68,7 @@
      * @return An array of resources.
      * @throws SiteException if an error occurs.
      */
-    Node[] getRequiredResources(DocumentFactory map, Node resource) throws SiteException;
+    SiteNode[] getRequiredResources(DocumentFactory map, SiteNode resource) throws SiteException;
 
     /**
      * Returns the resources which require a certain resource.
@@ -78,7 +78,7 @@
      * @return An array of resources.
      * @throws SiteException if an error occurs.
      */
-    Node[] getRequiringResources(DocumentFactory map, Node resource) throws SiteException;
+    SiteNode[] getRequiringResources(DocumentFactory map, SiteNode resource) throws SiteException;
 
     /**
      * Adds a document to the site structure.
@@ -98,13 +98,22 @@
     boolean contains(Document resource) throws SiteException;
 
     /**
-     * Return the UUID of a certain resource in a certain area.
-     * 
-     * @param resource The resource.
+     * Return the path of a certain resource in a certain area.
+     * @param area The area.
+     * @param uuid The uuid.
      * @return A string.
-     * @throws SiteException if an error occurs.
+     * @throws SiteException if the document is not referenced in the site structure.
+     */
+    String getPath(String area, String uuid) throws SiteException;
+    
+    /**
+     * Return the UUID for a given path.
+     * @param area The area.
+     * @param path The path.
+     * @return The UUID.
+     * @throws SiteException if the path does not exist.
      */
-    String getUUID(Document resource) throws SiteException;
+    String getUUID(String area, String path) throws SiteException;
 
     /**
      * Checks if the site structure contains any language version of a certain resource in a certain

Copied: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteNode.java (from r426061, lenya/trunk/src/java/org/apache/lenya/cms/site/Node.java)
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteNode.java?p2=lenya/trunk/src/java/org/apache/lenya/cms/site/SiteNode.java&p1=lenya/trunk/src/java/org/apache/lenya/cms/site/Node.java&r1=426061&r2=426230&rev=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/Node.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteNode.java Thu Jul 27 13:41:28 2006
@@ -18,25 +18,25 @@
 
 import org.apache.lenya.cms.publication.Publication;
 
-public final class Node {
+public final class SiteNode {
 
-    private String documentId;
+    private String path;
     private String area;
     private Publication publication;
     
-    protected Node(Publication publication, String area, String documentId) {
+    protected SiteNode(Publication publication, String area, String path) {
         super();
         this.publication = publication;
         this.area = area;
-        this.documentId = documentId;
+        this.path = path;
     }
 
     public String getArea() {
         return area;
     }
 
-    public String getDocumentId() {
-        return documentId;
+    public String getPath() {
+        return path;
     }
 
     public Publication getPublication() {
@@ -44,25 +44,25 @@
     }
 
     public boolean equals(Object obj) {
-        if (obj == null || !(obj instanceof Node)) {
+        if (obj == null || !(obj instanceof SiteNode)) {
             return false;
         }
-        String thisKey = getKey(getPublication(), getArea(), getDocumentId());
-        Node node = (Node) obj;
-        String nodeKey = getKey(node.getPublication(), node.getArea(), node.getDocumentId());
+        String thisKey = getKey(getPublication(), getArea(), getPath());
+        SiteNode node = (SiteNode) obj;
+        String nodeKey = getKey(node.getPublication(), node.getArea(), node.getPath());
         return thisKey.equals(nodeKey);
     }
 
     public int hashCode() {
-        return getKey(getPublication(), getArea(), getDocumentId()).hashCode();
+        return getKey(getPublication(), getArea(), getPath()).hashCode();
     }
     
     protected static String getKey(Publication pub, String area, String docId) {
         return pub.getId() + ":" + area + ":" + docId;
     }
     
-    public Node getParent() {
-        String id = getDocumentId().substring(1);
+    public SiteNode getParent() {
+        String id = getPath().substring(1);
         String[] steps = id.split("/");
         if (steps.length == 1) {
             return null;

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteUtil.java Thu Jul 27 13:41:28 2006
@@ -16,25 +16,19 @@
  */
 package org.apache.lenya.cms.site;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.ServiceSelector;
-import org.apache.lenya.ac.User;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentException;
 import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.Resource;
-import org.apache.lenya.cms.publication.ResourcesManager;
 import org.apache.lenya.cms.publication.util.DocumentSet;
 
 /**
@@ -116,10 +110,10 @@
                     .getSiteManagerHint());
 
             DocumentFactory map = document.getIdentityMap();
-            Node node = NodeFactory.getNode(document);
+            SiteNode node = NodeFactory.getNode(document);
             set = getExistingDocuments(map, node);
 
-            Node[] requiringNodes = siteManager.getRequiringResources(map, node);
+            SiteNode[] requiringNodes = siteManager.getRequiringResources(map, node);
             for (int i = 0; i < requiringNodes.length; i++) {
                 set.addAll(getExistingDocuments(map, requiringNodes[i]));
             }
@@ -144,10 +138,10 @@
      * @throws DocumentBuildException if an error occurs.
      * @throws DocumentException if an error occurs.
      */
-    public static DocumentSet getExistingDocuments(DocumentFactory map, Node node)
+    public static DocumentSet getExistingDocuments(DocumentFactory map, SiteNode node)
             throws DocumentBuildException, DocumentException {
         DocumentSet set = new DocumentSet();
-        Document document = map.get(node.getPublication(), node.getArea(), node.getDocumentId());
+        Document document = map.get(node.getPublication(), node.getArea(), node.getPath());
         String[] languages = document.getLanguages();
         for (int i = 0; i < languages.length; i++) {
             Document version = document.getIdentityMap().getLanguageVersion(document, languages[i]);
@@ -469,5 +463,48 @@
             throw new SiteException(e);
         }
         return (Document[]) documents.toArray(new Document[documents.size()]);
+    }
+
+    public static String getPath(ServiceManager manager, Document doc) throws SiteException {
+        SiteManager siteManager = null;
+        ServiceSelector selector = null;
+
+        try {
+            selector = (ServiceSelector) manager.lookup(SiteManager.ROLE + "Selector");
+            String siteManagerHint = doc.getPublication().getSiteManagerHint();
+            siteManager = (SiteManager) selector.select(siteManagerHint);
+            return siteManager.getPath(doc.getArea(), doc.getId());
+        } catch (ServiceException e) {
+            throw new SiteException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                manager.release(siteManager);
+            }
+        }
+    }
+
+    public static String getUUID(ServiceManager manager, Publication pub, String area, String path)
+            throws SiteException {
+        SiteManager siteManager = null;
+        ServiceSelector selector = null;
+
+        try {
+            selector = (ServiceSelector) manager.lookup(SiteManager.ROLE + "Selector");
+            String siteManagerHint = pub.getSiteManagerHint();
+            siteManager = (SiteManager) selector.select(siteManagerHint);
+            return siteManager.getUUID(area, path);
+        } catch (ServiceException e) {
+            throw new SiteException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                manager.release(siteManager);
+            }
+        }
     }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/simple/SimpleSiteManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/simple/SimpleSiteManager.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/simple/SimpleSiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/simple/SimpleSiteManager.java Thu Jul 27 13:41:28 2006
@@ -25,7 +25,7 @@
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.repository.RepositoryItemFactory;
 import org.apache.lenya.cms.site.AbstractSiteManager;
-import org.apache.lenya.cms.site.Node;
+import org.apache.lenya.cms.site.SiteNode;
 import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteStructure;
 
@@ -48,28 +48,28 @@
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#requires(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node, org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode, org.apache.lenya.cms.site.SiteNode)
      */
-    public boolean requires(DocumentFactory map, Node dependingResource, Node requiredResource)
+    public boolean requires(DocumentFactory map, SiteNode dependingResource, SiteNode requiredResource)
             throws SiteException {
         return false;
     }
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#getRequiredResources(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode)
      */
-    public Node[] getRequiredResources(DocumentFactory map, Node resource) throws SiteException {
-        return new Node[0];
+    public SiteNode[] getRequiredResources(DocumentFactory map, SiteNode resource) throws SiteException {
+        return new SiteNode[0];
     }
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#getRequiringResources(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode)
      */
-    public Node[] getRequiringResources(DocumentFactory map, Node resource)
+    public SiteNode[] getRequiringResources(DocumentFactory map, SiteNode resource)
             throws SiteException {
-        return new Node[0];
+        return new SiteNode[0];
     }
 
     /**
@@ -252,6 +252,16 @@
 
     public boolean isVisibleInNav(Document document) throws SiteException {
         return true;
+    }
+
+    public String getPath(String area, String uuid) throws SiteException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getUUID(String area, String path) throws SiteException {
+        // TODO Auto-generated method stub
+        return null;
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java Thu Jul 27 13:41:28 2006
@@ -20,7 +20,7 @@
 import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.site.AbstractSiteManager;
-import org.apache.lenya.cms.site.Node;
+import org.apache.lenya.cms.site.SiteNode;
 import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteStructure;
 
@@ -31,9 +31,9 @@
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#requires(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node, org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode, org.apache.lenya.cms.site.SiteNode)
      */
-    public boolean requires(DocumentFactory map, Node dependingResource, Node requiredResource)
+    public boolean requires(DocumentFactory map, SiteNode dependingResource, SiteNode requiredResource)
             throws SiteException {
         // TODO Auto-generated method stub
         return false;
@@ -41,18 +41,18 @@
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#getRequiredResources(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode)
      */
-    public Node[] getRequiredResources(DocumentFactory map, Node resource) throws SiteException {
+    public SiteNode[] getRequiredResources(DocumentFactory map, SiteNode resource) throws SiteException {
         // TODO Auto-generated method stub
         return null;
     }
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#getRequiringResources(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode)
      */
-    public Node[] getRequiringResources(DocumentFactory map, Node resource)
+    public SiteNode[] getRequiringResources(DocumentFactory map, SiteNode resource)
             throws SiteException {
         // TODO Auto-generated method stub
         return null;
@@ -161,6 +161,16 @@
 
     public boolean isVisibleInNav(Document document) throws SiteException {
         return true;
+    }
+
+    public String getPath(String area, String uuid) throws SiteException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getUUID(String area, String path) throws SiteException {
+        // TODO Auto-generated method stub
+        return null;
     }
 
 }

Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/ChangeNodeID.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/ChangeNodeID.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/ChangeNodeID.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/ChangeNodeID.java Thu Jul 27 13:41:28 2006
@@ -27,6 +27,7 @@
 import org.apache.lenya.cms.publication.DocumentBuilder;
 import org.apache.lenya.cms.publication.DocumentException;
 import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.DocumentManager;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.util.DocumentSet;
@@ -150,7 +151,8 @@
     protected Document getTargetDocument() throws DocumentBuildException {
         DocumentFactory identityMap = getDocumentIdentityMap();
         String nodeId = getParameterAsString(NODE_ID);
-        Document parent = identityMap.getParent(getSourceDocument());
+        DocumentLocator parentLocator = getSourceDocument().getLocator().getParent();
+        Document parent = identityMap.get(parentLocator);
         String parentId = "";
         // if the document is at the top level, the parent is null
         if (parent != null)

Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java Thu Jul 27 13:41:28 2006
@@ -27,13 +27,11 @@
 import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.cocoon.components.ContextHelper;
-import org.apache.cocoon.environment.ObjectModelHelper;
-import org.apache.cocoon.environment.Request;
 import org.apache.lenya.cms.cocoon.source.SourceUtil;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuilder;
-import org.apache.lenya.cms.publication.DocumentIdentifier;
 import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.ResourceType;
 import org.apache.lenya.cms.site.SiteManager;
@@ -85,8 +83,6 @@
             }
         }
 
-        Request request = ObjectModelHelper.getRequest(this.objectModel);
-
         if (getLogger().isDebugEnabled()) {
             getLogger().debug("Rewriting source: [" + originalTargetDocument + "]");
             getLogger().debug("Rewriting target: [" + newTargetDocument + "]");
@@ -216,12 +212,10 @@
             selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
             builder = (DocumentBuilder) selector.select(originalTargetDocument.getPublication()
                     .getDocumentBuilderHint());
-
-            DocumentIdentifier identifier = new DocumentIdentifier(newTargetDocument.getPublication(),
-                    newTargetDocument.getArea(),
-                    newTargetDocument.getId() + childString,
-                    targetDocument.getLanguage());
-            String newTargetUrl = builder.buildCanonicalUrl(identifier);
+            
+            DocumentLocator locator = newTargetDocument.getLocator();
+            DocumentLocator child = locator.getDescendant(childString);
+            String newTargetUrl = builder.buildCanonicalUrl(child);
             return newTargetUrl;
         } catch (ServiceException e) {
             throw new RuntimeException(e);

Modified: lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/MoveSubsite.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/MoveSubsite.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/MoveSubsite.java (original)
+++ lenya/trunk/src/modules-core/sitemanagement/java/src/org/apache/lenya/cms/site/usecases/MoveSubsite.java Thu Jul 27 13:41:28 2006
@@ -31,7 +31,7 @@
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.util.DocumentHelper;
 import org.apache.lenya.cms.publication.util.DocumentSet;
-import org.apache.lenya.cms.site.Node;
+import org.apache.lenya.cms.site.SiteNode;
 import org.apache.lenya.cms.site.NodeFactory;
 import org.apache.lenya.cms.site.NodeSet;
 import org.apache.lenya.cms.site.SiteException;
@@ -233,12 +233,12 @@
             selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
             siteManager = (SiteManager) selector.select(doc.getPublication().getSiteManagerHint());
 
-            Node node = NodeFactory.getNode(doc);
-            Node[] requiredNodes = siteManager.getRequiredResources(map, node);
+            SiteNode node = NodeFactory.getNode(doc);
+            SiteNode[] requiredNodes = siteManager.getRequiredResources(map, node);
             for (int i = 0; i < requiredNodes.length; i++) {
                 Document targetDoc = map.get(getSourceDocument().getPublication(),
                         getTargetArea(),
-                        requiredNodes[i].getDocumentId(),
+                        requiredNodes[i].getPath(),
                         doc.getLanguage());
                 if (!siteManager.containsInAnyLanguage(targetDoc)) {
                     docsToCopy.add(targetDoc);
@@ -276,13 +276,13 @@
 
             NodeSet nodesToDelete = new NodeSet();
 
-            Node sourceNode = NodeFactory.getNode(doc);
-            Node[] requiredSourceNodes = siteManager.getRequiredResources(map, sourceNode);
+            SiteNode sourceNode = NodeFactory.getNode(doc);
+            SiteNode[] requiredSourceNodes = siteManager.getRequiredResources(map, sourceNode);
             for (int i = 0; i < requiredSourceNodes.length; i++) {
-                Node node = requiredSourceNodes[i];
+                SiteNode node = requiredSourceNodes[i];
                 boolean delete = true;
 
-                Document requiredDoc = map.get(node.getPublication(), node.getArea(), node.getDocumentId());
+                Document requiredDoc = map.get(node.getPublication(), node.getArea(), node.getPath());
                 String[] languages = requiredDoc.getLanguages();
                 for (int l = 0; l < languages.length; l++) {
                     Document langVersion = map.getLanguageVersion(requiredDoc, languages[l]);
@@ -291,11 +291,11 @@
                     }
                 }
                 
-                Node[] requiringNodes = siteManager.getRequiringResources(map, node);
+                SiteNode[] requiringNodes = siteManager.getRequiringResources(map, node);
                 
                 for (int j = 0; j < requiringNodes.length; j++) {
-                    Node n = requiringNodes[j];
-                    Document reqDoc = map.get(n.getPublication(), n.getArea(), n.getDocumentId());
+                    SiteNode n = requiringNodes[j];
+                    Document reqDoc = map.get(n.getPublication(), n.getArea(), n.getPath());
                     languages = reqDoc.getLanguages();
                     for (int l = 0; l < languages.length; l++) {
                         Document langVersion = map.getLanguageVersion(reqDoc, languages[l]);
@@ -309,10 +309,10 @@
                 }
             }
 
-            Node[] nodes = nodesToDelete.getNodes();
+            SiteNode[] nodes = nodesToDelete.getNodes();
             for (int i = 0; i < nodes.length; i++) {
-                Node n = nodes[i];
-                Document d = map.get(n.getPublication(), n.getArea(), n.getDocumentId());
+                SiteNode n = nodes[i];
+                Document d = map.get(n.getPublication(), n.getArea(), n.getPath());
                 String[] languages = d.getLanguages();
                 for (int l = 0; l < languages.length; l++) {
                     Document langVersion = map.getLanguageVersion(d, languages[l]);

Modified: lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree/TreeSiteManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree/TreeSiteManager.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree/TreeSiteManager.java (original)
+++ lenya/trunk/src/modules/sitetree/java/src/org/apache/lenya/cms/site/tree/TreeSiteManager.java Thu Jul 27 13:41:28 2006
@@ -30,7 +30,7 @@
 import org.apache.lenya.cms.repository.RepositoryItemFactory;
 import org.apache.lenya.cms.site.AbstractSiteManager;
 import org.apache.lenya.cms.site.Label;
-import org.apache.lenya.cms.site.Node;
+import org.apache.lenya.cms.site.SiteNode;
 import org.apache.lenya.cms.site.NodeFactory;
 import org.apache.lenya.cms.site.NodeSet;
 import org.apache.lenya.cms.site.SiteException;
@@ -86,9 +86,9 @@
      * @return A list of resources.
      * @throws SiteException if an error occurs.
      */
-    protected List getAncestors(Node node) throws SiteException {
+    protected List getAncestors(SiteNode node) throws SiteException {
         List ancestors = new ArrayList();
-        Node parent;
+        SiteNode parent;
         try {
             parent = node.getParent();
             if (parent != null) {
@@ -105,27 +105,27 @@
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#requires(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node, org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode, org.apache.lenya.cms.site.SiteNode)
      */
-    public boolean requires(DocumentFactory map, Node dependingResource, Node requiredResource)
+    public boolean requires(DocumentFactory map, SiteNode dependingResource, SiteNode requiredResource)
             throws SiteException {
         return getAncestors(dependingResource).contains(requiredResource);
     }
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#getRequiredResources(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode)
      */
-    public Node[] getRequiredResources(DocumentFactory map, Node resource) throws SiteException {
+    public SiteNode[] getRequiredResources(DocumentFactory map, SiteNode resource) throws SiteException {
         List ancestors = getAncestors(resource);
-        return (Node[]) ancestors.toArray(new Node[ancestors.size()]);
+        return (SiteNode[]) ancestors.toArray(new SiteNode[ancestors.size()]);
     }
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#getRequiringResources(org.apache.lenya.cms.publication.DocumentFactory,
-     *      org.apache.lenya.cms.site.Node)
+     *      org.apache.lenya.cms.site.SiteNode)
      */
-    public Node[] getRequiringResources(DocumentFactory map, Node resource)
+    public SiteNode[] getRequiringResources(DocumentFactory map, SiteNode resource)
             throws SiteException {
 
         if (getLogger().isDebugEnabled()) {
@@ -137,7 +137,7 @@
         String area = resource.getArea();
         SiteTree tree = getTree(map, pub, area);
 
-        SiteTreeNode node = tree.getNode(resource.getDocumentId());
+        SiteTreeNode node = tree.getNode(resource.getPath());
         if (node != null) {
             List preOrder = node.preOrder();
 
@@ -146,7 +146,7 @@
 
             for (int i = 0; i < preOrder.size(); i++) {
                 SiteTreeNode descendant = (SiteTreeNode) preOrder.get(i);
-                Node descendantNode = NodeFactory.getNode(pub, area, descendant.getAbsoluteId());
+                SiteNode descendantNode = NodeFactory.getNode(pub, area, descendant.getAbsoluteId());
                 nodes.add(descendantNode);
             }
 
@@ -492,5 +492,13 @@
     public boolean isVisibleInNav(Document document) throws SiteException {
         SiteTree tree = getTree(document);
         return tree.isVisibleInNav(document.getId());
+    }
+
+    public String getPath(String area, String uuid) throws SiteException {
+        return uuid;
+    }
+
+    public String getUUID(String area, String path) throws SiteException {
+        return path;
     }
 }

Modified: lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java (original)
+++ lenya/trunk/src/modules/webdav/java/src/org/apache/lenya/cms/usecases/webdav/Propfind.java Thu Jul 27 13:41:28 2006
@@ -25,7 +25,7 @@
 import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuilder;
-import org.apache.lenya.cms.publication.DocumentIdentifier;
+import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationException;
 import org.apache.lenya.cms.publication.PublicationUtil;
@@ -127,8 +127,8 @@
             // get assets if we are currently looking at a document
             if (!request.equals("/" + _publication.getId() + "/authoring/")) {
                 String url = request.substring(0, request.length() - 1) + ".html";
-                DocumentIdentifier identifier = docBuilder.getIdentitfier(url);
-                Document currentDoc = getDocumentIdentityMap().get(identifier);
+                DocumentLocator locator = docBuilder.getLocator(url);
+                Document currentDoc = getDocumentIdentityMap().get(locator);
                 if (currentDoc.exists()) {
                     resourcesManager = (ResourcesManager) this.manager.lookup(ResourcesManager.ROLE);
                     Resource[] resources = resourcesManager.getResources(currentDoc);

Modified: lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java (original)
+++ lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java Thu Jul 27 13:41:28 2006
@@ -26,8 +26,8 @@
 import org.apache.lenya.cms.publication.PublicationException;
 import org.apache.lenya.cms.publication.util.DocumentSet;
 import org.apache.lenya.cms.publication.util.DocumentVisitor;
-import org.apache.lenya.cms.site.Node;
 import org.apache.lenya.cms.site.NodeFactory;
+import org.apache.lenya.cms.site.SiteNode;
 import org.apache.lenya.cms.site.SiteUtil;
 import org.apache.lenya.cms.site.usecases.AssetUtil;
 import org.apache.lenya.cms.usecase.DocumentUsecase;
@@ -76,7 +76,7 @@
             DocumentFactory map = getSourceDocument().getIdentityMap();
             Document liveDoc = map.getAreaVersion(getSourceDocument(), Publication.LIVE_AREA);
             DocumentSet subSite = SiteUtil.getSubSite(this.manager, liveDoc);
-            Node node = NodeFactory.getNode(liveDoc);
+            SiteNode node = NodeFactory.getNode(liveDoc);
             subSite.removeAll(SiteUtil.getExistingDocuments(map, node));
 
             if (!subSite.isEmpty()) {

Modified: lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java?rev=426230&r1=426229&r2=426230&view=diff
==============================================================================
--- lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java (original)
+++ lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java Thu Jul 27 13:41:28 2006
@@ -33,13 +33,14 @@
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentFactory;
+import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.DocumentManager;
 import org.apache.lenya.cms.publication.Proxy;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationException;
 import org.apache.lenya.cms.publication.util.DocumentSet;
 import org.apache.lenya.cms.publication.util.DocumentVisitor;
-import org.apache.lenya.cms.site.Node;
+import org.apache.lenya.cms.site.SiteNode;
 import org.apache.lenya.cms.site.NodeFactory;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.site.SiteUtil;
@@ -160,8 +161,8 @@
                 selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
                 siteManager = (SiteManager) selector.select(publication.getSiteManagerHint());
 
-                Node liveNode = NodeFactory.getNode(liveDocument);
-                Node[] requiredNodes = siteManager.getRequiredResources(map, liveNode);
+                SiteNode liveNode = NodeFactory.getNode(liveDocument);
+                SiteNode[] requiredNodes = siteManager.getRequiredResources(map, liveNode);
 
                 for (int i = 0; i < requiredNodes.length; i++) {
 
@@ -169,7 +170,7 @@
                     if (liveDocs.isEmpty()) {
                         Document authoringDoc = map.get(requiredNodes[i].getPublication(),
                                 Publication.AUTHORING_AREA,
-                                requiredNodes[i].getDocumentId());
+                                requiredNodes[i].getPath());
                         if (authoringDoc.exists()) {
                             missingDocuments.add(authoringDoc);
                         } else {
@@ -348,7 +349,8 @@
         }
 
         try {
-            Document parent = document.getIdentityMap().getParent(document);
+            DocumentLocator parentLocator = document.getLocator().getParent();
+            Document parent = document.getIdentityMap().get(parentLocator);
             boolean publish = true;
             if (parent != null) {
                 Document liveParent = parent.getIdentityMap().getAreaVersion(parent,



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