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 14:49:54 UTC

svn commit: r159584 [1/3] - 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/tree/ java/org/apache/lenya/cms/site/usecases/ java/org/apache/lenya/cms/task/ java/org/apache/lenya/cms/usecase/ java/org/apache/lenya/transaction/ webapp/lenya/pubs/blog/java/src/org/apache/lenya/cms/site/usecases/ webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/ webapp/lenya/usecases/tab/

Author: andreas
Date: Thu Mar 31 04:49:41 2005
New Revision: 159584

URL: http://svn.apache.org/viewcvs?view=rev&rev=159584
Log:
UnitOfWork and IdentityMap are now generic

Added:
    lenya/trunk/src/java/org/apache/lenya/transaction/
    lenya/trunk/src/java/org/apache/lenya/transaction/AbstractOperation.java
    lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMap.java
    lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMapImpl.java
    lenya/trunk/src/java/org/apache/lenya/transaction/LockException.java
    lenya/trunk/src/java/org/apache/lenya/transaction/Operation.java
    lenya/trunk/src/java/org/apache/lenya/transaction/TransactionException.java
    lenya/trunk/src/java/org/apache/lenya/transaction/Transactionable.java
    lenya/trunk/src/java/org/apache/lenya/transaction/TransactionableFactory.java
    lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWork.java
    lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
Removed:
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractOperation.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/Operation.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/UnitOfWork.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/UnitOfWorkImpl.java
Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/ac/DocumentPolicyManagerWrapper.java
    lenya/trunk/src/java/org/apache/lenya/cms/ac/cocoon/PolicyHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/ComputeNewDocumentId.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyContentTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyResourcesTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/DeactivateResourcesTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteResourcesTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteSchedulerEntryTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/InitRCTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/LinkRewriteTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/ResourcePublisher.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/UploadAction.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/WorkflowInvokerAction.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/OperationModule.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/SitetreeModule.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/FallbackSourceFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/LenyaSourceFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/DocumentIndexTransformer.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/LinkRewritingTransformer.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/WorkflowMenuTransformer.java
    lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentityMap.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/PageEnvelope.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/task/DocumentTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/task/PublicationTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/Collection.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/CollectionImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentLanguagesHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/DocumentReferencesHelper.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/util/LanguageVersions.java
    lenya/trunk/src/java/org/apache/lenya/cms/scheduler/LoadQuartzServlet.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/tree/TreeSiteManager.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/ChangeNodeID.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Clipboard.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateDocument.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/CreateLanguage.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Delete.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/EmptyTrash.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/LinkRewriterImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Paste.java
    lenya/trunk/src/java/org/apache/lenya/cms/task/WorkflowInvoker.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/AbstractUsecase.java
    lenya/trunk/src/java/org/apache/lenya/cms/usecase/DocumentUsecase.java
    lenya/trunk/src/java/org/apache/lenya/lenya.roles
    lenya/trunk/src/webapp/lenya/pubs/blog/java/src/org/apache/lenya/cms/site/usecases/CreateBlogEntry.java
    lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java
    lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
    lenya/trunk/src/webapp/lenya/usecases/tab/sitetree.jx

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ac/DocumentPolicyManagerWrapper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ac/DocumentPolicyManagerWrapper.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ac/DocumentPolicyManagerWrapper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ac/DocumentPolicyManagerWrapper.java Thu Mar 31 04:49:41 2005
@@ -58,7 +58,7 @@
      * Ctor.
      */
     public DocumentPolicyManagerWrapper() {
-	    // do nothing
+        // do nothing
     }
 
     private InheritingPolicyManager policyManager;
@@ -79,9 +79,9 @@
         Publication publication = getPublication(webappUrl);
         String url = null;
         try {
-            DocumentIdentityMap map = new DocumentIdentityMap(getServiceManager());
-            if (map.getFactory().isDocument(publication, webappUrl)) {
-                Document document = map.getFactory().getFromURL(publication, webappUrl);
+            DocumentIdentityMap map = new DocumentIdentityMap(getServiceManager(), getLogger());
+            if (map.isDocument(webappUrl)) {
+                Document document = map.getFromURL(webappUrl);
                 if (document.existsInAnyLanguage()) {
                     url = "/" + document.getArea() + document.getId();
                     if (getLogger().isDebugEnabled()) {
@@ -242,13 +242,12 @@
      * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
      */
     public void configure(Configuration configuration) throws ConfigurationException {
-        Configuration policyManagerConfiguration = configuration.getChild(
-                this.ELEMENT_POLICY_MANAGER, false);
+        Configuration policyManagerConfiguration = configuration
+                .getChild(this.ELEMENT_POLICY_MANAGER, false);
         if (policyManagerConfiguration != null) {
             String type = null;
             try {
-                type = policyManagerConfiguration
-                        .getAttribute(this.ATTRIBUTE_TYPE);
+                type = policyManagerConfiguration.getAttribute(this.ATTRIBUTE_TYPE);
 
                 this.policyManagerSelector = (ServiceSelector) getServiceManager()
                         .lookup(PolicyManager.ROLE + "Selector");
@@ -257,8 +256,7 @@
                         .select(type);
 
                 if (!(_policyManager instanceof InheritingPolicyManager)) {
-                    throw new AccessControlException("The "
-                            + getClass().getName()
+                    throw new AccessControlException("The " + getClass().getName()
                             + " can only be used with an "
                             + InheritingPolicyManager.class.getName() + ".");
                 }
@@ -267,21 +265,17 @@
                         policyManagerConfiguration);
                 setPolicyManager((InheritingPolicyManager) _policyManager);
             } catch (final ConfigurationException e1) {
-                throw new ConfigurationException(
-                        "Obtaining policy manager for type [" + type
-                                + "] failed: ", e1);
+                throw new ConfigurationException("Obtaining policy manager for type [" + type
+                        + "] failed: ", e1);
             } catch (final ServiceException e1) {
-                throw new ConfigurationException(
-                        "Obtaining policy manager for type [" + type
-                                + "] failed: ", e1);
+                throw new ConfigurationException("Obtaining policy manager for type [" + type
+                        + "] failed: ", e1);
             } catch (final ParameterException e1) {
-                throw new ConfigurationException(
-                        "Obtaining policy manager for type [" + type
-                                + "] failed: ", e1);
+                throw new ConfigurationException("Obtaining policy manager for type [" + type
+                        + "] failed: ", e1);
             } catch (final AccessControlException e1) {
-                throw new ConfigurationException(
-                        "Obtaining policy manager for type [" + type
-                                + "] failed: ", e1);
+                throw new ConfigurationException("Obtaining policy manager for type [" + type
+                        + "] failed: ", e1);
             }
         }
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ac/cocoon/PolicyHelper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ac/cocoon/PolicyHelper.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ac/cocoon/PolicyHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ac/cocoon/PolicyHelper.java Thu Mar 31 04:49:41 2005
@@ -185,7 +185,7 @@
     private String computeUrl(Map objectModel, String area) throws ProcessingException {
         PageEnvelope envelope;
         try {
-            DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+            DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
             envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(map, objectModel);
         } catch (PageEnvelopeException e) {
             throw new ProcessingException(e);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java Thu Mar 31 04:49:41 2005
@@ -30,9 +30,6 @@
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.publication.DocumentIdentityMap;
-import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.cms.publication.PublicationFactory;
 import org.apache.lenya.cms.workflow.WorkflowResolver;
 import org.apache.lenya.util.ServletHelper;
 import org.apache.lenya.workflow.Situation;
@@ -42,8 +39,8 @@
 import org.apache.lenya.workflow.impl.WorkflowEngineImpl;
 
 /**
- * If the client requested invoking a workflow event, this authorizer checks if
- * the current document state and identity roles allow this transition.
+ * If the client requested invoking a workflow event, this authorizer checks if the current document
+ * state and identity roles allow this transition.
  */
 public class WorkflowAuthorizer extends AbstractLogEnabled implements Authorizer, Serviceable {
 
@@ -87,12 +84,10 @@
 
             try {
                 resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
-                PublicationFactory pubFactory = PublicationFactory.getInstance(getLogger());
-                Publication publication = pubFactory.getPublication(resolver, request);
-                DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
-                if (map.getFactory().isDocument(publication, webappUrl)) {
+                DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
+                if (map.isDocument(webappUrl)) {
 
-                    Document document = map.getFactory().getFromURL(publication, webappUrl);
+                    Document document = map.getFromURL(webappUrl);
                     workflowResolver = (WorkflowResolver) this.manager
                             .lookup(WorkflowResolver.ROLE);
 
@@ -106,8 +101,6 @@
             } catch (final ServiceException e) {
                 throw new AccessControlException(e);
             } catch (final DocumentBuildException e) {
-                throw new AccessControlException(e);
-            } catch (final PublicationException e) {
                 throw new AccessControlException(e);
             } catch (final WorkflowException e) {
                 throw new AccessControlException(e);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/ComputeNewDocumentId.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/ComputeNewDocumentId.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/ComputeNewDocumentId.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/ComputeNewDocumentId.java Thu Mar 31 04:49:41 2005
@@ -122,7 +122,7 @@
         DocumentManager docManager = null;
         try {
             docManager = (DocumentManager) getServiceManager().lookup(DocumentManager.ROLE);
-            Document document = getIdentityMap().getFactory().get(getPublication(), _area, documentid);
+            Document document = getIdentityMap().get(getPublication(), _area, documentid);
             document = docManager.getAvailableDocument(document);
             return document.getId();
         } catch (Exception e) {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyContentTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyContentTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyContentTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyContentTask.java Thu Mar 31 04:49:41 2005
@@ -57,7 +57,7 @@
             String language = labels[i].getLanguage();
             Document srcDoc;
             try {
-                srcDoc = getIdentityMap().getFactory().get(getPublication(),
+                srcDoc = getIdentityMap().get(getPublication(),
                         getFirstarea(),
                         srcDocumentid,
                         language);
@@ -71,7 +71,7 @@
             }
             Document destDoc;
             try {
-                destDoc = getIdentityMap().getFactory().get(getPublication(),
+                destDoc = getIdentityMap().get(getPublication(),
                         getSecarea(),
                         destDocumentid,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyResourcesTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyResourcesTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyResourcesTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/CopyResourcesTask.java Thu Mar 31 04:49:41 2005
@@ -64,7 +64,7 @@
         String language = labels[0].getLanguage();
         Document srcDoc;
         try {
-            srcDoc = getIdentityMap().getFactory().get(getPublication(),
+            srcDoc = getIdentityMap().get(getPublication(),
                     getFirstarea(),
                     srcDocumentid,
                     language);
@@ -83,7 +83,7 @@
 
         Document destDoc;
         try {
-            destDoc = getIdentityMap().getFactory().get(getPublication(),
+            destDoc = getIdentityMap().get(getPublication(),
                     getSecarea(),
                     destDocumentid,
                     language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/DeactivateResourcesTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/DeactivateResourcesTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/DeactivateResourcesTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/DeactivateResourcesTask.java Thu Mar 31 04:49:41 2005
@@ -30,9 +30,9 @@
 import org.apache.tools.ant.BuildException;
 
 /**
- * Ant task to remove the resources belonging to a document with document id
- * <documentid>, area <area>and language <language>. The resources are removed
- * when no more version of this document is available.
+ * Ant task to remove the resources belonging to a document with document id <documentid>, area
+ * <area>and language <language>. The resources are removed when no more version of this document is
+ * available.
  */
 public class DeactivateResourcesTask extends PublicationTask {
     private String area;
@@ -47,9 +47,8 @@
     }
 
     /**
-     * Remove the resources belonging to the document with document id
-     * <documentid>, area <area>and language <language>, when no more version of
-     * this document is available.
+     * Remove the resources belonging to the document with document id <documentid>, area <area>and
+     * language <language>, when no more version of this document is available.
      * @param _language The language
      * @param _documentid The document id
      * @param _area The area
@@ -67,10 +66,7 @@
 
             Document doc;
             try {
-                doc = getIdentityMap().getFactory().get(getPublication(),
-                        _area,
-                        _documentid,
-                        _language);
+                doc = getIdentityMap().get(getPublication(), _area, _documentid, _language);
             } catch (DocumentBuildException e) {
                 throw new BuildException(e);
             }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java Thu Mar 31 04:49:41 2005
@@ -31,9 +31,8 @@
 import org.apache.tools.ant.BuildException;
 
 /**
- * Ant task to delete the contents (xml files) of documents corresponding to a
- * defined subtree Visitor of the defined subtree (visitor pattern). The subtree
- * is reverse visited.
+ * Ant task to delete the contents (xml files) of documents corresponding to a defined subtree
+ * Visitor of the defined subtree (visitor pattern). The subtree is reverse visited.
  */
 public class DeleteContentTask extends TwoDocumentsOperationTask {
 
@@ -58,7 +57,7 @@
             String language = labels[i].getLanguage();
             Document doc;
             try {
-                doc = getIdentityMap().getFactory().get(getPublication(),
+                doc = getIdentityMap().get(getPublication(),
                         getFirstarea(),
                         srcDocumentid,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteResourcesTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteResourcesTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteResourcesTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteResourcesTask.java Thu Mar 31 04:49:41 2005
@@ -28,9 +28,8 @@
 import org.apache.tools.ant.BuildException;
 
 /**
- * Ant task to delete the resources of documents corresponding to a defined
- * subtree (Visitor pattern) Visitor of the subtree. The subtree is reverse
- * visited.
+ * Ant task to delete the resources of documents corresponding to a defined subtree (Visitor
+ * pattern) Visitor of the subtree. The subtree is reverse visited.
  */
 public class DeleteResourcesTask extends TwoDocumentsOperationTask {
 
@@ -57,7 +56,7 @@
             String language = labels[i].getLanguage();
             Document srcDoc;
             try {
-                srcDoc = getIdentityMap().getFactory().get(getPublication(),
+                srcDoc = getIdentityMap().get(getPublication(),
                         getFirstarea(),
                         srcDocumentid,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteSchedulerEntryTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteSchedulerEntryTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteSchedulerEntryTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/DeleteSchedulerEntryTask.java Thu Mar 31 04:49:41 2005
@@ -91,7 +91,7 @@
             String language = labels[i].getLanguage();
 
             try {
-                Document document = getIdentityMap().getFactory().get(getPublication(),
+                Document document = getIdentityMap().get(getPublication(),
                         this.area,
                         this.documentId,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/InitRCTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/InitRCTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/InitRCTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/InitRCTask.java Thu Mar 31 04:49:41 2005
@@ -29,9 +29,8 @@
 import org.apache.tools.ant.BuildException;
 
 /**
- * Ant task, to init the rc files of the destination's documents corresponding
- * to a given source subtree. Evry destination file is checked in. (Visitor
- * pattern)
+ * Ant task, to init the rc files of the destination's documents corresponding to a given source
+ * subtree. Evry destination file is checked in. (Visitor pattern)
  */
 public class InitRCTask extends TwoDocumentsOperationTask {
     private String rcmlDir = "";
@@ -89,7 +88,7 @@
             for (int i = 0; i < labels.length; i++) {
                 String language = labels[i].getLanguage();
                 Document destDoc;
-                destDoc = getIdentityMap().getFactory().get(getPublication(),
+                destDoc = getIdentityMap().get(getPublication(),
                         getSecarea(),
                         destDocumentid,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/LinkRewriteTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/LinkRewriteTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/LinkRewriteTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/LinkRewriteTask.java Thu Mar 31 04:49:41 2005
@@ -41,13 +41,11 @@
 import org.xml.sax.SAXException;
 
 /**
- * This task is used to rewrite internal links after a cut'n'paste operation,
- * i.e. after a document has changed its document-id. It finds all relevant
- * documents which have a link to the document that changed its document-id and
- * changes this link with the help of an xslt.
+ * This task is used to rewrite internal links after a cut'n'paste operation, i.e. after a document
+ * has changed its document-id. It finds all relevant documents which have a link to the document
+ * that changed its document-id and changes this link with the help of an xslt.
  * 
- * @deprecated Use o.a.l.cms.site.usecases.LinkRewriter instead (see bug
- *             #29861).
+ * @deprecated Use o.a.l.cms.site.usecases.LinkRewriter instead (see bug #29861).
  */
 public class LinkRewriteTask extends PublicationTask {
 
@@ -222,8 +220,8 @@
     }
 
     /**
-     * Rewrites links by traversing a directory tree and applying a rewrite
-     * transformation to XML files in the directory.
+     * Rewrites links by traversing a directory tree and applying a rewrite transformation to XML
+     * files in the directory.
      * @param rootDirName The root directory for the rewrite
      * @param _stylesheet The stylesheet to use for rewriting
      * @param _area The area to use for rewriting
@@ -273,10 +271,7 @@
     protected String getUrl(String _area, String documentId, String language) {
         org.apache.lenya.cms.publication.Document newDocument;
         try {
-            newDocument = getIdentityMap().getFactory().get(getPublication(),
-                    _area,
-                    documentId,
-                    language);
+            newDocument = getIdentityMap().get(getPublication(), _area, documentId, language);
         } catch (DocumentBuildException e) {
             throw new RuntimeException(e);
         }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveDocumentTask.java Thu Mar 31 04:49:41 2005
@@ -128,11 +128,11 @@
 
             log("move workflow history");
             try {
-                document = getIdentityMap().getFactory().get(getPublication(),
+                document = getIdentityMap().get(getPublication(),
                         this.firstarea,
                         srcDocumentid,
                         language);
-                newDocument = getIdentityMap().getFactory().get(getPublication(),
+                newDocument = getIdentityMap().get(getPublication(),
                         this.secarea,
                         destDocumentid,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/MoveWorkflowTask.java Thu Mar 31 04:49:41 2005
@@ -20,7 +20,6 @@
 package org.apache.lenya.cms.ant;
 
 import org.apache.lenya.cms.publication.Document;
-import org.apache.lenya.cms.publication.DocumentBuildException;
 import org.apache.lenya.cms.site.Label;
 import org.apache.lenya.cms.site.tree.SiteTreeNode;
 import org.apache.lenya.cms.workflow.WorkflowManager;
@@ -57,11 +56,11 @@
 
             WorkflowManager wfManager = null;
             try {
-                srcDoc = getIdentityMap().getFactory().get(getPublication(),
+                srcDoc = getIdentityMap().get(getPublication(),
                         getFirstarea(),
                         srcDocumentid,
                         language);
-                destDoc = getIdentityMap().getFactory().get(getPublication(),
+                destDoc = getIdentityMap().get(getPublication(),
                         getSecarea(),
                         destDocumentid,
                         language);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/PublicationTask.java Thu Mar 31 04:49:41 2005
@@ -84,7 +84,7 @@
      */
     protected DocumentIdentityMap getIdentityMap() {
         if (this.identityMap == null) {
-            this.identityMap = new DocumentIdentityMap(getServiceManager());
+            this.identityMap = new DocumentIdentityMap(getServiceManager(), new ConsoleLogger());
         }
         return this.identityMap;
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/ResourcePublisher.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/ResourcePublisher.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/ResourcePublisher.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/ResourcePublisher.java Thu Mar 31 04:49:41 2005
@@ -43,12 +43,12 @@
     public void execute() throws BuildException {
 
         try {
-            Document authoringDocument = getIdentityMap().getFactory().get(getPublication(),
+            Document authoringDocument = getIdentityMap().get(getPublication(),
                     Publication.AUTHORING_AREA,
                     this.documentId);
             ResourcesManager authoringManager = authoringDocument.getResourcesManager();
 
-            Document liveDocument = getIdentityMap().getFactory().get(getPublication(),
+            Document liveDocument = getIdentityMap().get(getPublication(),
                     Publication.LIVE_AREA,
                     this.documentId);
             ResourcesManager liveManager = liveDocument.getResourcesManager();

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java Thu Mar 31 04:49:41 2005
@@ -102,13 +102,13 @@
         try {
             if (labels.length < 1) {
                 log("no languages found for the node with id : " + node.getId());
-                writeDCIdentifier(getIdentityMap().getFactory().get(getPublication(),
+                writeDCIdentifier(getIdentityMap().get(getPublication(),
                         this.area,
                         this.documentid));
             } else {
                 for (int i = 0; i < labels.length; i++) {
                     language = labels[i].getLanguage();
-                    writeDCIdentifier(getIdentityMap().getFactory().get(getPublication(),
+                    writeDCIdentifier(getIdentityMap().get(getPublication(),
                             this.area,
                             this.documentid,
                             language));

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/TestTask.java Thu Mar 31 04:49:41 2005
@@ -42,7 +42,7 @@
         DocumentTypeResolver resolver = null;
         try {
             resolver = (DocumentTypeResolver) manager.lookup(DocumentTypeResolver.ROLE);
-            Document document = getIdentityMap().getFactory().get(getPublication(), Publication.AUTHORING_AREA, "/index");
+            Document document = getIdentityMap().get(getPublication(), Publication.AUTHORING_AREA, "/index");
             DocumentType doctype = resolver.resolve(document);
             String message = "Document type of [" + document + "] is [" + doctype.getName() + "]";
             log(message);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java Thu Mar 31 04:49:41 2005
@@ -232,7 +232,7 @@
             String _publisher, String _rights) throws BuildException, DocumentBuildException,
             DocumentException {
 
-        Document doc = getIdentityMap().getFactory()
+        Document doc = getIdentityMap()
                 .get(getPublication(), _area, _documentId, lang);
         DublinCore dc = doc.getDublinCore();
         dc.setValue(DublinCore.ELEMENT_CREATOR, _creator);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/LanguageExistsAction.java Thu Mar 31 04:49:41 2005
@@ -66,7 +66,7 @@
     public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source,
             Parameters parameters) throws Exception {
 
-        DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+        DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
         PageEnvelope pageEnvelope = PageEnvelopeFactory.getInstance().getPageEnvelope(map,
                 objectModel);
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/RevisionControllerAction.java Thu Mar 31 04:49:41 2005
@@ -41,8 +41,7 @@
 /**
  * Revision controller action.
  * 
- * @version $Id: RevisionControllerAction.java 152682 2005-02-08 18:13:39Z
- *          gregor $
+ * @version $Id$
  */
 public class RevisionControllerAction extends ServiceableAction {
 
@@ -54,8 +53,8 @@
 
     /**
      * @see org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector,
-     *      org.apache.cocoon.environment.SourceResolver, java.util.Map,
-     *      java.lang.String, org.apache.avalon.framework.parameters.Parameters)
+     *      org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String,
+     *      org.apache.avalon.framework.parameters.Parameters)
      */
     public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String src,
             Parameters parameters) throws Exception {
@@ -71,7 +70,7 @@
         PageEnvelope envelope = null;
         PublicationFactory factory = PublicationFactory.getInstance(getLogger());
         Publication publication = factory.getPublication(objectModel);
-        DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+        DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
         Document document = null;
 
         try {
@@ -134,10 +133,7 @@
                 }
             }
 
-            Document srcDoc = map.getFactory().get(publication,
-                    document.getArea(),
-                    documentid,
-                    language);
+            Document srcDoc = map.get(publication, document.getArea(), documentid, language);
             File newFile = srcDoc.getFile();
             this.filename = newFile.getCanonicalPath();
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/UploadAction.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/UploadAction.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/UploadAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/UploadAction.java Thu Mar 31 04:49:41 2005
@@ -114,7 +114,7 @@
 
         Map results = new HashMap();
         Request request = ObjectModelHelper.getRequest(objectModel);
-        DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+        DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
         this.pageEnvelope = PageEnvelopeFactory.getInstance().getPageEnvelope(map, objectModel);
         this.document = this.pageEnvelope.getDocument();
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/WorkflowInvokerAction.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/WorkflowInvokerAction.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/WorkflowInvokerAction.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/acting/WorkflowInvokerAction.java Thu Mar 31 04:49:41 2005
@@ -87,8 +87,8 @@
 
         PublicationFactory pubFactory = PublicationFactory.getInstance(getLogger());
         Publication pub = pubFactory.getPublication(objectModel);
-        DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
-        Document document = map.getFactory().get(pub, area, documentId, language);
+        DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
+        Document document = map.get(pub, area, documentId, language);
         
         WorkflowResolver workflowResolver = null;
         

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/AbstractPageEnvelopeModule.java Thu Mar 31 04:49:41 2005
@@ -67,7 +67,7 @@
         String servletContextPath = context.getRealPath("");
 
         try {
-            DocumentIdentityMap map = getUnitOfWork().getIdentityMap();
+            DocumentIdentityMap map = getDocumentIdentityMap();
             envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(map,
                     contextPath,
                     webappUrl,
@@ -78,7 +78,7 @@
 
         return envelope;
     }
-    
+
     /**
      * @param name The original attribute name.
      * @return The attribute name without URL attachment.

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/OperationModule.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/OperationModule.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/OperationModule.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/OperationModule.java Thu Mar 31 04:49:41 2005
@@ -21,8 +21,9 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.cocoon.components.modules.input.AbstractInputModule;
-import org.apache.lenya.cms.usecase.Operation;
-import org.apache.lenya.cms.usecase.UnitOfWork;
+import org.apache.lenya.cms.publication.DocumentIdentityMap;
+import org.apache.lenya.transaction.Operation;
+import org.apache.lenya.transaction.UnitOfWork;
 
 /**
  * Super class for operation-based input modules.
@@ -39,6 +40,15 @@
     }
 
     private UnitOfWork unitOfWork;
+    
+    private DocumentIdentityMap documentIdentityMap;
+    
+    protected DocumentIdentityMap getDocumentIdentityMap() {
+        if (this.documentIdentityMap == null) {
+            this.documentIdentityMap = new DocumentIdentityMap(this.manager, getLogger());
+        }
+        return this.documentIdentityMap;
+    }
 
     /**
      * Retrieves a unit-of-work, which gives the operation access to business
@@ -47,7 +57,7 @@
      * @return a UnitOfWork, the interface to access the objects
      * @throws ServiceException if the unit-of-work component can not be initialized by the component framework
      *
-     * @see org.apache.lenya.cms.usecase.Operation#getUnitOfWork()
+     * @see org.apache.lenya.transaction.Operation#getUnitOfWork()
      */
     public UnitOfWork getUnitOfWork() throws ServiceException {
         if (this.unitOfWork == null) {
@@ -55,6 +65,7 @@
                getLogger().debug("OperationModule.getUnitOfWork() does not yet have instance, looking up role [" + UnitOfWork.ROLE + "]");
 
            this.unitOfWork = (UnitOfWork) this.manager.lookup(UnitOfWork.ROLE);
+           this.unitOfWork.addIdentityMap(getDocumentIdentityMap());
         }
 
         return this.unitOfWork;

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/SitetreeModule.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/SitetreeModule.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/SitetreeModule.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/components/modules/input/SitetreeModule.java Thu Mar 31 04:49:41 2005
@@ -77,7 +77,7 @@
             selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
             _manager = (TreeSiteManager) selector.select(publication.getSiteManagerHint());
             
-            DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+            DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
 
             if (name.equals(AUTHORING_NODE)) {
                 SiteTree authoringTree = _manager.getTree(map,

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/flow/FlowHelperImpl.java Thu Mar 31 04:49:41 2005
@@ -82,7 +82,7 @@
      * @see org.apache.lenya.cms.cocoon.flow.FlowHelper#getPageEnvelope(org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon)
      */
     public PageEnvelope getPageEnvelope(FOM_Cocoon cocoon) throws PageEnvelopeException {
-        DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+        DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
         PageEnvelopeFactory factory = PageEnvelopeFactory.getInstance();
         return factory.getPageEnvelope(map, cocoon.getObjectModel());
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/generation/SitetreeFragmentGenerator.java Thu Mar 31 04:49:41 2005
@@ -149,7 +149,7 @@
         }
 
         try {
-            this.identityMap = new DocumentIdentityMap(this.manager);
+            this.identityMap = new DocumentIdentityMap(this.manager, getLogger());
             envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(this.identityMap,
                     _objectModel);
         } catch (final PageEnvelopeException e) {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/scheduler/SchedulerHelper.java Thu Mar 31 04:49:41 2005
@@ -73,7 +73,7 @@
 
             NamespaceMap schedulerParameters = new NamespaceMap(LoadQuartzServlet.PREFIX);
 
-            DocumentIdentityMap identityMap = new DocumentIdentityMap(null);
+            DocumentIdentityMap identityMap = new DocumentIdentityMap(null, null);
             PageEnvelope envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(identityMap,
                     this.objectModel);
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/FallbackSourceFactory.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/FallbackSourceFactory.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/FallbackSourceFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/FallbackSourceFactory.java Thu Mar 31 04:49:41 2005
@@ -40,7 +40,7 @@
 import org.apache.lenya.cms.publication.URLInformation;
 import org.apache.lenya.cms.publication.templating.ExistingSourceResolver;
 import org.apache.lenya.cms.publication.templating.PublicationTemplateManager;
-import org.apache.lenya.cms.usecase.AbstractOperation;
+import org.apache.lenya.transaction.AbstractOperation;
 
 /**
  * Source factory following the fallback principle.

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/LenyaSourceFactory.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/LenyaSourceFactory.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/LenyaSourceFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/LenyaSourceFactory.java Thu Mar 31 04:49:41 2005
@@ -105,7 +105,7 @@
 
                 Map objectModel = ContextHelper.getObjectModel(this.context);
                 try {
-                    DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+                    DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
                     PageEnvelopeFactory pageEnvelopeFactory = PageEnvelopeFactory.getInstance();
 
                     if (pageEnvelopeFactory != null) {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/DocumentIndexTransformer.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/DocumentIndexTransformer.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/DocumentIndexTransformer.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/DocumentIndexTransformer.java Thu Mar 31 04:49:41 2005
@@ -48,13 +48,12 @@
 import org.xml.sax.helpers.AttributesImpl;
 
 /**
- * This transformer lists the children of a document if the tag
- * <namespaceURI:children>is present in this document. The list of the children
- * is in the form :<namespaceURI:children><child href="....html> <ci:include
- * src="..." element="included"/> </child> ... </namespaceURI:children> Multiple
- * language : if a child doesn't exist in the parent language, then the version
- * in the default language will be considered. If it doesn't exist too, any
- * other existent language will be considered.
+ * This transformer lists the children of a document if the tag <namespaceURI:children>is present in
+ * this document. The list of the children is in the form :<namespaceURI:children><child
+ * href="....html> <ci:include src="..." element="included"/> </child> ... </namespaceURI:children>
+ * Multiple language : if a child doesn't exist in the parent language, then the version in the
+ * default language will be considered. If it doesn't exist too, any other existent language will be
+ * considered.
  */
 public class DocumentIndexTransformer extends AbstractSAXTransformer implements Parameterizable {
 
@@ -94,8 +93,7 @@
 
     /**
      * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
-     *      java.util.Map, java.lang.String,
-     *      org.apache.avalon.framework.parameters.Parameters)
+     *      java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
      */
     public void setup(SourceResolver _resolver, Map _objectModel, String src, Parameters _parameters)
             throws ProcessingException, SAXException, IOException {
@@ -110,13 +108,13 @@
             PageEnvelope envelope = null;
             PublicationFactory factory = PublicationFactory.getInstance(getLogger());
             this.publication = factory.getPublication(_objectModel);
-            this.identityMap = new DocumentIdentityMap(this.manager);
+            this.identityMap = new DocumentIdentityMap(this.manager, getLogger());
             envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(this.identityMap,
                     _objectModel);
 
             setDocument(envelope.getDocument());
             setArea(this.document.getArea());
-            
+
             selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
             siteManager = (TreeSiteManager) selector.select(this.publication.getSiteManagerHint());
 
@@ -130,8 +128,8 @@
     }
 
     /**
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String,
-     *      java.lang.String, java.lang.String, org.xml.sax.Attributes)
+     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String,
+     *      java.lang.String, org.xml.sax.Attributes)
      */
     public void startElement(String uri, String localName, String raw, Attributes attr)
             throws SAXException {
@@ -163,10 +161,7 @@
                     // document
                     Document doc;
                     try {
-                        doc = this.identityMap.getFactory().get(this.publication,
-                                this.area,
-                                childId,
-                                language);
+                        doc = this.identityMap.get(this.publication, this.area, childId, language);
                     } catch (DocumentBuildException e) {
                         throw new SAXException(e);
                     }
@@ -206,7 +201,7 @@
                         while (!doc.exists() && j < languages.size()) {
                             String newlanguage = (String) languages.get(j);
                             try {
-                                doc = this.identityMap.getFactory().get(this.publication,
+                                doc = this.identityMap.get(this.publication,
                                         this.area,
                                         childId,
                                         newlanguage);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/LinkRewritingTransformer.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/LinkRewritingTransformer.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/LinkRewritingTransformer.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/LinkRewritingTransformer.java Thu Mar 31 04:49:41 2005
@@ -66,12 +66,10 @@
  * These links are rewritten using the following rules:
  * </p>
  * <ul>
- * <li>The area is replaced by the current area (obtained from the page
- * envelope).</li>
- * <li>A URL prefix is added depending on the proxy configuration of the
- * publication.</li>
- * <li>If the target document does not exist, the <code>&lt;a/&gt;</code>
- * element is removed to disable the link.</li>
+ * <li>The area is replaced by the current area (obtained from the page envelope).</li>
+ * <li>A URL prefix is added depending on the proxy configuration of the publication.</li>
+ * <li>If the target document does not exist, the <code>&lt;a/&gt;</code> element is removed to
+ * disable the link.</li>
  * </ul>
  * 
  * $Id: LinkRewritingTransformer.java,v 1.7 2004/03/16 11:12:16 gregor
@@ -90,15 +88,14 @@
 
     /**
      * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
-     *      java.util.Map, java.lang.String,
-     *      org.apache.avalon.framework.parameters.Parameters)
+     *      java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
      */
     public void setup(SourceResolver _resolver, Map _objectModel, String _source,
             Parameters _parameters) throws ProcessingException, SAXException, IOException {
         super.setup(_resolver, _objectModel, _source, _parameters);
 
         try {
-            this.identityMap = new DocumentIdentityMap(this.manager);
+            this.identityMap = new DocumentIdentityMap(this.manager, getLogger());
             PageEnvelope envelope = PageEnvelopeFactory.getInstance()
                     .getPageEnvelope(this.identityMap, _objectModel);
             this.currentDocument = envelope.getDocument();
@@ -165,8 +162,8 @@
     private String indent = "";
 
     /**
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String,
-     *      java.lang.String, java.lang.String, org.xml.sax.Attributes)
+     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String,
+     *      java.lang.String, org.xml.sax.Attributes)
      */
     public void startElement(String uri, String name, String qname, Attributes attrs)
             throws SAXException {
@@ -215,20 +212,18 @@
                             getLogger().debug(this.indent + "webapp URL: [" + webappUrl + "]");
                             getLogger().debug(this.indent + "anchor:     [" + anchor + "]");
                         }
-                        if (this.identityMap.getFactory().isDocument(publication, webappUrl)) {
+                        if (this.identityMap.isDocument(webappUrl)) {
 
-                            Document targetDocument = this.identityMap.getFactory()
-                                    .getFromURL(publication, webappUrl);
+                            Document targetDocument = this.identityMap.getFromURL(webappUrl);
 
                             if (getLogger().isDebugEnabled()) {
                                 getLogger().debug(this.indent + "Resolved target document: ["
                                         + targetDocument + "]");
                             }
 
-                            targetDocument = this.identityMap.getFactory().get(publication,
-                                    getCurrentDocument().getArea(),
-                                    targetDocument.getId(),
-                                    targetDocument.getLanguage());
+                            targetDocument = this.identityMap.get(publication, getCurrentDocument()
+                                    .getArea(), targetDocument.getId(), targetDocument
+                                    .getLanguage());
 
                             if (targetDocument.exists()) {
                                 rewriteLink(newAttrs, targetDocument, anchor);
@@ -308,8 +303,7 @@
      * 
      * @param attr The attributes.
      * @param value The value.
-     * @throws IllegalArgumentException if the href attribute is not contained
-     *             in this attributes.
+     * @throws IllegalArgumentException if the href attribute is not contained in this attributes.
      */
     protected void setHrefAttribute(AttributesImpl attr, String value) {
         int position = attr.getIndex(ATTRIBUTE_HREF);
@@ -320,8 +314,8 @@
     }
 
     /**
-     * @see org.xml.sax.ContentHandler#endElement(java.lang.String,
-     *      java.lang.String, java.lang.String)
+     * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String,
+     *      java.lang.String)
      */
     public void endElement(String uri, String name, String qname) throws SAXException {
         if (getLogger().isDebugEnabled()) {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/WorkflowMenuTransformer.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/WorkflowMenuTransformer.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/WorkflowMenuTransformer.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/transformation/WorkflowMenuTransformer.java Thu Mar 31 04:49:41 2005
@@ -121,7 +121,7 @@
         WorkflowResolver workflowResolver = null;
 
         try {
-            DocumentIdentityMap map = new DocumentIdentityMap(this.manager);
+            DocumentIdentityMap map = new DocumentIdentityMap(this.manager, getLogger());
             envelope = PageEnvelopeFactory.getInstance().getPageEnvelope(map, _objectModel);
 
             Document document = envelope.getDocument();

Modified: lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreHelper.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreHelper.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreHelper.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreHelper.java Thu Mar 31 04:49:41 2005
@@ -56,16 +56,13 @@
         try {
             identifier = null;
 
-            Document baseDocument = map.getFactory().get(publication, area, documentId);
+            Document baseDocument = map.get(publication, area, documentId);
             String[] languages = baseDocument.getLanguages();
 
             int i = 0;
             if (languages.length > 0) {
                 while (identifier == null && i < languages.length) {
-                    Document document = map.getFactory().get(publication,
-                            area,
-                            documentId,
-                            languages[i]);
+                    Document document = map.get(publication, area, documentId, languages[i]);
                     log.debug("document file : " + document.getFile().getAbsolutePath());
                     DublinCore dublincore = document.getDublinCore();
                     log.debug("dublincore title : "

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java Thu Mar 31 04:49:41 2005
@@ -35,6 +35,7 @@
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.workflow.CMSHistory;
 import org.apache.lenya.cms.workflow.History;
+import org.apache.lenya.transaction.TransactionException;
 import org.apache.lenya.workflow.Situation;
 import org.apache.lenya.workflow.Version;
 import org.apache.lenya.workflow.Workflow;
@@ -179,7 +180,7 @@
         for (int i = 0; i < allLanguages.length; i++) {
             Document version;
             try {
-                version = getIdentityMap().getFactory().getLanguageVersion(this, allLanguages[i]);
+                version = getIdentityMap().getLanguageVersion(this, allLanguages[i]);
             } catch (DocumentBuildException e) {
                 throw new DocumentException(e);
             }
@@ -320,8 +321,7 @@
         try {
             String[] languages = getLanguages();
             for (int i = 0; i < languages.length; i++) {
-                Document languageVersion = getIdentityMap().getFactory().getLanguageVersion(this,
-                        languages[i]);
+                Document languageVersion = getIdentityMap().getLanguageVersion(this, languages[i]);
                 exists = exists || languageVersion.exists();
             }
         } catch (DocumentBuildException e) {
@@ -482,9 +482,64 @@
         getHistory().newVersion(workflow, version, situation);
     }
 
-    protected void save() throws DocumentException {
-        getDublinCore().save();
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#save()
+     */
+    public void save() throws TransactionException {
+        try {
+            getDublinCore().save();
+        } catch (DocumentException e) {
+            throw new TransactionException(e);
+        }
         getHistory().save();
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#checkin()
+     */
+    public void checkin() throws TransactionException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#checkout()
+     */
+    public void checkout() throws TransactionException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#isCheckedOut()
+     */
+    public boolean isCheckedOut() throws TransactionException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#lock()
+     */
+    public void lock() throws TransactionException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#unlock()
+     */
+    public void unlock() throws TransactionException {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @see org.apache.lenya.transaction.Transactionable#isLocked()
+     */
+    public boolean isLocked() throws TransactionException {
+        // TODO Auto-generated method stub
+        return false;
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java Thu Mar 31 04:49:41 2005
@@ -24,12 +24,13 @@
 
 import org.apache.lenya.cms.metadata.dublincore.DublinCore;
 import org.apache.lenya.cms.publication.util.DocumentVisitor;
+import org.apache.lenya.transaction.Transactionable;
 import org.apache.lenya.workflow.Workflowable;
 
 /**
  * A CMS document.
  */
-public interface Document extends Workflowable {
+public interface Document extends Workflowable, Transactionable {
     
     /**
      * The document namespace URI.

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java?view=diff&r1=159583&r2=159584
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java Thu Mar 31 04:49:41 2005
@@ -16,190 +16,146 @@
  */
 package org.apache.lenya.cms.publication;
 
-import org.apache.avalon.framework.service.ServiceException;
+import java.io.File;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.ServiceSelector;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceResolver;
+import org.apache.excalibur.source.SourceUtil;
+import org.apache.lenya.transaction.IdentityMap;
+import org.apache.lenya.transaction.Transactionable;
+import org.apache.lenya.transaction.TransactionableFactory;
 
 /**
- *  
+ * Document factory.
  */
-public class DocumentFactory {
+public class DocumentFactory extends AbstractLogEnabled implements TransactionableFactory {
 
-    private DocumentIdentityMap identityMap;
     protected ServiceManager manager;
 
     /**
      * Ctor.
      * @param manager The service manager.
-     * @param _identityMap The identity map.
      */
-    protected DocumentFactory(ServiceManager manager, DocumentIdentityMap _identityMap) {
-        this.identityMap = _identityMap;
+    public DocumentFactory(ServiceManager manager) {
         this.manager = manager;
     }
 
     /**
-     * Returns the identity map.
-     * @return An identity map.
-     */
-    protected DocumentIdentityMap getIdentityMap() {
-        return this.identityMap;
-    }
-
-    /**
-     * Checks if a webapp URL represents a document.
-     * @param publication The publication.
-     * @param webappUrl A web application URL.
-     * @return A boolean value.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    public boolean isDocument(Publication publication, String webappUrl)
-            throws DocumentBuildException {
-        if (publication.exists()) {
-            
-            ServiceSelector selector = null;
-            DocumentBuilder builder = null;
-            try {
-                selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
-                builder = (DocumentBuilder) selector.select(publication.getDocumentBuilderHint());
-                return builder.isDocument(publication, webappUrl);
-            } catch (ServiceException e) {
-                throw new DocumentBuildException(e);
-            }
-            finally {
-                if (selector != null) {
-                    if (builder != null) {
-                        selector.release(builder);
-                    }
-                    this.manager.release(selector);
-                }
-            }
-        }
-        else {
-            return false;
-        }
-    }
-
-    /**
-     * Builds a document in the default language.
-     * @param publication The publication.
-     * @param area The area.
-     * @param documentId The document ID.
-     * @return A document.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    public Document get(Publication publication, String area, String documentId)
-            throws DocumentBuildException {
-        return get(publication, area, documentId, publication.getDefaultLanguage());
-    }
-
-    /**
-     * Builds a document.
+     * Builds a document key.
      * @param publication The publication.
      * @param area The area.
      * @param documentId The document ID.
      * @param language The language.
-     * @return A document.
-     * @throws DocumentBuildException if an error occurs.
+     * @return A key.
      */
-    public Document get(Publication publication, String area, String documentId, String language)
-            throws DocumentBuildException {
-        return this.identityMap.get(publication, area, documentId, language);
+    public Object getKey(Publication publication, String area, String documentId, String language) {
+        return publication.getId() + ":" + area + ":" + documentId + ":" + language;
     }
 
     /**
-     * Builds a document from a URL.
-     * @param publication The publication.
+     * Builds a document key.
+     * @param map The identity map.
      * @param webappUrl The web application URL.
-     * @return A document.
-     * @throws DocumentBuildException if an error occurs.
-     */
-    public Document getFromURL(Publication publication, String webappUrl)
-            throws DocumentBuildException {
-        return this.identityMap.getFromURL(publication, webappUrl);
-    }
-
-    /**
-     * Builds a clone of a document for another language.
-     * @param document The document to clone.
-     * @param language The language of the target document.
-     * @return A document.
-     * @throws DocumentBuildException if an error occurs.
+     * @return A key.
      */
-    public Document getLanguageVersion(Document document, String language)
-            throws DocumentBuildException {
-        return get(document.getPublication(), document.getArea(), document.getId(), language);
-    }
-
-    /**
-     * Builds a clone of a document for another area.
-     * @param document The document to clone.
-     * @param area The area of the target document.
-     * @return A document.
-     * @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());
+    public Object getKey(DocumentIdentityMap map, String webappUrl) {
+        ServiceSelector selector = null;
+        DocumentBuilder builder = null;
+        SourceResolver resolver = null;
+        Source source = null;
+        Document document;
+        try {
+            resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+            source = resolver.resolveURI("context://");
+            File servletContext = SourceUtil.getFile(source);
+
+            PublicationFactory factory = PublicationFactory.getInstance(getLogger());
+            URLInformation info = new URLInformation(webappUrl);
+            String publicationId = info.getPublicationId();
+            Publication publication = factory.getPublication(publicationId, servletContext
+                    .getAbsolutePath());
+
+            selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
+            builder = (DocumentBuilder) selector.select(publication.getDocumentBuilderHint());
+            document = builder.buildDocument(map, publication, webappUrl);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (builder != null) {
+                    selector.release(builder);
+                }
+                this.manager.release(selector);
+            }
+            if (resolver != null) {
+                if (source != null) {
+                    resolver.release(source);
+                }
+                this.manager.release(resolver);
+            }
         }
-        return parent;
+        return getKey(document.getPublication(), document.getArea(), document.getId(), document
+                .getLanguage());
     }
 
     /**
-     * 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.
+     * @see org.apache.lenya.transaction.TransactionableFactory#build(org.apache.lenya.transaction.IdentityMap,
+     *      java.lang.Object)
      */
-    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());
+    public Transactionable build(IdentityMap map, Object key) throws Exception {
+
+        String keyString = (String) key;
+        String[] snippets = keyString.split(":");
+        String publicationId = snippets[0];
+        String area = snippets[1];
+        String documentId = snippets[2];
+        String language = snippets[3];
+
+        ServiceSelector selector = null;
+        DocumentBuilder builder = null;
+        SourceResolver resolver = null;
+        Source source = null;
+        Document document;
+        try {
+            resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+            source = resolver.resolveURI("context://");
+            File servletContext = SourceUtil.getFile(source);
+
+            PublicationFactory factory = PublicationFactory.getInstance(getLogger());
+            Publication publication = factory.getPublication(publicationId, servletContext
+                    .getAbsolutePath());
+
+            selector = (ServiceSelector) this.manager.lookup(DocumentBuilder.ROLE + "Selector");
+            builder = (DocumentBuilder) selector.select(publication.getDocumentBuilderHint());
+            String webappUrl = builder.buildCanonicalUrl(publication, area, documentId, language);
+            document = builder.buildDocument((DocumentIdentityMap) map, publication, webappUrl);
+        } finally {
+            if (selector != null) {
+                if (builder != null) {
+                    selector.release(builder);
+                }
+                this.manager.release(selector);
+            }
+            if (resolver != null) {
+                if (source != null) {
+                    resolver.release(source);
+                }
+                this.manager.release(resolver);
+            }
         }
-        return parent;
+        return document;
     }
 
     /**
-     * Checks if a string represents a valid document ID.
-     * @param id The string.
-     * @return A boolean value.
+     * @see org.apache.lenya.transaction.TransactionableFactory#getKey(org.apache.lenya.transaction.Transactionable)
      */
-    public boolean isValidDocumentId(String id) {
-
-        if (!id.startsWith("/")) {
-            return false;
-        }
-
-        String[] snippets = id.split("/");
-
-        if (snippets.length < 2) {
-            return false;
-        }
-
-        for (int i = 1; i < snippets.length; i++) {
-            if (!snippets[i].matches("[a-zA-Z0-9\\-]+")) {
-                return false;
-            }
-        }
-
-        return true;
+    public Object getKey(Transactionable transactionable) {
+        Document document = (Document) transactionable;
+        return getKey(document.getPublication(), document.getArea(), document.getId(), document
+                .getLanguage());
     }
 
 }



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