-rename core.repository in core.repository.impl

git-svn-id: https://svn.apache.org/repos/asf/lenya/trunk@1034452 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.lenya.core.repository/pom.xml b/org.apache.lenya.core.repository.impl/pom.xml
similarity index 87%
rename from org.apache.lenya.core.repository/pom.xml
rename to org.apache.lenya.core.repository.impl/pom.xml
index 57a1562..702a9ce 100644
--- a/org.apache.lenya.core.repository/pom.xml
+++ b/org.apache.lenya.core.repository.impl/pom.xml
@@ -11,7 +11,7 @@
     <relativePath>../org.apache.lenya.parent/pom.xml</relativePath>
   </parent>
   <groupId>org.apache.lenya</groupId>
-  <artifactId>lenya-core-repository</artifactId>
+  <artifactId>lenya-core-repository-impl</artifactId>
   <packaging>jar</packaging>
   <name>Apache Lenya Core Repository API</name>
   <dependencies>
@@ -23,6 +23,10 @@
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
     </dependency>
+        <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-util</artifactId>
+    </dependency>
     <!-- TODO: remove dependencies on Avalon and Excalibur -->
     <dependency>
       <groupId>org.apache.avalon.framework</groupId>
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/ObservationException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/ObservationException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/ObservationException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/ObservationException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/ObservationRegistry.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/ObservationRegistry.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/ObservationRegistry.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/ObservationRegistry.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/CheckInEntry.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/CheckInEntry.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/CheckInEntry.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/CheckInEntry.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/CheckOutEntry.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/CheckOutEntry.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/CheckOutEntry.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/CheckOutEntry.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckInException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckInException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckInException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckInException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckOutException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckOutException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckOutException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/FileReservedCheckOutException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RCEnvironment.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RCEnvironment.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RCEnvironment.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RCEnvironment.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RCML.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RCML.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RCML.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RCML.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RCMLEntry.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RCMLEntry.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RCMLEntry.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RCMLEntry.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RevisionControlException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RevisionControlException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/rc/RevisionControlException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/rc/RevisionControlException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/ContentHolder.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/ContentHolder.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/ContentHolder.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/ContentHolder.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/History.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/History.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/History.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/History.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/LenyaUUIDGenerator.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/LenyaUUIDGenerator.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/LenyaUUIDGenerator.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/LenyaUUIDGenerator.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Node.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Node.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Node.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Node.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/NodeFactory.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/NodeFactory.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/NodeFactory.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/NodeFactory.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Persistable.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Persistable.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Persistable.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Persistable.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryItem.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItem.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryItem.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItem.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactory.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactory.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactory.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactory.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryManager.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManager.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryManager.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManager.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Revision.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Revision.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Revision.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Revision.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Session.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Session.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/Session.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/Session.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/UUIDGenerator.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/UUIDGenerator.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/UUIDGenerator.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/UUIDGenerator.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/Element.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/Element.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/Element.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/Element.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/ElementSet.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/ElementSet.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/ElementSet.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/ElementSet.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaData.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaData.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaData.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaData.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataOwner.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataOwner.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataOwner.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataOwner.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataRegistry.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataRegistry.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataRegistry.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/MetaDataRegistry.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/ConcurrentModificationException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/ConcurrentModificationException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/ConcurrentModificationException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/ConcurrentModificationException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/IdentifiableFactory.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/IdentifiableFactory.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/IdentifiableFactory.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/IdentifiableFactory.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Identity.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Identity.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Identity.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Identity.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/IdentityMap.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/IdentityMap.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/IdentityMap.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/IdentityMap.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/IdentityMapImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/IdentityMapImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/IdentityMapImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/IdentityMapImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Lock.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Lock.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Lock.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Lock.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/LockException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/LockException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/LockException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/LockException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Lockable.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Lockable.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Lockable.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Lockable.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/TransactionException.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/TransactionException.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/TransactionException.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/TransactionException.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/TransactionLock.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/TransactionLock.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/TransactionLock.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/TransactionLock.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Transactionable.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Transactionable.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Transactionable.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Transactionable.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/UnitOfWork.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/UnitOfWork.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/UnitOfWork.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/UnitOfWork.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/UnitOfWorkImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
diff --git a/org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Versionable.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Versionable.java
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/java/org/apache/lenya/transaction/Versionable.java
rename to org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/transaction/Versionable.java
diff --git a/org.apache.lenya.core.repository/src/main/resources/META-INF/cocoon/spring/lenya-core-repository-components.xml b/org.apache.lenya.core.repository.impl/src/main/resources/META-INF/cocoon/spring/lenya-core-repository-components.xml
similarity index 100%
rename from org.apache.lenya.core.repository/src/main/resources/META-INF/cocoon/spring/lenya-core-repository-components.xml
rename to org.apache.lenya.core.repository.impl/src/main/resources/META-INF/cocoon/spring/lenya-core-repository-components.xml
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockFactory.java b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockFactory.java
new file mode 100644
index 0000000..715f20f
--- /dev/null
+++ b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockFactory.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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;
+
+public class MockFactory implements IdentifiableFactory {
+    
+    private UnitOfWork unit;
+    
+    public MockFactory(UnitOfWork unit) {
+        this.unit = unit;
+    }
+    
+    public Object build(IdentityMap map, String key) throws Exception {
+        return new MockTransactionable(key, this.unit);
+    }
+
+    public String getType() {
+        return "mock";
+    }
+
+}
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockRevisionController.java b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockRevisionController.java
new file mode 100644
index 0000000..c398922
--- /dev/null
+++ b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockRevisionController.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MockRevisionController {
+    
+    private static Map histories = new HashMap();
+
+    public static History getHistory(MockTransactionable transactionable) {
+        History history = (History) histories.get(transactionable.getId());
+        if (history == null) {
+            history = new History();
+            histories.put(transactionable.getId(), history);
+        }
+        return history;
+    }
+
+    public static class History {
+        
+        public History() {
+        }
+        
+        private int version = 0;
+        private boolean checkedOut = false;
+        private String checkOutUser = null;
+        
+        public void newVersion() {
+            this.version++;
+        }
+        
+        public int getLatestVersion() {
+            return this.version;
+        }
+        
+        public boolean isCheckedOut() {
+            return this.checkedOut;
+        }
+        
+        public void checkOut(String user) {
+            this.checkedOut = true;
+            this.checkOutUser = user;
+        }
+
+        public void checkIn() {
+            this.checkedOut = false;
+            this.checkOutUser = null;
+        }
+        
+        public String getCheckOutUser() {
+            return this.checkOutUser;
+        }
+        
+    }
+
+}
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockTransactionable.java b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockTransactionable.java
new file mode 100644
index 0000000..e901dd3
--- /dev/null
+++ b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockTransactionable.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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;
+
+import org.apache.lenya.cms.publication.IdentityWrapper;
+import org.apache.lenya.cms.repository.RepositoryException;
+
+public class MockTransactionable implements Transactionable {
+    
+    private String id;
+    
+    public MockTransactionable(String id, UnitOfWork unit) {
+        this.id = id;
+        this.unit = unit;
+    }
+    
+    public void write() {
+        MockRevisionController.getHistory(this).newVersion();
+    }
+    
+    public void changed() {
+    }
+
+    public void createTransactionable() throws TransactionException {
+    }
+
+    public void deleteTransactionable() throws TransactionException {
+    }
+
+    public void removed() {
+    }
+
+    public void saveTransactionable() throws TransactionException {
+    }
+
+    public void checkin() throws TransactionException {
+        MockRevisionController.getHistory(this).checkIn();
+    }
+
+    public void checkout() throws TransactionException {
+        MockRevisionController.getHistory(this).checkOut(getUserId());
+    }
+
+    public boolean hasChanged() throws TransactionException {
+        try {
+            int currentVersion = getLatestVersion();
+            int lockVersion = getLock().getVersion();
+            return currentVersion > lockVersion;
+        } catch (Exception e) {
+            throw new RepositoryException(e);
+        }
+    }
+
+    protected int getLatestVersion() {
+        int currentVersion = MockRevisionController.getHistory(this).getLatestVersion();
+        return currentVersion;
+    }
+
+    public boolean isCheckedOut() throws TransactionException {
+        return MockRevisionController.getHistory(this).isCheckedOut();
+    }
+
+    public boolean isCheckedOutBySession() throws TransactionException {
+        String user = MockRevisionController.getHistory(this).getCheckOutUser();
+        return user != null && user.equals(getUserId());
+    }
+    
+    private String getUserId() {
+        IdentityWrapper wrapper = (IdentityWrapper) ((UnitOfWorkImpl) this.unit).getIdentity();
+        return wrapper.getIdentity().getUser().getId();
+    }
+
+    private Lock lock;
+
+    public Lock getLock() {
+        return this.lock;
+    }
+
+    public boolean isLocked() throws TransactionException {
+        return this.lock != null;
+    }
+    
+    private UnitOfWork unit;
+
+    public void lock() throws TransactionException {
+        this.lock = unit.createLock(this, getLatestVersion());
+    }
+
+    public void unlock() throws TransactionException {
+        this.lock = null;
+        unit.removeLock(this);
+    }
+
+    public String getId() {
+        return this.id;
+    }
+
+}
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockUser.java b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockUser.java
new file mode 100644
index 0000000..f60cd9a
--- /dev/null
+++ b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockUser.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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;
+
+import java.io.File;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.Accreditable;
+import org.apache.lenya.ac.AccreditableManager;
+import org.apache.lenya.ac.Group;
+import org.apache.lenya.ac.ItemManager;
+import org.apache.lenya.ac.User;
+
+public class MockUser implements User {
+    
+    private String id;
+    
+    public MockUser(String id) {
+        this.id = id;
+    }
+
+    public boolean authenticate(String password) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public void delete() throws AccessControlException {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public String getDefaultDocumentLocale() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getDefaultMenuLocale() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getEmail() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void save() throws AccessControlException {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setDefaultDocumentLocale(String documentLocale) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setDefaultMenuLocale(String menuLocale) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setEmail(String email) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setPassword(String plainTextPassword) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public Accreditable[] getAccreditables() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void configure(Configuration configuration) throws ConfigurationException {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getId() {
+        return this.id;
+    }
+
+    public String getName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void setConfigurationDirectory(File configurationDirectory) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setDescription(String description) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void setName(String name) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void enableLogging(Logger arg0) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void addedToGroup(Group group) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public Group[] getGroups() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeFromAllGroups() {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void removedFromGroup(Group group) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public AccreditableManager getAccreditableManager() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ItemManager getItemManager() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean canChangePassword() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+}
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/TransactionTest.java b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/TransactionTest.java
new file mode 100644
index 0000000..16c03fd
--- /dev/null
+++ b/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/TransactionTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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;
+
+import org.apache.cocoon.core.container.ContainerTestCase;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lenya.ac.Identity;
+import org.apache.lenya.cms.publication.IdentityWrapper;
+
+public class TransactionTest extends ContainerTestCase {
+    
+    private Log logger = LogFactory.getLog(TransactionTest.class);
+
+    public void testTransaction() throws TransactionException {
+
+        Identity lenya = new Identity(logger);
+        lenya.addIdentifiable(new MockUser("lenya"));
+
+        Identity alice = new Identity(logger);
+        alice.addIdentifiable(new MockUser("alice"));
+
+        IdentityMap lenyaMap = new IdentityMapImpl();
+        UnitOfWork lenyaUnit = new UnitOfWorkImpl(lenyaMap, new IdentityWrapper(lenya));
+        IdentifiableFactory lenyaFactory = new MockFactory(lenyaUnit);
+
+        IdentityMap aliceMap = new IdentityMapImpl();
+        UnitOfWork aliceUnit = new UnitOfWorkImpl(aliceMap,  new IdentityWrapper(alice));
+        IdentifiableFactory aliceFactory = new MockFactory(aliceUnit);
+
+        MockTransactionable lenyaT1 = (MockTransactionable) lenyaMap.get(lenyaFactory, "t1");
+        MockTransactionable aliceT1 = (MockTransactionable) aliceMap.get(aliceFactory, "t1");
+
+        checkDoubleLock(lenyaT1);
+        checkLockAndModify(lenyaUnit, lenyaT1, aliceT1);
+
+    }
+
+    protected void checkDoubleLock(MockTransactionable t) throws TransactionException {
+        t.lock();
+        try {
+            t.lock();
+            assertTrue("No exception thrown!", false);
+        } catch (LockException ignore) {
+        }
+        t.unlock();
+    }
+
+    protected void checkLockAndModify(UnitOfWork lenyaUnit, MockTransactionable lenyaT1,
+            MockTransactionable aliceT1) throws TransactionException {
+        lenyaT1.lock();
+        aliceT1.write();
+        try {
+            lenyaUnit.commit();
+            assertTrue("No exception thrown!", false);
+        } catch (ConcurrentModificationException ignore) {
+        }
+        lenyaT1.unlock();
+    }
+
+}