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 2005/03/31 09:27:18 UTC

svn commit: r159567 [2/2] - in lenya/trunk/src: java/org/apache/lenya/ java/org/apache/lenya/cms/ac/ java/org/apache/lenya/cms/ac/cocoon/ java/org/apache/lenya/cms/ac/workflow/ java/org/apache/lenya/cms/ant/ java/org/apache/lenya/cms/cocoon/acting/ java/org/apache/lenya/cms/cocoon/components/modules/input/ java/org/apache/lenya/cms/cocoon/flow/ java/org/apache/lenya/cms/cocoon/generation/ java/org/apache/lenya/cms/cocoon/scheduler/ java/org/apache/lenya/cms/cocoon/source/ java/org/apache/lenya/cms/cocoon/transformation/ java/org/apache/lenya/cms/metadata/dublincore/ java/org/apache/lenya/cms/publication/ java/org/apache/lenya/cms/publication/task/ java/org/apache/lenya/cms/publication/util/ java/org/apache/lenya/cms/scheduler/ java/org/apache/lenya/cms/site/ java/org/apache/lenya/cms/site/topicmap/ java/org/apache/lenya/cms/site/usecases/ java/org/apache/lenya/cms/task/ java/org/apache/lenya/cms/usecase/ webapp/WEB-INF/ webapp/lenya/pubs/blog/ webapp/lenya/pubs/default/config/ webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/PublicationImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/PublicationImpl.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/PublicationImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/PublicationImpl.java Wed Mar 30 23:27:09 2005
@@ -28,11 +28,7 @@
 
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
-import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.lenya.cms.site.SiteException;
-import org.apache.lenya.cms.site.SiteManager;
-import org.apache.lenya.cms.site.tree.TreeSiteManager;
 
 /**
  * A publication.
@@ -69,8 +65,8 @@
     private static final String ATTRIBUTE_ID = "id";
     private static final String ELEMENT_PATH_MAPPER = "path-mapper";
     private static final String ELEMENT_DOCUMENT_BUILDER = "document-builder";
-    private static final String ELEMENT_SITE_STRUCTURE = "site-structure";
-    private static final String ATTRIBUTE_TYPE = "type";
+    private static final String ELEMENT_SITE_MANAGER = "site-manager";
+    private static final String ATTRIBUTE_NAME = "name";
     private static final String ATTRIBUTE_SUPPORTS_TEMPLATING = "supports-templating";
     private static final String LANGUAGES = "languages";
     private static final String DEFAULT_LANGUAGE_ATTR = "default";
@@ -117,7 +113,6 @@
         Configuration config;
 
         String pathMapperClassName = null;
-        String documentBuilderClassName = null;
 
         try {
             config = builder.buildFromFile(configFile);
@@ -131,17 +126,11 @@
                         + pathMapperClassName + "]", e);
             }
 
-            try {
-                Configuration documentBuilderConfiguration = config
-                        .getChild(ELEMENT_DOCUMENT_BUILDER, false);
-                if (documentBuilderConfiguration != null) {
-                    documentBuilderClassName = documentBuilderConfiguration.getValue();
-                    Class documentBuilderClass = Class.forName(documentBuilderClassName);
-                    this.documentBuilder = (DocumentBuilder) documentBuilderClass.newInstance();
-                }
-            } catch (final ClassNotFoundException e) {
-                throw new PublicationException("Cannot instantiate document builder: ["
-                        + pathMapperClassName + "]", e);
+            Configuration documentBuilderConfiguration = config.getChild(ELEMENT_DOCUMENT_BUILDER,
+                    false);
+            if (documentBuilderConfiguration != null) {
+                this.documentBuilderHint = documentBuilderConfiguration
+                        .getAttribute(ATTRIBUTE_NAME);
             }
 
             Configuration[] _languages = config.getChild(LANGUAGES).getChildren();
@@ -154,14 +143,10 @@
                 }
             }
 
-            String _siteManagerClass = TreeSiteManager.class.getName();
-            Configuration siteStructureConfiguration = config.getChild(ELEMENT_SITE_STRUCTURE,
-                    false);
-            if (siteStructureConfiguration != null) {
-                _siteManagerClass = siteStructureConfiguration.getAttribute(ATTRIBUTE_TYPE);
+            Configuration siteManagerConfiguration = config.getChild(ELEMENT_SITE_MANAGER, false);
+            if (siteManagerConfiguration != null) {
+                this.siteManagerName = siteManagerConfiguration.getAttribute(ATTRIBUTE_NAME);
             }
-            Class klass = Class.forName(_siteManagerClass);
-            this.siteManagerClass = klass;
 
             Configuration[] proxyConfigs = config.getChildren(ELEMENT_PROXY);
             for (int i = 0; i < proxyConfigs.length; i++) {
@@ -315,36 +300,15 @@
         return this.breadcrumbprefix;
     }
 
-    private DocumentBuilder documentBuilder;
+    private String documentBuilderHint;
 
     /**
      * Returns the document builder of this instance.
      * @return A document builder.
      */
-    public DocumentBuilder getDocumentBuilder() {
+    public String getDocumentBuilderHint() {
         loadConfiguration();
-        if (this.documentBuilder == null) {
-            throw new IllegalStateException(
-                    "The document builder was not defined in publication.xconf!");
-        }
-        ContainerUtil.enableLogging(this.documentBuilder, getLogger());
-        return this.documentBuilder;
-    }
-
-    /**
-     * Creates a version of the document object in another area.
-     * @param document The document to clone.
-     * @param area The destination area.
-     * @return A document.
-     * @throws PublicationException when an error occurs.
-     */
-    public Document getAreaVersion(Document document, String area) throws PublicationException {
-        DocumentBuilder builder = getDocumentBuilder();
-        String url = builder
-                .buildCanonicalUrl(this, area, document.getId(), document.getLanguage());
-        Document destinationDocument = builder.buildDocument(document.getIdentityMap(), document
-                .getPublication(), url);
-        return destinationDocument;
+        return this.documentBuilderHint;
     }
 
     /**
@@ -400,22 +364,7 @@
         return proxy;
     }
 
-    private Class siteManagerClass;
-
-    /**
-     * @see org.apache.lenya.cms.publication.Publication#getSiteManager()
-     */
-    public SiteManager getSiteManager() throws SiteException {
-        loadConfiguration();
-        SiteManager manager;
-        try {
-            manager = (SiteManager) this.siteManagerClass.newInstance();
-            ContainerUtil.enableLogging(manager, getLogger());
-        } catch (Exception e) {
-            throw new SiteException(e);
-        }
-        return manager;
-    }
+    private String siteManagerName;
 
     /**
      * @see org.apache.lenya.cms.publication.Publication#exists()
@@ -443,5 +392,13 @@
     public boolean supportsTemplating() {
         loadConfiguration();
         return this.supportsTemplating;
+    }
+
+    /**
+     * @see org.apache.lenya.cms.publication.Publication#getSiteManagerHint()
+     */
+    public String getSiteManagerHint() {
+        loadConfiguration();
+        return this.siteManagerName;
     }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java Wed Mar 30 23:27:09 2005
@@ -28,15 +28,12 @@
 import org.apache.avalon.excalibur.io.FileUtil;
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.avalon.framework.parameters.ParameterException;
-import org.apache.avalon.framework.service.ServiceException;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationFactory;
 import org.apache.lenya.cms.publication.ResourcesManager;
-import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.site.tree.SiteTree;
-import org.apache.lenya.cms.site.tree.TreeSiteManager;
 import org.apache.lenya.cms.task.AbstractTask;
 import org.apache.lenya.cms.task.ExecutionException;
 import org.apache.lenya.cms.task.Task;
@@ -81,7 +78,7 @@
      */
     protected DocumentIdentityMap getIdentityMap() throws ExecutionException {
         if (this.map == null) {
-            this.map = new DocumentIdentityMap();
+            this.map = new DocumentIdentityMap(getServiceManager());
         }
         return this.map;
     }
@@ -236,20 +233,17 @@
         return roles;
     }
 
-    protected SiteTree getSiteTree(String area) {
-        SiteTree tree;
+    /**
+     * @param area The area.
+     * @return A site tree.
+     * @deprecated Use generic site manager methods instead.
+     */
+    protected SiteTree getSiteTree1(String area) {
         try {
-            SiteManager manager = getPublication().getSiteManager();
-            if (!(manager instanceof TreeSiteManager)) {
-                throw new RuntimeException("Only supported for site trees.");
-            }
-            tree = ((TreeSiteManager) manager).getTree(getIdentityMap(), getPublication(), area);
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
+            return (SiteTree) getIdentityMap().getSiteStructure(getPublication(), area);
+        } catch (ExecutionException e) {
             throw new RuntimeException(e);
         }
-        return tree;
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/CollectionImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/CollectionImpl.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/util/CollectionImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/util/CollectionImpl.java Wed Mar 30 23:27:09 2005
@@ -26,6 +26,7 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.lenya.cms.publication.DefaultDocument;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuildException;
@@ -48,19 +49,21 @@
 
     /**
      * Ctor.
+     * @param manager The service manager.
      * @param map A document identity map.
      * @param publication The publication.
      * @param id The document ID.
      * @param area The area the document belongs to.
      * @throws DocumentException when something went wrong.
      */
-    public CollectionImpl(DocumentIdentityMap map, Publication publication, String id, String area)
-            throws DocumentException {
-        super(map, publication, id, area);
+    public CollectionImpl(ServiceManager manager, DocumentIdentityMap map, Publication publication,
+            String id, String area) throws DocumentException {
+        super(manager, map, publication, id, area);
     }
 
     /**
      * Ctor.
+     * @param manager The service manager.
      * @param map A document identity map.
      * @param publication The publication.
      * @param id The document ID.
@@ -68,16 +71,15 @@
      * @param language The language of the document.
      * @throws DocumentException when something went wrong.
      */
-    public CollectionImpl(DocumentIdentityMap map, Publication publication, String id, String area,
-            String language) throws DocumentException {
-        super(map, publication, id, area, language);
+    public CollectionImpl(ServiceManager manager, DocumentIdentityMap map, Publication publication,
+            String id, String area, String language) throws DocumentException {
+        super(manager, map, publication, id, area, language);
     }
 
     private List documentsList = new ArrayList();
 
     /**
-     * Returns the list that holds the documents. Use this method to invoke lazy
-     * loading.
+     * Returns the list that holds the documents. Use this method to invoke lazy loading.
      * @return A list.
      * @throws DocumentException when something went wrong.
      */

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java?view=diff&r1=159566&r2=159567
==============================================================================
--- 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 Wed Mar 30 23:27:09 2005
@@ -24,6 +24,7 @@
 import java.util.Map;
 
 import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
@@ -51,10 +52,10 @@
 
     /**
      * Ctor.
-     * 
+     * @param manager The service manager.
      * @param _objectModel The Cocoon object model.
      */
-    public DocumentHelper(Map _objectModel) {
+    public DocumentHelper(ServiceManager manager, Map _objectModel) {
         this.objectModel = _objectModel;
         try {
             PublicationFactory factory = PublicationFactory.getInstance(new ConsoleLogger());
@@ -62,7 +63,7 @@
         } catch (PublicationException e) {
             throw new RuntimeException(e);
         }
-        this.identityMap = new DocumentIdentityMap();
+        this.identityMap = new DocumentIdentityMap(manager);
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentSet.java Wed Mar 30 23:27:09 2005
@@ -20,13 +20,14 @@
 package org.apache.lenya.cms.publication.util;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.PublicationException;
 
 /**
- * A set of documents.
+ * An ordered set of documents without duplicates.
  */
 public class DocumentSet {
 
@@ -105,6 +106,20 @@
         assert resource != null;
         assert getList().contains(resource);
         getList().remove(resource);
+    }
+    
+    /**
+     * Removes all documents.
+     */
+    public void clear() {
+        getList().clear();
+    }
+    
+    /**
+     * Reverses the document order.
+     */
+    public void reverse() {
+        Collections.reverse(getList());
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/util/XlinkCollection.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/util/XlinkCollection.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/util/XlinkCollection.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/util/XlinkCollection.java Wed Mar 30 23:27:09 2005
@@ -21,6 +21,7 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentException;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
@@ -38,19 +39,21 @@
 
     /**
      * Ctor.
+     * @param manager The service manager.
      * @param map A document identity map.
      * @param publication The publication.
      * @param id The document ID.
      * @param area The area the document belongs to.
      * @throws DocumentException when something went wrong.
      */
-    public XlinkCollection(DocumentIdentityMap map, Publication publication, String id, String area)
-            throws DocumentException {
-        super(map, publication, id, area);
+    public XlinkCollection(ServiceManager manager, DocumentIdentityMap map,
+            Publication publication, String id, String area) throws DocumentException {
+        super(manager, map, publication, id, area);
     }
 
     /**
      * Ctor.
+     * @param manager The service manager.
      * @param map A document identity map.
      * @param publication The publication.
      * @param id The document ID.
@@ -58,9 +61,10 @@
      * @param language The language of the document.
      * @throws DocumentException when something went wrong.
      */
-    public XlinkCollection(DocumentIdentityMap map, Publication publication, String id,
-            String area, String language) throws DocumentException {
-        super(map, publication, id, area, language);
+    public XlinkCollection(ServiceManager manager, DocumentIdentityMap map,
+            Publication publication, String id, String area, String language)
+            throws DocumentException {
+        super(manager, map, publication, id, area, language);
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/scheduler/LoadQuartzServlet.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/scheduler/LoadQuartzServlet.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/scheduler/LoadQuartzServlet.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/scheduler/LoadQuartzServlet.java Wed Mar 30 23:27:09 2005
@@ -274,7 +274,7 @@
                         getServletContextDirectory().getAbsolutePath());
 
                 String documentUrl = (String) schedulerParameters.get(PARAMETER_DOCUMENT_URL);
-                DocumentIdentityMap map = new DocumentIdentityMap();
+                DocumentIdentityMap map = new DocumentIdentityMap(null);
                 org.apache.lenya.cms.publication.Document document = map.getFactory()
                         .getFromURL(publication, documentUrl);
                 deleteDocumentJobs(document);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/AbstractSiteManager.java Wed Mar 30 23:27:09 2005
@@ -17,14 +17,20 @@
 
 package org.apache.lenya.cms.site;
 
+import java.util.Arrays;
+import java.util.Comparator;
+
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.util.DocumentSet;
 
 /**
  * Abstract base class for site managers.
  * 
  * @version $Id$
  */
-public abstract class AbstractSiteManager extends AbstractLogEnabled implements SiteManager {
+public abstract class AbstractSiteManager extends AbstractLogEnabled implements SiteManager,
+        Comparator {
 
     /**
      * Ctor.
@@ -32,4 +38,117 @@
     public AbstractSiteManager() {
     }
 
+    /**
+     * @see org.apache.lenya.cms.site.SiteManager#sortAscending(org.apache.lenya.cms.publication.util.DocumentSet)
+     */
+    public void sortAscending(DocumentSet set) throws SiteException {
+        if (!set.isEmpty()) {
+
+            if (!check(set)) {
+                throw new SiteException("The dependence relation is not a strict partial order!");
+            }
+
+            Document[] documents = set.getDocuments();
+            Arrays.sort(documents, this);
+            set.clear();
+            for (int i = 0; i < documents.length; i++) {
+                set.add(documents[i]);
+            }
+        }
+    }
+
+    /**
+     * Checks if the dependence relation is a strict partial order.
+     * @param set The document set to check.
+     * @return A boolean value.
+     * @throws SiteException when something went wrong.
+     */
+    protected boolean check(DocumentSet set) throws SiteException {
+        boolean isStrictPartialOrder = isIrreflexive(set) && isAntisymmetric(set)
+                && isTransitive(set);
+        return isStrictPartialOrder;
+    }
+
+    /**
+     * Checks if the dependence relation is antisymmetric.
+     * @param set The document set to check.
+     * @return A boolean value.
+     * @throws SiteException when something went wrong.
+     */
+    protected boolean isAntisymmetric(DocumentSet set) throws SiteException {
+        Document[] resources = set.getDocuments();
+        boolean isAntisymmetric = true;
+        for (int i = 0; i < resources.length; i++) {
+            for (int j = i + 1; j < resources.length; j++) {
+                if (requires(resources[i], resources[j]) && requires(resources[j], resources[i])
+                        && !(resources[i] == resources[j])) {
+                    isAntisymmetric = false;
+                }
+            }
+        }
+        return isAntisymmetric;
+    }
+
+    /**
+     * Checks if the dependence relation is transitive.
+     * @param set The document set to check.
+     * @return A boolean value.
+     * @throws SiteException when something went wrong.
+     */
+    protected boolean isTransitive(DocumentSet set) throws SiteException {
+        Document[] resources = set.getDocuments();
+        boolean isTransitive = true;
+        for (int i = 0; i < resources.length; i++) {
+            for (int j = i + 1; j < resources.length; j++) {
+                for (int k = j + 1; k < resources.length; k++) {
+                    if (requires(resources[i], resources[j])
+                            && requires(resources[j], resources[k])
+                            && !requires(resources[i], resources[k])) {
+                        isTransitive = false;
+                    }
+                }
+            }
+        }
+        return isTransitive;
+    }
+
+    /**
+     * Checks if the dependence relation is irreflexive.
+     * @param set The document set.
+     * @return A boolean value
+     * @throws SiteException
+     */
+    protected boolean isIrreflexive(DocumentSet set) throws SiteException {
+        Document[] resources = set.getDocuments();
+        boolean isIrreflexive = true;
+        for (int i = 0; i < resources.length; i++) {
+            if (requires(resources[i], resources[i])) {
+                isIrreflexive = false;
+            }
+        }
+        return isIrreflexive;
+    }
+
+    /**
+     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+     */
+    public int compare(Object arg0, Object arg1) {
+        int result = 0;
+        if (arg0 instanceof Document && arg1 instanceof Document) {
+            Document doc1 = (Document) arg0;
+            Document doc2 = (Document) arg1;
+            
+            try {
+                if (requires(doc1, doc2)) {
+                    result = 1;
+                }
+                if (requires(doc2, doc1)) {
+                    result = -1;
+                }
+            } catch (SiteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return result;
+    }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteManager.java Wed Mar 30 23:27:09 2005
@@ -20,6 +20,7 @@
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.publication.util.DocumentSet;
 
 /**
  * <p>
@@ -45,7 +46,7 @@
     /**
      * The Avalon role.
      */
-    String ROLE = SiteManager.ROLE;
+    String ROLE = SiteManager.class.getName();
 
     /**
      * Checks if a resource requires another one.
@@ -138,5 +139,12 @@
      */
     Document[] getDocuments(DocumentIdentityMap identityMap, Publication publication, String area)
             throws SiteException;
-
+    
+    /**
+     * Sorts a set of documents using the "requires" relation.
+     * @param set The set.
+     * @throws SiteException if an error occurs.
+     */
+    void sortAscending(DocumentSet set) throws SiteException;
+    
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/topicmap/TopicMapSiteManager.java?view=diff&r1=159566&r2=159567
==============================================================================
--- 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 Wed Mar 30 23:27:09 2005
@@ -19,13 +19,13 @@
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.site.AbstractSiteManager;
 import org.apache.lenya.cms.site.SiteException;
-import org.apache.lenya.cms.site.SiteManager;
 
 /**
  * Site manager to support topic maps.
  */
-public class TopicMapSiteManager implements SiteManager {
+public class TopicMapSiteManager extends AbstractSiteManager {
 
     /**
      * @see org.apache.lenya.cms.site.SiteManager#requires(org.apache.lenya.cms.publication.Document,

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeLabel.java Wed Mar 30 23:27:09 2005
@@ -16,6 +16,7 @@
  */
 package org.apache.lenya.cms.site.usecases;
 
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.site.SiteManager;
@@ -53,14 +54,27 @@
     protected void initParameters() {
         super.initParameters();
         Document document = getSourceDocument();
+
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
         try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
+
             if (document != null && document.exists()) {
                 setParameter(DOCUMENT_ID, document.getId());
-                SiteManager _manager = document.getPublication().getSiteManager();
-                setParameter(LABEL, _manager.getLabel(document));
+                setParameter(LABEL, siteManager.getLabel(document));
             }
         } catch (Exception e) {
             throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
         }
     }
 
@@ -71,9 +85,25 @@
         super.doExecute();
 
         Document document = getSourceDocument();
-        SiteManager _manager = document.getPublication().getSiteManager();
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
+
+            String label = getParameterAsString(LABEL);
+            siteManager.setLabel(document, label);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
+        }
 
-        String label = getParameterAsString(LABEL);
-        _manager.setLabel(document, label);
     }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java Wed Mar 30 23:27:09 2005
@@ -20,6 +20,7 @@
 import java.util.GregorianCalendar;
 import java.util.Map;
 
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
@@ -85,21 +86,29 @@
         super.doExecute();
 
         Document document = createDocument();
-        Publication publication = document.getPublication();
         DocumentManager documentManager = null;
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
         try {
             documentManager = (DocumentManager) this.manager.lookup(DocumentManager.ROLE);
             documentManager.add(document);
-        }
-        finally {
+
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
+            siteManager.setLabel(document, getParameterAsString(DublinCore.ELEMENT_TITLE));
+        } finally {
             if (documentManager != null) {
                 this.manager.release(documentManager);
             }
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
         }
 
-        SiteManager _manager = publication.getSiteManager();
-        _manager.setLabel(document, getParameterAsString(DublinCore.ELEMENT_TITLE));
-
         setMetaData(document);
         setTargetURL(document.getCanonicalWebappURL());
     }
@@ -161,8 +170,8 @@
     }
 
     /**
-     * @return The source document or <code>null</code> if the usecase was not
-     *         invoked on a document.
+     * @return The source document or <code>null</code> if the usecase was not invoked on a
+     *         document.
      */
     protected Document getSourceDocument() {
         Document document = null;
@@ -199,4 +208,4 @@
         }
         return this.publication;
     }
-}
+}
\ No newline at end of file

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java Wed Mar 30 23:27:09 2005
@@ -16,12 +16,12 @@
  */
 package org.apache.lenya.cms.site.usecases;
 
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.DocumentManager;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.util.DocumentSet;
-import org.apache.lenya.cms.publication.util.UniqueDocumentId;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.usecase.DocumentUsecase;
 
@@ -48,8 +48,24 @@
 
         Document document = getSourceDocument();
         DocumentIdentityMap identityMap = getUnitOfWork().getIdentityMap();
-        SiteManager manager = document.getPublication().getSiteManager();
-        DocumentSet set = new DocumentSet(manager.getRequiringResources(document));
+
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        DocumentSet set;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
+            set = new DocumentSet(siteManager.getRequiringResources(document));
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
+        }
+
         set.add(document);
         Document[] documents = set.getDocuments();
         for (int i = 0; i < documents.length; i++) {
@@ -70,17 +86,12 @@
         Document source = getSourceDocument();
         DocumentIdentityMap identityMap = source.getIdentityMap();
 
-        String desiredId = "/" + source.getName();
-        UniqueDocumentId helper = new UniqueDocumentId();
-        String availableId = helper.computeUniqueDocumentId(source.getPublication(),
-                Publication.TRASH_AREA,
-                desiredId);
-        Document target = identityMap.getFactory().get(source.getPublication(),
-                Publication.TRASH_AREA,
-                availableId);
         DocumentManager documentManager = null;
+        Document target;
         try {
             documentManager = (DocumentManager) this.manager.lookup(DocumentManager.ROLE);
+            target = identityMap.getFactory().getAreaVersion(source, Publication.TRASH_AREA);
+            target = documentManager.getAvailableDocument(target);
             documentManager.moveAll(source, target);
         } finally {
             if (documentManager != null) {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/EmptyTrash.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/EmptyTrash.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/EmptyTrash.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/EmptyTrash.java Wed Mar 30 23:27:09 2005
@@ -18,6 +18,8 @@
 
 import java.util.Arrays;
 
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 import org.apache.lenya.cms.publication.DocumentManager;
@@ -81,10 +83,27 @@
     protected Document[] getTrashDocuments() throws PublicationException, SiteException {
         PublicationFactory factory = PublicationFactory.getInstance(getLogger());
         Publication publication = factory.getPublication(this.manager, getSourceURL());
-        DocumentIdentityMap identityMap = new DocumentIdentityMap();
+        DocumentIdentityMap identityMap = new DocumentIdentityMap(this.manager);
+        Document[] documents;
+        
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(publication
+                    .getSiteManagerHint());
+            documents = siteManager.getDocuments(identityMap, publication, Publication.TRASH_AREA);
+        } catch (ServiceException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
+        }
         
-        SiteManager siteManager = publication.getSiteManager();
-        Document[] documents = siteManager.getDocuments(identityMap, publication, Publication.TRASH_AREA);
         return documents;
     }
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java Wed Mar 30 23:27:09 2005
@@ -27,6 +27,7 @@
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
+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;
@@ -40,7 +41,6 @@
 import org.apache.lenya.cms.publication.DocumentType;
 import org.apache.lenya.cms.publication.DocumentTypeResolver;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.xml.DocumentHelper;
 import org.apache.xpath.XPathAPI;
@@ -49,8 +49,7 @@
 import org.w3c.dom.NodeList;
 
 /**
- * Rewrite the links in a publication. This is used after renaming / moving a
- * document.
+ * Rewrite the links in a publication. This is used after renaming / moving a document.
  * 
  * @version $Id:$
  */
@@ -73,13 +72,23 @@
         String area = originalTargetDocument.getArea();
         DocumentIdentityMap identityMap = originalTargetDocument.getIdentityMap();
 
-        SiteManager siteManager;
         Document[] documents;
+
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
         try {
-            siteManager = publication.getSiteManager();
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(publication.getSiteManagerHint());
             documents = siteManager.getDocuments(identityMap, publication, area);
-        } catch (SiteException e) {
+        } catch (Exception e) {
             throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
         }
 
         DocumentFactory docFactory = identityMap.getFactory();
@@ -182,9 +191,8 @@
     }
 
     /**
-     * Checks if targetDocument refers to originalTargetDocument, to one of its
-     * language versions, to one of its descendants, or to a language version of
-     * one of the descendants.
+     * Checks if targetDocument refers to originalTargetDocument, to one of its language versions,
+     * to one of its descendants, or to a language version of one of the descendants.
      * @param targetDocument The target document.
      * @param originalTargetDocument The original target document.
      * @return A boolean value.
@@ -208,13 +216,28 @@
         String targetId = targetDocument.getId();
         String childString = targetId.substring(originalId.length());
 
-        DocumentBuilder builder = targetDocument.getPublication().getDocumentBuilder();
-        String newTargetUrl = builder.buildCanonicalUrl(newTargetDocument.getPublication(),
-                newTargetDocument.getArea(),
-                newTargetDocument.getId() + childString,
-                targetDocument.getLanguage());
-
-        return newTargetUrl;
+        ServiceSelector selector = null;
+        DocumentBuilder builder = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
+            builder = (DocumentBuilder) selector.select(originalTargetDocument.getPublication()
+                    .getDocumentBuilderHint());
+
+            String newTargetUrl = builder.buildCanonicalUrl(newTargetDocument.getPublication(),
+                    newTargetDocument.getArea(),
+                    newTargetDocument.getId() + childString,
+                    targetDocument.getLanguage());
+            return newTargetUrl;
+        } catch (ServiceException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (builder != null) {
+                    selector.release(builder);
+                }
+                this.manager.release(selector);
+            }
+        }
     }
 
     private ServiceManager manager;

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Nudge.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Nudge.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Nudge.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Nudge.java Wed Mar 30 23:27:09 2005
@@ -16,6 +16,7 @@
  */
 package org.apache.lenya.cms.site.usecases;
 
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.site.tree.SiteTree;
@@ -45,30 +46,45 @@
         }
 
         Publication publication = getSourceDocument().getPublication();
-        SiteManager manager = publication.getSiteManager();
-        if (manager instanceof TreeSiteManager) {
 
-            TreeSiteManager treeManager = (TreeSiteManager) manager;
-            SiteTree tree = treeManager.getTree(getSourceDocument().getIdentityMap(),
-                    publication,
-                    getSourceDocument().getArea());
-            SiteTreeNode node = tree.getNode(getSourceDocument().getId());
-            SiteTreeNode[] siblings = null;
-
-            String direction = getParameterAsString(DIRECTION);
-            if (direction.equals(UP)) {
-                siblings = node.getPrecedingSiblings();
-            } else if (direction.equals(DOWN)) {
-                siblings = node.getNextSiblings();
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(publication.getSiteManagerHint());
+            if (siteManager instanceof TreeSiteManager) {
+
+                TreeSiteManager treeManager = (TreeSiteManager) siteManager;
+                SiteTree tree = treeManager.getTree(getSourceDocument().getIdentityMap(),
+                        publication,
+                        getSourceDocument().getArea());
+                SiteTreeNode node = tree.getNode(getSourceDocument().getId());
+                SiteTreeNode[] siblings = null;
+
+                String direction = getParameterAsString(DIRECTION);
+                if (direction.equals(UP)) {
+                    siblings = node.getPrecedingSiblings();
+                } else if (direction.equals(DOWN)) {
+                    siblings = node.getNextSiblings();
+                } else {
+                    addErrorMessage("The direction [" + direction + "] is not supported!");
+                }
+
+                if (siblings != null && siblings.length == 0) {
+                    addErrorMessage("Cannot move the node in this direction.");
+                }
             } else {
-                addErrorMessage("The direction [" + direction + "] is not supported!");
+                addErrorMessage("This operation can only be invoked on site trees.");
             }
-
-            if (siblings != null && siblings.length == 0) {
-                addErrorMessage("Cannot move the node in this direction.");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
             }
-        } else {
-            addErrorMessage("This operation can only be invoked on site trees.");
         }
     }
 
@@ -79,21 +95,35 @@
         super.doExecute();
 
         Publication publication = getSourceDocument().getPublication();
-        SiteManager manager = publication.getSiteManager();
-        if (manager instanceof TreeSiteManager) {
-
-            TreeSiteManager treeManager = (TreeSiteManager) manager;
-            SiteTree tree = treeManager.getTree(getSourceDocument().getIdentityMap(),
-                    publication,
-                    getSourceDocument().getArea());
-
-            String direction = getParameterAsString(DIRECTION);
-            if (direction.equals(UP)) {
-                tree.moveUp(getSourceDocument().getId());
-            } else if (direction.equals(DOWN)) {
-                tree.moveDown(getSourceDocument().getId());
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(publication.getSiteManagerHint());
+            if (siteManager instanceof TreeSiteManager) {
+
+                TreeSiteManager treeManager = (TreeSiteManager) siteManager;
+                SiteTree tree = treeManager.getTree(getSourceDocument().getIdentityMap(),
+                        publication,
+                        getSourceDocument().getArea());
+
+                String direction = getParameterAsString(DIRECTION);
+                if (direction.equals(UP)) {
+                    tree.moveUp(getSourceDocument().getId());
+                } else if (direction.equals(DOWN)) {
+                    tree.moveDown(getSourceDocument().getId());
+                }
+                tree.save();
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
             }
-            tree.save();
         }
 
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java Wed Mar 30 23:27:09 2005
@@ -192,7 +192,7 @@
             log.debug("Workflow event: [" + eventName + "]");
             // check for workflow instance first (task can initialize the workflow history)
             try {
-                DocumentIdentityMap map = new DocumentIdentityMap();
+                DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
                 this.document = map.getFactory().getFromURL(publication, webappUrl);
             } catch (DocumentBuildException e) {
                 throw new ExecutionException(e);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/usecase/UnitOfWorkImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/usecase/UnitOfWorkImpl.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/usecase/UnitOfWorkImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/usecase/UnitOfWorkImpl.java Wed Mar 30 23:27:09 2005
@@ -17,6 +17,9 @@
 package org.apache.lenya.cms.usecase;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
 
 /**
@@ -24,7 +27,7 @@
  * 
  * @version $Id$
  */
-public class UnitOfWorkImpl extends AbstractLogEnabled implements UnitOfWork {
+public class UnitOfWorkImpl extends AbstractLogEnabled implements UnitOfWork, Serviceable {
 
     /**
      * Ctor.
@@ -41,10 +44,18 @@
      */
     public DocumentIdentityMap getIdentityMap() {
         if (this.identityMap == null) {
-            this.identityMap = new DocumentIdentityMap();
+            this.identityMap = new DocumentIdentityMap(this.manager);
         }
         return this.identityMap;
     }
 
+    protected ServiceManager manager;
+
+    /**
+     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+     */
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/lenya.roles
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/lenya.roles?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/lenya.roles (original)
+++ lenya/trunk/src/java/org/apache/lenya/lenya.roles Wed Mar 30 23:27:09 2005
@@ -95,7 +95,7 @@
   	    default-class="org.apache.lenya.cms.usecase.UsecaseResolverImpl"/>
         
   <role name="org.apache.lenya.cms.publication.DocumentTypeResolver"
-  	    shorthand="usecase-resolver"
+  	    shorthand="document-type-resolver"
   	    default-class="org.apache.lenya.cms.publication.DocumentTypeResolverImpl"/>
         
   <role name="org.apache.lenya.cms.cocoon.flow.FlowHelper"
@@ -118,9 +118,13 @@
   	    shorthand="document-manager"
   	    default-class="org.apache.lenya.cms.publication.DocumentManagerImpl"/>
         
-  <role name="org.apache.lenya.cms.site.SiteManager"
-  	    shorthand="document-manager"
-  	    default-class="org.apache.lenya.cms.site.tree.TreeSiteManager"/>
+  <role name="org.apache.lenya.cms.site.SiteManagerSelector"
+  	    shorthand="site-managers"
+  	    default-class="org.apache.cocoon.components.ExtendedComponentSelector"/>
+        
+  <role name="org.apache.lenya.cms.publication.DocumentBuilderSelector"
+  	    shorthand="document-builders"
+  	    default-class="org.apache.cocoon.components.ExtendedComponentSelector"/>
         
   <role name="org.apache.lenya.cms.usecase.scheduling.UsecaseScheduler"
   	    shorthand="usecase-scheduler"

Modified: lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl (original)
+++ lenya/trunk/src/webapp/WEB-INF/cocoon-xconf.xsl Wed Mar 30 23:27:09 2005
@@ -415,6 +415,16 @@
              class="org.apache.lenya.cms.usecase.scheduling.UsecaseCronJob"
              logger="cron.usecase"/>
              
+  <site-managers>
+    <component-instance name="tree" logger="lenya.site"
+                        class="org.apache.lenya.cms.site.tree.TreeSiteManager"/>
+  </site-managers>
+  
+  <document-builders>
+    <component-instance name="default" logger="lenya.publication"
+                        class="org.apache.lenya.cms.publication.DefaultDocumentBuilder"/>
+  </document-builders>
+             
   <!-- move scheduler to the end, datasources have to be available -->
   <xsl:apply-templates select="component[@role = 'org.apache.cocoon.components.cron.JobScheduler']" mode="scheduler"/>
              

Modified: lenya/trunk/src/webapp/lenya/pubs/blog/sitemap.xmap
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/blog/sitemap.xmap?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/blog/sitemap.xmap (original)
+++ lenya/trunk/src/webapp/lenya/pubs/blog/sitemap.xmap Wed Mar 30 23:27:09 2005
@@ -122,7 +122,7 @@
           <map:parameter name="relative2root" value="../../../../.."/>
         </map:transform>
         <map:select type="browser">
-          <map:when test="mozilla5">
+          <map:when test="mozilla5DISABLED">
             <map:transform src="cocoon://lenya-page/{page-envelope:publication-id}/{1}/entry.xml?uiml=xul"/>
             <map:serialize type="xml" mime-type="application/vnd.mozilla.xul+xml"/>
           </map:when>
@@ -263,7 +263,7 @@
         </map:transform>
 
         <map:select type="browser">
-          <map:when test="mozilla5">
+          <map:when test="mozilla5DISABLED">
             <map:transform src="cocoon://lenya-page/{page-envelope:publication-id}/{1}/feed.xml?uiml=xul"/>
             <map:serialize type="xml" mime-type="application/vnd.mozilla.xul+xml"/>
           </map:when>

Modified: lenya/trunk/src/webapp/lenya/pubs/default/config/publication.xconf
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/config/publication.xconf?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/config/publication.xconf (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/config/publication.xconf Wed Mar 30 23:27:09 2005
@@ -23,8 +23,9 @@
     <language>de</language>
   </languages>
   <path-mapper>org.apache.lenya.cms.publication.DefaultDocumentIdToPathMapper</path-mapper>
-  <document-builder>org.apache.lenya.cms.publication.DefaultDocumentBuilder</document-builder>
+  <document-builder name="default"/>
   <breadcrumb-prefix/>
+  <site-manager name="tree"/>
   
   <!--
        For information about these settings, read 

Modified: lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java Wed Mar 30 23:27:09 2005
@@ -17,13 +17,14 @@
 package org.apache.lenya.defaultpub.cms.usecases;
 
 import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.DocumentManager;
 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.publication.util.OrderedDocumentSet;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.usecase.DocumentUsecase;
 import org.apache.lenya.cms.workflow.WorkflowManager;
@@ -37,8 +38,8 @@
 public class Deactivate extends DocumentUsecase implements DocumentVisitor {
 
     /**
-     * Checks if the workflow event is supported and the parent of the document
-     * exists in the live area.
+     * Checks if the workflow event is supported and the parent of the document exists in the live
+     * area.
      * 
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#doCheckPreconditions()
      */
@@ -89,16 +90,15 @@
      */
     protected void deactivate(Document authoringDocument) {
 
-        Publication publication = authoringDocument.getPublication();
         boolean success = false;
 
         WorkflowManager wfManager = null;
         DocumentManager documentManager = null;
         try {
             wfManager = (WorkflowManager) this.manager.lookup(WorkflowManager.ROLE);
-            Document liveDocument = publication.getAreaVersion(authoringDocument,
-                    Publication.LIVE_AREA);
-            
+            Document liveDocument = authoringDocument.getIdentityMap().getFactory()
+                    .getAreaVersion(authoringDocument, Publication.LIVE_AREA);
+
             documentManager = (DocumentManager) this.manager.lookup(DocumentManager.ROLE);
             documentManager.delete(liveDocument);
 
@@ -129,8 +129,7 @@
     }
 
     /**
-     * Deactivates a document or the subtree below a document, based on the
-     * parameter SUBTREE.
+     * Deactivates a document or the subtree below a document, based on the parameter SUBTREE.
      * @param document The document.
      */
     protected void deactivateAll(Document document) {
@@ -140,17 +139,28 @@
             getLogger().debug("Subtree deactivation: [" + isSubtreeEnabled() + "]");
         }
 
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
         try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
 
-            OrderedDocumentSet set = new OrderedDocumentSet();
-            SiteManager manager = document.getPublication().getSiteManager();
-            Document[] descendants = manager.getRequiringResources(document);
-
-            set = new OrderedDocumentSet(descendants);
+            Document[] descendants = siteManager.getRequiringResources(document);
+            DocumentSet set = new DocumentSet(descendants);
             set.add(document);
-            set.visitDescending(this);
+            siteManager.sortAscending(set);
+            set.reverse();
+            set.visit(this);
         } catch (Exception e) {
             throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
         }
 
         if (getLogger().isDebugEnabled()) {

Modified: lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Delete.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Delete.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Delete.java (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Delete.java Wed Mar 30 23:27:09 2005
@@ -16,6 +16,7 @@
  */
 package org.apache.lenya.defaultpub.cms.usecases;
 
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.util.DocumentSet;
 import org.apache.lenya.cms.site.SiteException;
@@ -47,7 +48,7 @@
             }
         }
     }
-    
+
     /**
      * @return The workflow event.
      */
@@ -75,16 +76,30 @@
     }
 
     /**
-     * @return A document set containing all requiring resources and the source
-     * document itself.
+     * @return A document set containing all requiring resources and the source document itself.
      * @throws SiteException if an error occurs.
      */
     protected DocumentSet getSubset() throws SiteException {
         Document document = getSourceDocument();
-        SiteManager manager = document.getPublication().getSiteManager();
-        DocumentSet set = new DocumentSet(manager.getRequiringResources(document));
-        set.add(document);
-        return set;
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
+            DocumentSet set = new DocumentSet(siteManager.getRequiringResources(document));
+            set.add(document);
+            return set;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
+        }
     }
 
 }

Modified: lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java?view=diff&r1=159566&r2=159567
==============================================================================
--- lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java (original)
+++ lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java Wed Mar 30 23:27:09 2005
@@ -24,13 +24,14 @@
 import java.util.GregorianCalendar;
 import java.util.List;
 
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentFactory;
 import org.apache.lenya.cms.publication.DocumentManager;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationException;
 import org.apache.lenya.cms.publication.util.DocumentVisitor;
-import org.apache.lenya.cms.publication.util.OrderedDocumentSet;
+import org.apache.lenya.cms.publication.util.DocumentSet;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.usecase.DocumentUsecase;
 import org.apache.lenya.cms.usecase.scheduling.UsecaseScheduler;
@@ -95,18 +96,33 @@
             }
 
             Publication publication = document.getPublication();
+            DocumentFactory factory = document.getIdentityMap().getFactory();
 
-            Document liveDocument = publication.getAreaVersion(document, Publication.LIVE_AREA);
+            Document liveDocument = factory.getAreaVersion(document, Publication.LIVE_AREA);
 
             List missingDocuments = new ArrayList();
 
-            SiteManager manager = publication.getSiteManager();
-            Document[] requiredDocuments = manager.getRequiredResources(liveDocument);
-            for (int i = 0; i < requiredDocuments.length; i++) {
-                if (!manager.containsInAnyLanguage(requiredDocuments[i])) {
-                    Document authoringVersion = publication.getAreaVersion(requiredDocuments[i],
-                            Publication.AUTHORING_AREA);
-                    missingDocuments.add(authoringVersion);
+            ServiceSelector selector = null;
+            SiteManager siteManager = null;
+            try {
+                selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+                siteManager = (SiteManager) selector.select(publication.getSiteManagerHint());
+                Document[] requiredDocuments = siteManager.getRequiredResources(liveDocument);
+                for (int i = 0; i < requiredDocuments.length; i++) {
+                    if (!siteManager.containsInAnyLanguage(requiredDocuments[i])) {
+                        Document authoringVersion = factory.getAreaVersion(requiredDocuments[i],
+                                Publication.AUTHORING_AREA);
+                        missingDocuments.add(authoringVersion);
+                    }
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            } finally {
+                if (selector != null) {
+                    if (siteManager != null) {
+                        selector.release(siteManager);
+                    }
+                    this.manager.release(selector);
                 }
             }
 
@@ -197,17 +213,27 @@
             getLogger().debug("Subtree publishing: [" + isSubtreeEnabled() + "]");
         }
 
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
         try {
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(document.getPublication()
+                    .getSiteManagerHint());
 
-            OrderedDocumentSet set = new OrderedDocumentSet();
-            SiteManager manager = document.getPublication().getSiteManager();
-            Document[] descendants = manager.getRequiringResources(document);
-
-            set = new OrderedDocumentSet(descendants);
+            Document[] descendants = siteManager.getRequiringResources(document);
+            DocumentSet set = new DocumentSet(descendants);
             set.add(document);
-            set.visitAscending(this);
+            siteManager.sortAscending(set);
+            set.visit(this);
         } catch (Exception e) {
             throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
         }
 
         if (getLogger().isDebugEnabled()) {



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