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/04/08 23:45:57 UTC

svn commit: r160622 - in lenya/trunk/src: java/org/apache/lenya/cms/ant/ java/org/apache/lenya/cms/cocoon/source/ java/org/apache/lenya/cms/metadata/dublincore/ java/org/apache/lenya/cms/metadata/usecases/ java/org/apache/lenya/cms/publication/ java/org/apache/lenya/cms/publication/task/ java/org/apache/lenya/cms/repository/ java/org/apache/lenya/cms/site/ java/org/apache/lenya/cms/site/tree/ java/org/apache/lenya/cms/site/usecases/ java/org/apache/lenya/cms/workflow/ java/org/apache/lenya/transaction/ webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/

Author: andreas
Date: Fri Apr  8 14:45:52 2005
New Revision: 160622

URL: http://svn.apache.org/viewcvs?view=rev&rev=160622
Log:
Introduced interfaces Versionable, Lockable, and Identifiable. This makes it easier to add the appropriate functionality to a class. Furthermore, a bug re. recursive deactivation was fixed.

Added:
    lenya/trunk/src/java/org/apache/lenya/transaction/Identifiable.java
    lenya/trunk/src/java/org/apache/lenya/transaction/IdentifiableFactory.java
    lenya/trunk/src/java/org/apache/lenya/transaction/Lockable.java
    lenya/trunk/src/java/org/apache/lenya/transaction/Versionable.java
Removed:
    lenya/trunk/src/java/org/apache/lenya/transaction/TransactionableFactory.java
Modified:
    lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java
    lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java
    lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java
    lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java
    lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultResourcesManager.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/task/PublicationTask.java
    lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java
    lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java
    lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNodeFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTree.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTreeFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/tree/TreeSiteManager.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Create.java
    lenya/trunk/src/java/org/apache/lenya/cms/site/usecases/Nudge.java
    lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowManagerImpl.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/Transactionable.java
    lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
    lenya/trunk/src/webapp/lenya/pubs/default/java/src/org/apache/lenya/defaultpub/cms/usecases/Deactivate.java

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=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/SetIdentifier.java Fri Apr  8 14:45:52 2005
@@ -82,7 +82,6 @@
     public void writeDCIdentifier(Document document) throws DocumentException {
         DublinCore dublincore = document.getDublinCore();
         dublincore.setValue("identifier", this.documentid);
-        dublincore.save();
     }
 
     /**

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=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ant/WriteDCParametersTask.java Fri Apr  8 14:45:52 2005
@@ -241,7 +241,6 @@
         dc.setValue(DublinCore.ELEMENT_SUBJECT, _subject);
         dc.setValue(DublinCore.ELEMENT_PUBLISHER, _publisher);
         dc.setValue(DublinCore.ELEMENT_RIGHTS, _rights);
-        dc.save();
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/cocoon/source/RepositorySource.java Fri Apr  8 14:45:52 2005
@@ -81,11 +81,11 @@
 
         setScheme(scheme);
 
-        if (map.getFactory(Node.TRANSACTIONABLE_TYPE) == null) {
-            map.setFactory(Node.TRANSACTIONABLE_TYPE, new SourceNodeFactory(this.manager, logger));
+        if (map.getFactory(Node.IDENTIFIABLE_TYPE) == null) {
+            map.setFactory(Node.IDENTIFIABLE_TYPE, new SourceNodeFactory(this.manager, logger));
         }
 
-        this.node = (Node) map.get(Node.TRANSACTIONABLE_TYPE, uri);
+        this.node = (Node) map.get(Node.IDENTIFIABLE_TYPE, uri);
 
     }
 
@@ -113,11 +113,10 @@
      */
     public void delete() {
         try {
-            if (!this.node.isCheckedOut()) {
-                throw new RuntimeException("Cannot delete source [" + getURI()
-                        + "]: not checked out!");
+            if (!this.node.isLocked()) {
+                throw new RuntimeException("Cannot delete source [" + getURI() + "]: not locked!");
             } else {
-                this.node.delete();
+                this.identityMap.getUnitOfWork().registerRemoved(this.node);
             }
         } catch (TransactionException e) {
             throw new RuntimeException(e);
@@ -224,22 +223,16 @@
         }
     }
 
-    /*
-     * (non-Javadoc)
+    /**
      * @see org.apache.lenya.cms.cocoon.source.TransactionableSource#checkout()
      */
     public void checkout() throws TransactionException {
-        // TODO Auto-generated method stub
-
     }
 
-    /*
-     * (non-Javadoc)
+    /**
      * @see org.apache.lenya.cms.cocoon.source.TransactionableSource#checkin()
      */
     public void checkin() throws TransactionException {
-        // TODO Auto-generated method stub
-
     }
 
     /**
@@ -278,11 +271,11 @@
         }
         return false;
     }
-    
+
     public Document getDocument() {
         return this.node.getDocument();
     }
-    
+
     public void setDocument(Document document) {
         this.node.setDocument(document);
         try {
@@ -291,7 +284,7 @@
             throw new RuntimeException(e);
         }
     }
-    
+
     public void registerDirty() throws TransactionException {
         this.identityMap.getUnitOfWork().registerDirty(this.node);
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java Fri Apr  8 14:45:52 2005
@@ -347,13 +347,6 @@
     static final String TERM_VALID = "valid";
 
     /**
-     * Save the meta data.
-     * 
-     * @throws DocumentException if the meta data could not be made persistent.
-     */
-    void save() throws DocumentException;
-
-    /**
      * Returns the values for a certain key.
      * @param key The key.
      * @return An array of strings.

Modified: lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreImpl.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/metadata/dublincore/DublinCoreImpl.java Fri Apr  8 14:45:52 2005
@@ -150,7 +150,7 @@
      * Save the meta data.
      * @throws DocumentException if the meta data could not be made persistent.
      */
-    public void save() throws DocumentException {
+    protected void save() throws DocumentException {
 
         try {
 
@@ -290,6 +290,7 @@
             throw new DocumentException("The key [" + key
                     + "] does not refer to a dublin core element or term!");
         }
+        save();
     }
 
     /**
@@ -312,6 +313,7 @@
             throw new DocumentException("The key [" + key
                     + "] does not refer to a dublin core element or term!");
         }
+        save();
     }
 
     /**
@@ -325,6 +327,7 @@
         for (int i = 0; i < values.length; i++) {
             addValue(key, values[i]);
         }
+        save();
     }
 
     /**
@@ -356,6 +359,7 @@
             throw new DocumentException("The key [" + key
                     + "] does not refer to a dublin core element or term!");
         }
+        save();
     }
 
     /**
@@ -374,6 +378,7 @@
             throw new DocumentException("The key [" + key
                     + "] does not refer to a dublin core element or term!");
         }
+        save();
     }
 
     /**
@@ -392,6 +397,7 @@
             removeAllValues(key);
             addValues(key, other.getValues(key));
         }
+        save();
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/metadata/usecases/Metadata.java Fri Apr  8 14:45:52 2005
@@ -110,7 +110,6 @@
         this.dc.setValue(DublinCore.ELEMENT_SUBJECT, subject);
         this.dc.setValue(DublinCore.ELEMENT_PUBLISHER, publisher);
         this.dc.setValue(DublinCore.ELEMENT_RIGHTS, rights);
-        this.dc.save();
         //TODO set workflow situation to edit here.
     }
 

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=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultDocument.java Fri Apr  8 14:45:52 2005
@@ -37,7 +37,6 @@
 import org.apache.lenya.cms.workflow.History;
 import org.apache.lenya.transaction.Lock;
 import org.apache.lenya.transaction.TransactionException;
-import org.apache.lenya.transaction.Transactionable;
 import org.apache.lenya.workflow.Situation;
 import org.apache.lenya.workflow.Version;
 import org.apache.lenya.workflow.Workflow;
@@ -46,7 +45,7 @@
 /**
  * A typical CMS document.
  */
-public class DefaultDocument extends AbstractLogEnabled implements Document, Transactionable {
+public class DefaultDocument extends AbstractLogEnabled implements Document {
 
     private String id;
     private DublinCore dublincore;
@@ -437,35 +436,26 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#save()
+     * @see org.apache.lenya.cms.publication.Document#delete()
      */
-    public void save() throws TransactionException {
+    public void delete() throws DocumentException {
         try {
-            getDublinCore().save();
+            SourceUtil.delete(getSourceURI(), this.manager);
+            if (getArea().equals(Publication.AUTHORING_AREA)) {
+                SourceUtil.delete(getHistory().getSourceURI(), this.manager);
+            }
         } catch (Exception e) {
-            throw new TransactionException(e);
+            throw new DocumentException(e);
         }
     }
 
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#delete()
-     */
-    public void delete() throws TransactionException {
-    }
+    protected static final String IDENTIFIABLE_TYPE = "document";
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#create()
+     * @see org.apache.lenya.transaction.Identifiable#getIdentifiableType()
      */
-    public void create() throws TransactionException {
-    }
-
-    protected static final String TRANSACTIONABLE_TYPE = "document";
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#getTransactionableType()
-     */
-    public String getTransactionableType() {
-        return TRANSACTIONABLE_TYPE;
+    public String getIdentifiableType() {
+        return IDENTIFIABLE_TYPE;
     }
 
     /**
@@ -477,26 +467,7 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#checkin()
-     */
-    public void checkin() throws TransactionException {
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#checkout()
-     */
-    public void checkout() throws TransactionException {
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#isCheckedOut()
-     */
-    public boolean isCheckedOut() throws TransactionException {
-        return false;
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#lock()
+     * @see org.apache.lenya.transaction.Lockable#lock()
      */
     public void lock() throws TransactionException {
         SourceUtil.lock(getSourceURI(), this.manager);
@@ -504,30 +475,23 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#getLock()
+     * @see org.apache.lenya.transaction.Lockable#getLock()
      */
     public Lock getLock() {
         return null;
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#unlock()
+     * @see org.apache.lenya.transaction.Lockable#unlock()
      */
     public void unlock() throws TransactionException {
         SourceUtil.unlock(getSourceURI(), this.manager);
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#isLocked()
+     * @see org.apache.lenya.transaction.Lockable#isLocked()
      */
     public boolean isLocked() throws TransactionException {
-        return false;
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#hasChanged()
-     */
-    public boolean hasChanged() throws TransactionException {
         return false;
     }
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultResourcesManager.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultResourcesManager.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultResourcesManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DefaultResourcesManager.java Fri Apr  8 14:45:52 2005
@@ -102,6 +102,7 @@
     /**
      * Create a new instance of Resources.
      * @param _document the document for which the resources are managed
+     * @param manager The service manager.
      */
     public DefaultResourcesManager(Document _document, ServiceManager manager) {
         this.document = _document;
@@ -233,7 +234,6 @@
                 value = (String) entry.getValue();
                 dc.setValue(key, value);
             }
-            dc.save();
         } catch (final Exception e) {
             getLogger().error("Saving of [" + metaDataFile + "] �failed.");
             throw new DocumentException(e);

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=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/Document.java Fri Apr  8 14:45:52 2005
@@ -24,13 +24,14 @@
 
 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.transaction.Identifiable;
+import org.apache.lenya.transaction.Lockable;
 import org.apache.lenya.workflow.Workflowable;
 
 /**
  * A CMS document.
  */
-public interface Document extends Workflowable, Transactionable {
+public interface Document extends Workflowable, Identifiable, Lockable {
     
     /**
      * The document namespace URI.
@@ -188,5 +189,10 @@
      * @throws PublicationException if an error occurs.
      */
     void accept(DocumentVisitor visitor) throws PublicationException;
-    
+
+    /**
+     * Deletes the document.
+     * @throws DocumentException if an error occurs.
+     */
+    void delete() throws DocumentException;
 }

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=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentFactory.java Fri Apr  8 14:45:52 2005
@@ -24,14 +24,14 @@
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
 import org.apache.excalibur.source.SourceUtil;
+import org.apache.lenya.transaction.Identifiable;
 import org.apache.lenya.transaction.IdentityMap;
-import org.apache.lenya.transaction.Transactionable;
-import org.apache.lenya.transaction.TransactionableFactory;
+import org.apache.lenya.transaction.IdentifiableFactory;
 
 /**
  * Document factory.
  */
-public class DocumentFactory extends AbstractLogEnabled implements TransactionableFactory {
+public class DocumentFactory extends AbstractLogEnabled implements IdentifiableFactory {
 
     protected ServiceManager manager;
 
@@ -102,10 +102,10 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.TransactionableFactory#build(org.apache.lenya.transaction.IdentityMap,
+     * @see org.apache.lenya.transaction.IdentifiableFactory#build(org.apache.lenya.transaction.IdentityMap,
      *      java.lang.String)
      */
-    public Transactionable build(IdentityMap map, String key) throws Exception {
+    public Identifiable build(IdentityMap map, String key) throws Exception {
 
         String[] snippets = key.split(":");
         String publicationId = snippets[0];

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentityMap.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentityMap.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentityMap.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentIdentityMap.java Fri Apr  8 14:45:52 2005
@@ -26,7 +26,7 @@
 import org.apache.lenya.cms.publication.DocumentBuilder;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.transaction.IdentityMapImpl;
-import org.apache.lenya.transaction.TransactionableFactory;
+import org.apache.lenya.transaction.IdentifiableFactory;
 
 /**
  * A DocumentIdentityMap avoids the multiple instanciation of a document object.
@@ -48,8 +48,8 @@
     /**
      * @see org.apache.lenya.transaction.IdentityMap#getFactory(java.lang.String)
      */
-    public TransactionableFactory getFactory(String type) {
-        TransactionableFactory factory = super.getFactory(type);
+    public IdentifiableFactory getFactory(String type) {
+        IdentifiableFactory factory = super.getFactory(type);
         if (factory == null && type.equals(Document.TRANSACTIONABLE_TYPE)) {
             factory = new DocumentFactory(this.manager);
             ContainerUtil.enableLogging(factory, getLogger());

Modified: lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java Fri Apr  8 14:45:52 2005
@@ -140,8 +140,7 @@
             siteManager = (SiteManager) selector.select(publication.getSiteManagerHint());
             siteManager.delete(document);
             
-            UnitOfWork unit = document.getIdentityMap().getUnitOfWork();
-            unit.registerRemoved(document);
+            document.delete();
         } catch (Exception e) {
             throw new PublicationException(e);
         } finally {

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=160621&r2=160622
==============================================================================
--- 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 Fri Apr  8 14:45:52 2005
@@ -41,7 +41,7 @@
 import org.apache.lenya.cms.task.Task;
 import org.apache.lenya.cms.workflow.WorkflowManager;
 import org.apache.lenya.cms.workflow.WorkflowResolver;
-import org.apache.lenya.transaction.TransactionableFactory;
+import org.apache.lenya.transaction.IdentifiableFactory;
 import org.apache.lenya.workflow.Situation;
 import org.apache.log4j.Logger;
 
@@ -240,17 +240,17 @@
     protected SiteTree getSiteTree1(String area) {
         try {
 
-            TransactionableFactory factory = getIdentityMap()
-                    .getFactory(SiteTree.TRANSACTIONABLE_TYPE);
+            IdentifiableFactory factory = getIdentityMap()
+                    .getFactory(SiteTree.IDENTIFIABLE_TYPE);
             if (factory == null) {
                 factory = new SiteTreeFactory(getServiceManager());
                 ContainerUtil.enableLogging(factory, new ConsoleLogger());
-                getIdentityMap().setFactory(SiteTree.TRANSACTIONABLE_TYPE, factory);
+                getIdentityMap().setFactory(SiteTree.IDENTIFIABLE_TYPE, factory);
             }
             
             String key = getPublication().getId() + ":" + area;
 
-            return (SiteTree) getIdentityMap().get(SiteTree.TRANSACTIONABLE_TYPE, key);
+            return (SiteTree) getIdentityMap().get(SiteTree.IDENTIFIABLE_TYPE, key);
         } catch (ExecutionException e) {
             throw new RuntimeException(e);
         }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java Fri Apr  8 14:45:52 2005
@@ -1,8 +1,18 @@
 /*
- * Created on 06.04.2005
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package org.apache.lenya.cms.repository;
 
@@ -11,19 +21,31 @@
 import org.w3c.dom.Document;
 
 /**
- * @author nobby
+ * Repository node.
  *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
+ * @version $Id:$
  */
 public interface Node extends Transactionable {
 
+    /**
+     * @return The DOM that holds the information.
+     */
     Document getDocument();
     
+    /**
+     * @param document The DOM that holds the information.
+     */
     void setDocument(Document document);
     
-    String TRANSACTIONABLE_TYPE = "node";
+    /**
+     * The identifiable type.
+     */
+    String IDENTIFIABLE_TYPE = "node";
     
+    /**
+     * @return if the node exists.
+     * @throws TransactionException if an error occurs.
+     */
     boolean exists() throws TransactionException;
     
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNode.java Fri Apr  8 14:45:52 2005
@@ -1,8 +1,18 @@
 /*
- * Created on 06.04.2005
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package org.apache.lenya.cms.repository;
 
@@ -136,9 +146,9 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#delete()
+     * @see org.apache.lenya.transaction.Transactionable#deleteTransactionable()
      */
-    public void delete() throws TransactionException {
+    public void deleteTransactionable() throws TransactionException {
         try {
             if (!isCheckedOut()) {
                 throw new RuntimeException("Cannot delete source [" + this.sourceUri
@@ -210,9 +220,9 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#save()
+     * @see org.apache.lenya.transaction.Transactionable#saveTransactionable()
      */
-    public void save() throws TransactionException {
+    public void saveTransactionable() throws TransactionException {
         if (!isCheckedOut()) {
             throw new TransactionException("Cannot save node [" + this.sourceUri
                     + "]: not checked out!");
@@ -229,9 +239,9 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#create()
+     * @see org.apache.lenya.transaction.Transactionable#createTransactionable()
      */
-    public void create() throws TransactionException {
+    public void createTransactionable() throws TransactionException {
     }
 
     /**
@@ -274,10 +284,10 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#getTransactionableType()
+     * @see org.apache.lenya.transaction.Identifiable#getIdentifiableType()
      */
-    public String getTransactionableType() {
-        return Node.TRANSACTIONABLE_TYPE;
+    public String getIdentifiableType() {
+        return Node.IDENTIFIABLE_TYPE;
     }
 
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNodeFactory.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNodeFactory.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNodeFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/SourceNodeFactory.java Fri Apr  8 14:45:52 2005
@@ -1,25 +1,34 @@
 /*
- * Created on 06.04.2005
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
  */
 package org.apache.lenya.cms.repository;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.lenya.transaction.Identifiable;
 import org.apache.lenya.transaction.IdentityMap;
-import org.apache.lenya.transaction.Transactionable;
-import org.apache.lenya.transaction.TransactionableFactory;
+import org.apache.lenya.transaction.IdentifiableFactory;
 
 /**
- * @author nobby
+ * Factory to create source nodes.
  *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
+ * @version $Id:$
  */
-public class SourceNodeFactory extends AbstractLogEnabled implements TransactionableFactory {
+public class SourceNodeFactory extends AbstractLogEnabled implements IdentifiableFactory {
 
     private ServiceManager manager;
     
@@ -34,9 +43,9 @@
     }
     
     /**
-     * @see org.apache.lenya.transaction.TransactionableFactory#build(org.apache.lenya.transaction.IdentityMap, java.lang.String)
+     * @see org.apache.lenya.transaction.IdentifiableFactory#build(org.apache.lenya.transaction.IdentityMap, java.lang.String)
      */
-    public Transactionable build(IdentityMap map, String key) throws Exception {
+    public Identifiable build(IdentityMap map, String key) throws Exception {
         return new SourceNode(map, key, this.manager, getLogger());
     }
 

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/SiteStructure.java Fri Apr  8 14:45:52 2005
@@ -16,13 +16,14 @@
  */
 package org.apache.lenya.cms.site;
 
-import org.apache.lenya.transaction.Transactionable;
+import org.apache.lenya.transaction.Identifiable;
+import org.apache.lenya.transaction.Lockable;
 
 /**
  * Object to hold a site structure information.
  *
  * @version $Id:$
  */
-public interface SiteStructure extends Transactionable {
+public interface SiteStructure extends Identifiable, Lockable {
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/tree/DefaultSiteTree.java Fri Apr  8 14:45:52 2005
@@ -31,7 +31,6 @@
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.site.Label;
 import org.apache.lenya.cms.site.SiteException;
-import org.apache.lenya.transaction.IdentityMap;
 import org.apache.lenya.transaction.Lock;
 import org.apache.lenya.transaction.TransactionException;
 import org.apache.lenya.xml.DocumentHelper;
@@ -64,20 +63,14 @@
     // the area is only retained to provide some more info when raising an
     // exception.
     private String area = "";
-    private IdentityMap identityMap;
-    private Publication publication;
     protected ServiceManager manager;
 
-    protected void setup(IdentityMap map, Publication publication) {
-        this.identityMap = map;
-        this.publication = publication;
-    }
-
     /**
      * Create a DefaultSiteTree
-     * @param pubDir the publication directory
-     * @param _area the area
-     * @throws SiteException if an error occurs
+     * @param publication The publication.
+     * @param _area The area.
+     * @param manager The service manager.
+     * @throws SiteException if an error occurs.
      */
     protected DefaultSiteTree(Publication publication, String _area, ServiceManager manager)
             throws SiteException {
@@ -87,8 +80,6 @@
         this.manager = manager;
     }
 
-    private long lastModified = 0;
-
     protected Document load() throws SiteException {
         try {
             Document document = SourceUtil.readDOM(this.sourceUri, this.manager);
@@ -520,12 +511,6 @@
     }
 
     /**
-     * @see org.apache.lenya.cms.site.tree.SiteTree#save()
-     */
-    public synchronized void save() throws TransactionException {
-    }
-
-    /**
      * @see org.apache.lenya.cms.site.tree.SiteTree#setLabel(java.lang.String,
      *      org.apache.lenya.cms.site.Label)
      */
@@ -538,76 +523,44 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#checkin()
-     */
-    public void checkin() throws TransactionException {
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#checkout()
-     */
-    public void checkout() throws TransactionException {
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#lock()
+     * @see org.apache.lenya.transaction.Lockable#lock()
      */
     public void lock() throws TransactionException {
         SourceUtil.lock(this.sourceUri, this.manager);
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#unlock()
+     * @see org.apache.lenya.transaction.Lockable#unlock()
      */
     public void unlock() throws TransactionException {
         SourceUtil.unlock(this.sourceUri, this.manager);
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#isLocked()
+     * @see org.apache.lenya.transaction.Lockable#isLocked()
      */
     public boolean isLocked() throws TransactionException {
         return false;
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#getTransactionableType()
+     * @see org.apache.lenya.transaction.Identifiable#getIdentifiableType()
      */
-    public String getTransactionableType() {
-        return SiteTree.TRANSACTIONABLE_TYPE;
+    public String getIdentifiableType() {
+        return SiteTree.IDENTIFIABLE_TYPE;
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#delete()
-     */
-    public void delete() throws TransactionException {
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#create()
-     */
-    public void create() throws TransactionException {
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#getLock()
+     * @see org.apache.lenya.transaction.Lockable#getLock()
      */
     public Lock getLock() {
         return null;
     }
 
     /**
-     * @see org.apache.lenya.transaction.Transactionable#hasChanged()
-     */
-    public boolean hasChanged() throws TransactionException {
-        return false;
-    }
-
-    /**
-     * @see org.apache.lenya.transaction.Transactionable#isCheckedOut()
+     * @see org.apache.lenya.cms.site.tree.SiteTree#save()
      */
-    public boolean isCheckedOut() throws TransactionException {
-        return false;
+    public void save() throws TransactionException {
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTree.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTree.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTree.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTree.java Fri Apr  8 14:45:52 2005
@@ -20,6 +20,7 @@
 import org.apache.lenya.cms.site.Label;
 import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteStructure;
+import org.apache.lenya.transaction.TransactionException;
 
 /**
  * A sitetree.
@@ -29,9 +30,9 @@
 public interface SiteTree extends SiteStructure {
 
     /**
-     * The type of sitetree transactionable objects.
+     * The type of sitetree identifiable objects.
      */
-    String TRANSACTIONABLE_TYPE = "site";
+    String IDENTIFIABLE_TYPE = "site";
 
     /**
      * Add a node.
@@ -209,5 +210,10 @@
      */
     void importSubtree(SiteTreeNode subtreeRoot, SiteTreeNode newParent, String newid,
             String refDocumentId) throws SiteException;
+
+    /**
+     * @deprecated Superceded by transactions.
+     */
+    void save() throws TransactionException;
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTreeFactory.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTreeFactory.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTreeFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/tree/SiteTreeFactory.java Fri Apr  8 14:45:52 2005
@@ -26,16 +26,16 @@
 import org.apache.excalibur.source.SourceUtil;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.publication.PublicationFactory;
+import org.apache.lenya.transaction.Identifiable;
 import org.apache.lenya.transaction.IdentityMap;
-import org.apache.lenya.transaction.Transactionable;
-import org.apache.lenya.transaction.TransactionableFactory;
+import org.apache.lenya.transaction.IdentifiableFactory;
 
 /**
  * Factory for sitetree objects.
  * 
  * @version $Id:$
  */
-public class SiteTreeFactory extends AbstractLogEnabled implements TransactionableFactory {
+public class SiteTreeFactory extends AbstractLogEnabled implements IdentifiableFactory {
 
     protected ServiceManager manager;
 
@@ -48,10 +48,10 @@
     }
 
     /**
-     * @see org.apache.lenya.transaction.TransactionableFactory#build(org.apache.lenya.transaction.IdentityMap,
+     * @see org.apache.lenya.transaction.IdentifiableFactory#build(org.apache.lenya.transaction.IdentityMap,
      *      java.lang.String)
      */
-    public Transactionable build(IdentityMap map, String key) throws Exception {
+    public Identifiable build(IdentityMap map, String key) throws Exception {
         String[] snippets = key.split(":");
         String publicationId = snippets[0];
         String area = snippets[1];
@@ -69,7 +69,6 @@
                     .getAbsolutePath());
            
             tree = new DefaultSiteTree(publication, area, this.manager);
-            tree.setup(map, publication);
             ContainerUtil.enableLogging(tree, getLogger());
             
         } finally {

Modified: lenya/trunk/src/java/org/apache/lenya/cms/site/tree/TreeSiteManager.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/site/tree/TreeSiteManager.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/site/tree/TreeSiteManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/site/tree/TreeSiteManager.java Fri Apr  8 14:45:52 2005
@@ -33,8 +33,7 @@
 import org.apache.lenya.cms.site.Label;
 import org.apache.lenya.cms.site.SiteException;
 import org.apache.lenya.cms.site.SiteStructure;
-import org.apache.lenya.transaction.TransactionException;
-import org.apache.lenya.transaction.TransactionableFactory;
+import org.apache.lenya.transaction.IdentifiableFactory;
 
 /**
  * A tree-based site manager.
@@ -64,13 +63,13 @@
 
         String key = getKey(publication, area);
         DefaultSiteTree sitetree;
-        TransactionableFactory factory = map.getFactory(SiteTree.TRANSACTIONABLE_TYPE);
+        IdentifiableFactory factory = map.getFactory(SiteTree.IDENTIFIABLE_TYPE);
         if (factory == null) {
             factory = new SiteTreeFactory(this.manager);
             ContainerUtil.enableLogging(factory, getLogger());
-            map.setFactory(SiteTree.TRANSACTIONABLE_TYPE, factory);
+            map.setFactory(SiteTree.IDENTIFIABLE_TYPE, factory);
         }
-        sitetree = (DefaultSiteTree) map.get(SiteTree.TRANSACTIONABLE_TYPE, key);
+        sitetree = (DefaultSiteTree) map.get(SiteTree.IDENTIFIABLE_TYPE, key);
 
         return sitetree;
     }

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=160621&r2=160622
==============================================================================
--- 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 Fri Apr  8 14:45:52 2005
@@ -172,7 +172,6 @@
         dublinCore.setValue(DublinCore.ELEMENT_RIGHTS,
                 getParameterAsString(DublinCore.ELEMENT_RIGHTS));
         dublinCore.setValue(DublinCore.ELEMENT_LANGUAGE, getParameterAsString(LANGUAGE));
-        dublinCore.save();
     }
 
     /**

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=160621&r2=160622
==============================================================================
--- 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 Fri Apr  8 14:45:52 2005
@@ -113,7 +113,6 @@
                 } else if (direction.equals(DOWN)) {
                     tree.moveDown(getSourceDocument().getId());
                 }
-                tree.save();
             }
         } catch (Exception e) {
             throw new RuntimeException(e);

Modified: lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowManagerImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowManagerImpl.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowManagerImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowManagerImpl.java Fri Apr  8 14:45:52 2005
@@ -216,29 +216,17 @@
      */
     public void deleteHistory(Document sourceDocument) throws WorkflowException {
         WorkflowResolver resolver = null;
-        SourceResolver sourceResolver = null;
-        Source historySource = null;
         try {
             resolver = (WorkflowResolver) this.manager.lookup(WorkflowResolver.ROLE);
             if (resolver.hasWorkflow(sourceDocument)) {
-                sourceResolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
-                String uri = ((DefaultDocument) sourceDocument).getHistory().getSourceURI();
-                historySource = sourceResolver.resolveURI(uri);
-                if (historySource.exists()) {
-                    ((ModifiableSource) historySource).delete();
-                }
+                SourceUtil.delete(((DefaultDocument) sourceDocument).getHistory().getSourceURI(),
+                        this.manager);
             }
         } catch (Exception e) {
             throw new WorkflowException(e);
         } finally {
             if (resolver != null) {
                 this.manager.release(resolver);
-            }
-            if (sourceResolver != null) {
-                if (historySource != null) {
-                    sourceResolver.release(historySource);
-                }
-                this.manager.release(sourceResolver);
             }
         }
     }

Added: lenya/trunk/src/java/org/apache/lenya/transaction/Identifiable.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/Identifiable.java?view=auto&rev=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/Identifiable.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/Identifiable.java Fri Apr  8 14:45:52 2005
@@ -0,0 +1,22 @@
+/*
+ * Created on 08.04.2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.apache.lenya.transaction;
+
+/**
+ * @author nobby
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public interface Identifiable {
+
+    /**
+     * @return The type of the identifiable.
+     */
+    String getIdentifiableType();
+    
+}

Added: lenya/trunk/src/java/org/apache/lenya/transaction/IdentifiableFactory.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/IdentifiableFactory.java?view=auto&rev=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/IdentifiableFactory.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/IdentifiableFactory.java Fri Apr  8 14:45:52 2005
@@ -0,0 +1,35 @@
+/*
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.lenya.transaction;
+
+/**
+ * Factory for transactionables.
+ *
+ * @version $Id:$
+ */
+public interface IdentifiableFactory {
+
+    /**
+     * Builds an identifiable.
+     * @param map The identity map.
+     * @param key The key.
+     * @return A transactionable.
+     * @throws Exception if an error occurs.
+     */
+    Identifiable build(IdentityMap map, String key) throws Exception;
+    
+}

Modified: lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMap.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMap.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMap.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMap.java Fri Apr  8 14:45:52 2005
@@ -28,20 +28,20 @@
      * @param key The key for the transactionable.
      * @return A transcationable.
      */
-    Transactionable get(String type, String key);
+    Identifiable get(String type, String key);
 
     /**
      * Sets the factory.
      * @param type The transactionable type to use the factory for.
      * @param factory The factory to use.
      */
-    void setFactory(String type, TransactionableFactory factory);
+    void setFactory(String type, IdentifiableFactory factory);
 
     /**
      * @param type The type to return the factory for.
      * @return The factory.
      */
-    TransactionableFactory getFactory(String type);
+    IdentifiableFactory getFactory(String type);
 
     /**
      * Returns the unit of work. This maybe <code>null</code> if the identity map is not involved
@@ -58,6 +58,6 @@
     /**
      * @return All objects in this map.
      */
-    Transactionable[] getObjects();
+    Identifiable[] getObjects();
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMapImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMapImpl.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMapImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/IdentityMapImpl.java Fri Apr  8 14:45:52 2005
@@ -36,39 +36,39 @@
     /**
      * @see org.apache.lenya.transaction.IdentityMap#get(java.lang.String, java.lang.String)
      */
-    public Transactionable get(String type, String key) {
+    public Identifiable get(String type, String key) {
         Map map = (Map) this.maps.get(type);
         if (map == null) {
             map = new HashMap();
             this.maps.put(type, map);
         }
-        Transactionable transactionable = (Transactionable) map.get(key);
-        if (transactionable == null) {
+        Identifiable object = (Identifiable) map.get(key);
+        if (object == null) {
             try {
-                transactionable = getFactory(type).build(this, key);
+                object = getFactory(type).build(this, key);
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
-            map.put(key, transactionable);
+            map.put(key, object);
         }
-        return transactionable;
+        return object;
     }
 
     private Map factories = new HashMap();
 
     /**
      * @see org.apache.lenya.transaction.IdentityMap#setFactory(java.lang.String,
-     *      org.apache.lenya.transaction.TransactionableFactory)
+     *      org.apache.lenya.transaction.IdentifiableFactory)
      */
-    public void setFactory(String type, TransactionableFactory factory) {
+    public void setFactory(String type, IdentifiableFactory factory) {
         this.factories.put(type, factory);
     }
 
     /**
      * @see org.apache.lenya.transaction.IdentityMap#getFactory(java.lang.String)
      */
-    public TransactionableFactory getFactory(String type) {
-        return (TransactionableFactory) this.factories.get(type);
+    public IdentifiableFactory getFactory(String type) {
+        return (IdentifiableFactory) this.factories.get(type);
     }
 
     private UnitOfWork unitOfWork;
@@ -90,7 +90,7 @@
     /**
      * @see org.apache.lenya.transaction.IdentityMap#getObjects()
      */
-    public Transactionable[] getObjects() {
+    public Identifiable[] getObjects() {
         Set objects = new HashSet();
         for (Iterator i = this.maps.values().iterator(); i.hasNext(); ) {
             Map map = (Map) i.next();
@@ -98,7 +98,7 @@
                 objects.add(j.next());
             }
         }
-        return (Transactionable[]) objects.toArray(new Transactionable[objects.size()]);
+        return (Identifiable[]) objects.toArray(new Identifiable[objects.size()]);
     }
 
 }

Added: lenya/trunk/src/java/org/apache/lenya/transaction/Lockable.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/Lockable.java?view=auto&rev=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/Lockable.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/Lockable.java Fri Apr  8 14:45:52 2005
@@ -0,0 +1,49 @@
+/*
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.lenya.transaction;
+
+/**
+ * Object that can be locked.
+ *
+ * @version $Id:$
+ */
+public interface Lockable {
+    
+    /**
+     * Locks this object.
+     * @throws TransactionException if an error occurs.
+     */
+    void lock() throws TransactionException;
+
+    /**
+     * Unlocks this object.
+     * @throws TransactionException if an error occurs.
+     */
+    void unlock() throws TransactionException;
+
+    /**
+     * @return if this object is locked.
+     * @throws TransactionException if an error occurs.
+     */
+    boolean isLocked() throws TransactionException;
+
+    /**
+     * @return The lock which is held by this object.
+     */
+    Lock getLock();
+
+}
\ No newline at end of file

Modified: lenya/trunk/src/java/org/apache/lenya/transaction/Transactionable.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/Transactionable.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/Transactionable.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/Transactionable.java Fri Apr  8 14:45:52 2005
@@ -21,77 +21,24 @@
  *
  * @version $Id:$
  */
-public interface Transactionable {
+public interface Transactionable extends Identifiable, Versionable {
 
     /**
      * Saves the object.
      * @throws TransactionException if an error occurs.
      */
-    void save() throws TransactionException;
+    void saveTransactionable() throws TransactionException;
 
     /**
      * Deletes the object.
      * @throws TransactionException if an error occurs.
      */
-    void delete() throws TransactionException;
+    void deleteTransactionable() throws TransactionException;
     
     /**
      * Creates the object.
      * @throws TransactionException if an error occurs.
      */
-    void create() throws TransactionException;
-    
-    /**
-     * Checks the object in.
-     * @throws TransactionException if an error occurs.
-     */
-    void checkin() throws TransactionException;
-    
-    /**
-     * Checks the object out.
-     * @throws TransactionException if an error occurs.
-     */
-    void checkout() throws TransactionException;
-    
-    /**
-     * @return if the object is checked out.
-     * @throws TransactionException if an error occurs.
-     */
-    boolean isCheckedOut() throws TransactionException;
-    
-    /**
-     * Locks this object.
-     * @throws TransactionException if an error occurs.
-     */
-    void lock() throws TransactionException;
-    
-    /**
-     * @return The lock which is held by this object.
-     */
-    Lock getLock();
-    
-    /**
-     * Unlocks this object.
-     * @throws TransactionException if an error occurs.
-     */
-    void unlock() throws TransactionException;
-    
-    /**
-     * @return if this object is locked.
-     * @throws TransactionException if an error occurs.
-     */
-    boolean isLocked() throws TransactionException;
-    
-    /**
-     * @return The type of the transactionable.
-     */
-    String getTransactionableType();
-    
-    /**
-     * Checks if the transactionable has been changed since it has been locked.
-     * @return A boolean value.
-     * @throws TransactionException if an error occurs.
-     */
-    boolean hasChanged() throws TransactionException;
+    void createTransactionable() throws TransactionException;
     
 }

Modified: lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java?view=diff&r1=160621&r2=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java Fri Apr  8 14:45:52 2005
@@ -116,19 +116,19 @@
 
         for (Iterator i = this.newObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
-            t.create();
-            t.save();
+            t.createTransactionable();
+            t.saveTransactionable();
         }
         for (Iterator i = this.modifiedObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
             if (getLogger().isDebugEnabled()) {
                 getLogger().debug("save [" + t + "]");
             }
-            t.save();
+            t.saveTransactionable();
         }
         for (Iterator i = this.removedObjects.iterator(); i.hasNext();) {
             Transactionable t = (Transactionable) i.next();
-            t.delete();
+            t.deleteTransactionable();
         }
 
         for (Iterator i = involvedObjects.iterator(); i.hasNext();) {
@@ -139,14 +139,14 @@
         }
 
         if (getIdentityMap() != null) {
-            Transactionable[] objects = getIdentityMap().getObjects();
+            Identifiable[] objects = getIdentityMap().getObjects();
             for (int i = 0; i < objects.length; i++) {
-                if (objects[i].isLocked()) {
-                    objects[i].unlock();
+                if (objects[i] instanceof Transactionable
+                        && ((Transactionable) objects[i]).isLocked()) {
+                    ((Transactionable) objects[i]).unlock();
                 }
             }
         }
-
     }
 
     private Identity identity;

Added: lenya/trunk/src/java/org/apache/lenya/transaction/Versionable.java
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/java/org/apache/lenya/transaction/Versionable.java?view=auto&rev=160622
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/Versionable.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/Versionable.java Fri Apr  8 14:45:52 2005
@@ -0,0 +1,51 @@
+/*
+ * Copyright  1999-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.lenya.transaction;
+
+/**
+ * A versionable object.
+ *
+ * @version $Id:$
+ */
+public interface Versionable extends Lockable {
+
+    /**
+     * Checks the object in.
+     * @throws TransactionException if an error occurs.
+     */
+    void checkin() throws TransactionException;
+
+    /**
+     * Checks the object out.
+     * @throws TransactionException if an error occurs.
+     */
+    void checkout() throws TransactionException;
+
+    /**
+     * @return if the object is checked out.
+     * @throws TransactionException if an error occurs.
+     */
+    boolean isCheckedOut() throws TransactionException;
+
+    /**
+     * Checks if the object has been changed since it has been locked.
+     * @return A boolean value.
+     * @throws TransactionException if an error occurs.
+     */
+    boolean hasChanged() throws TransactionException;
+
+}
\ No newline at end of file

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=160621&r2=160622
==============================================================================
--- 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 Fri Apr  8 14:45:52 2005
@@ -27,6 +27,7 @@
 import org.apache.lenya.cms.publication.util.DocumentVisitor;
 import org.apache.lenya.cms.site.SiteManager;
 import org.apache.lenya.cms.usecase.DocumentUsecase;
+import org.apache.lenya.cms.usecase.UsecaseException;
 import org.apache.lenya.cms.workflow.WorkflowManager;
 import org.apache.lenya.workflow.WorkflowException;
 
@@ -45,7 +46,7 @@
      */
     protected void doCheckPreconditions() throws Exception {
         super.doCheckPreconditions();
-        
+
         if (getErrorMessages().isEmpty()) {
 
             if (!getSourceDocument().getArea().equals(Publication.AUTHORING_AREA)) {
@@ -73,7 +74,8 @@
             // get involved objects to lock them
             Document doc = getSourceDocument();
             try {
-                Document liveVersion = doc.getIdentityMap().getAreaVersion(doc, Publication.LIVE_AREA);
+                Document liveVersion = doc.getIdentityMap().getAreaVersion(doc,
+                        Publication.LIVE_AREA);
                 getInvolvedDocuments(liveVersion);
             } catch (DocumentBuildException e) {
                 throw new RuntimeException(e);
@@ -82,6 +84,41 @@
     }
 
     /**
+     * @see org.apache.lenya.cms.usecase.Usecase#lockInvolvedObjects()
+     */
+    public void lockInvolvedObjects() throws UsecaseException {
+        super.lockInvolvedObjects();
+
+        ServiceSelector selector = null;
+        SiteManager siteManager = null;
+        try {
+            Document doc = getSourceDocument();
+            Document liveVersion = doc.getIdentityMap().getAreaVersion(doc, Publication.LIVE_AREA);
+            DocumentSet set = getInvolvedDocuments(liveVersion);
+            Document[] documents = set.getDocuments();
+            for (int i = 0; i < documents.length; i++) {
+                documents[i].lock();
+            }
+
+            selector = (ServiceSelector) this.manager.lookup(SiteManager.ROLE + "Selector");
+            siteManager = (SiteManager) selector.select(doc.getPublication().getSiteManagerHint());
+            siteManager.getSiteStructure(doc.getIdentityMap(),
+                    doc.getPublication(),
+                    Publication.LIVE_AREA).lock();
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (selector != null) {
+                if (siteManager != null) {
+                    selector.release(siteManager);
+                }
+                this.manager.release(selector);
+            }
+        }
+    }
+
+    /**
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#doExecute()
      */
     protected void doExecute() throws Exception {
@@ -228,10 +265,8 @@
             for (int i = 0; i < languages.length; i++) {
                 Document version = document.getIdentityMap().getLanguageVersion(document,
                         languages[i]);
-                if (version.exists()) {
-                    if (wfManager.canInvoke(getSourceDocument(), getEvent())) {
-                        deactivate(version);
-                    }
+                if (version.exists() && wfManager.canInvoke(version, getEvent())) {
+                    deactivate(version);
                 }
             }
         } catch (ServiceException e) {



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