You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/10/17 17:57:31 UTC

svn commit: r1399316 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-core/src/main/java/org/apache/jackrabbit/oak/core/ oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/callback/ oak-core/sr...

Author: mduerig
Date: Wed Oct 17 15:57:30 2012
New Revision: 1399316

URL: http://svn.apache.org/viewvc?rev=1399316&view=rev
Log:
OAK-363: Make conflict handler configurable through Oak builder

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/callback/RepositoryCallback.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/RootTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TreeTest.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1399316&r1=1399315&r2=1399316&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Wed Oct 17 15:57:30 2012
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
+import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
 import org.apache.jackrabbit.oak.spi.commit.ValidatingHook;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -62,6 +63,8 @@ public class Oak {
 
     private SecurityProvider securityProvider;
 
+    private ConflictHandler conflictHandler;
+
     public Oak(MicroKernel kernel) {
         this.kernel = kernel;
     }
@@ -156,11 +159,24 @@ public class Oak {
         return this;
     }
 
+    /**
+     * Associates the given conflict handler with the repository to be created.
+     *
+     * @param conflictHandler conflict handler
+     * @return this builder
+     */
+    @Nonnull
+    public Oak with(@Nonnull ConflictHandler conflictHandler) {
+        this.conflictHandler = conflictHandler;
+        return this;
+    }
+
     public ContentRepository createContentRepository() {
         return new ContentRepositoryImpl(
                 kernel,
                 CompositeQueryIndexProvider.compose(queryIndexProviders),
                 createCommitHook(),
+                conflictHandler,
                 securityProvider);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1399316&r1=1399315&r2=1399316&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java Wed Oct 17 15:57:30 2012
@@ -25,7 +25,6 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
-import org.apache.jackrabbit.oak.plugins.commit.AnnotatingConflictHandler;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
@@ -51,11 +50,10 @@ public class ContentRepositoryImpl imple
     // TODO: retrieve default wsp-name from configuration
     private static final String DEFAULT_WORKSPACE_NAME = "default";
 
-    private static final ConflictHandler DEFAULT_CONFLICT = new AnnotatingConflictHandler();
-
     private final SecurityProvider securityProvider;
     private final QueryIndexProvider indexProvider;
     private final NodeStore nodeStore;
+    private final ConflictHandler conflictHandler;
 
     /**
      * Creates an content repository instance based on the given, already
@@ -70,8 +68,9 @@ public class ContentRepositoryImpl imple
     public ContentRepositoryImpl(MicroKernel microKernel,
                                  QueryIndexProvider indexProvider,
                                  CommitHook commitHook,
+                                 ConflictHandler conflictHandler,
                                  SecurityProvider securityProvider) {
-        this(createNodeStore(microKernel, commitHook), indexProvider, securityProvider);
+        this(createNodeStore(microKernel, commitHook), conflictHandler, indexProvider, securityProvider);
     }
 
     /**
@@ -84,9 +83,11 @@ public class ContentRepositoryImpl imple
      * default implementations should be used.
      */
     public ContentRepositoryImpl(NodeStore nodeStore,
+                                 ConflictHandler conflictHandler,
                                  QueryIndexProvider indexProvider,
                                  SecurityProvider securityProvider) {
         this.nodeStore = nodeStore;
+        this.conflictHandler = conflictHandler;
         this.indexProvider = indexProvider != null ? indexProvider : new CompositeQueryIndexProvider();
         this.securityProvider = securityProvider;
     }
@@ -110,7 +111,7 @@ public class ContentRepositoryImpl imple
 
         AccessControlProvider acProvider = securityProvider.getAccessControlProvider();
         return new ContentSessionImpl(loginContext, acProvider, workspaceName,
-                nodeStore, DEFAULT_CONFLICT, indexProvider);
+                nodeStore, conflictHandler, indexProvider);
     }
 
     //--------------------------------------------------------------------------

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/callback/RepositoryCallback.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/callback/RepositoryCallback.java?rev=1399316&r1=1399315&r2=1399316&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/callback/RepositoryCallback.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/callback/RepositoryCallback.java Wed Oct 17 15:57:30 2012
@@ -57,7 +57,7 @@ public class RepositoryCallback implemen
             try {
                 // FIXME: need a direct and fast way to create Root from the node store without having to call login
                 SecurityProvider sp = new OpenSecurityProvider();
-                return new ContentRepositoryImpl(nodeStore, null, sp).login(null, workspaceName).getLatestRoot();
+                return new ContentRepositoryImpl(nodeStore, null, null, sp).login(null, workspaceName).getLatestRoot();
             } catch (LoginException e) {
                 log.warn("Internal error ", e.getMessage());
             } catch (NoSuchWorkspaceException e) {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/RootTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/RootTest.java?rev=1399316&r1=1399315&r2=1399316&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/RootTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/RootTest.java Wed Oct 17 15:57:30 2012
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.oak.api.Con
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.commit.AnnotatingConflictHandler;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictValidator;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.junit.Ignore;
@@ -34,8 +35,11 @@ public class RootTest extends AbstractOa
 
     @Override
     protected ContentRepository createRepository() {
-        return new Oak().with(new OpenSecurityProvider()).with(
-                new ConflictValidator()).createContentRepository();
+        return new Oak()
+                .with(new OpenSecurityProvider())
+                .with(new ConflictValidator())
+                .with(new AnnotatingConflictHandler())
+                .createContentRepository();
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TreeTest.java?rev=1399316&r1=1399315&r2=1399316&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TreeTest.java Wed Oct 17 15:57:30 2012
@@ -20,17 +20,17 @@ package org.apache.jackrabbit.oak;
 
 import java.util.Set;
 
+import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.commit.AnnotatingConflictHandler;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictValidator;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.junit.Test;
 
-import com.google.common.collect.Sets;
-
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -40,8 +40,11 @@ public class TreeTest extends AbstractOa
 
     @Override
     protected ContentRepository createRepository() {
-        return new Oak().with(new OpenSecurityProvider()).with(
-                new ConflictValidator()).createContentRepository();
+        return new Oak()
+                .with(new OpenSecurityProvider())
+                .with(new ConflictValidator())
+                .with(new AnnotatingConflictHandler())
+                .createContentRepository();
     }
     @Test
     public void orderBefore() throws Exception {

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java?rev=1399316&r1=1399315&r2=1399316&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java Wed Oct 17 15:57:30 2012
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.oak.jcr;
 
 import java.util.concurrent.ScheduledExecutorService;
+
 import javax.jcr.Credentials;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -29,6 +30,7 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.plugins.commit.AnnotatingConflictHandler;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictValidatorProvider;
 import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexHook;
 import org.apache.jackrabbit.oak.plugins.name.NameValidatorProvider;
@@ -37,6 +39,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.nodetype.TypeValidatorProvider;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
+import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
 import org.apache.jackrabbit.oak.spi.commit.ValidatingHook;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
@@ -65,6 +68,8 @@ public class RepositoryImpl implements R
                     new ValidatingHook(DEFAULT_VALIDATOR),
                     new PropertyIndexHook());
 
+    private static final ConflictHandler DEFAULT_CONFLICT_HANDLER = new AnnotatingConflictHandler();
+
     private final Descriptors descriptors = new Descriptors(new SimpleValueFactory());
     private final ContentRepository contentRepository;
 
@@ -75,7 +80,9 @@ public class RepositoryImpl implements R
     public RepositoryImpl(MicroKernel kernel, ScheduledExecutorService executor,
                           SecurityProvider securityProvider) {
         this(new Oak(setupInitialContent(kernel))
-                .with(DEFAULT_COMMIT_HOOK).with(securityProvider)
+                .with(DEFAULT_COMMIT_HOOK)
+                .with(DEFAULT_CONFLICT_HANDLER)
+                .with(securityProvider)
                 .createContentRepository(),
                 executor, securityProvider);
     }