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 an...@apache.org on 2013/02/20 15:33:37 UTC
svn commit: r1448182 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: ./
security/user/ spi/lifecycle/ spi/security/
Author: angela
Date: Wed Feb 20 14:33:37 2013
New Revision: 1448182
URL: http://svn.apache.org/r1448182
Log:
OAK-640 : Add WorkspaceInitializer (initial version)
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/WorkspaceInitializer.java
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/security/user/UserConfigurationImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserInitializer.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/SecurityConfiguration.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=1448182&r1=1448181&r2=1448182&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 Feb 20 14:33:37 2013
@@ -21,6 +21,8 @@ import javax.annotation.Nonnull;
import javax.jcr.NoSuchWorkspaceException;
import javax.security.auth.login.LoginException;
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.core.MicroKernelImpl;
import org.apache.jackrabbit.oak.api.ContentRepository;
@@ -42,6 +44,7 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.lifecycle.CompositeInitializer;
import org.apache.jackrabbit.oak.spi.lifecycle.OakInitializer;
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.lifecycle.WorkspaceInitializer;
import org.apache.jackrabbit.oak.spi.query.CompositeQueryIndexProvider;
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
@@ -231,12 +234,26 @@ public class Oak {
commitHooks.add(IndexHookManager.of(indexHooks));
withValidatorHook();
+ CommitHook commitHook = CompositeHook.compose(commitHooks);
+ QueryIndexProvider indexProvider = CompositeQueryIndexProvider.compose(queryIndexProviders);
+
+ // FIXME: move to proper workspace initialization
+ // initialize default workspace
+ Iterable<WorkspaceInitializer> workspaceInitializers =
+ Iterables.transform(securityProvider.getSecurityConfigurations(),
+ new Function<SecurityConfiguration, WorkspaceInitializer>() {
+ @Override
+ public WorkspaceInitializer apply(SecurityConfiguration sc) {
+ return sc.getWorkspaceInitializer();
+ }
+ });
+ OakInitializer.initialize(workspaceInitializers, store, defaultWorkspaceName, indexHooks, indexProvider, commitHook);
return new ContentRepositoryImpl(
store,
- CompositeHook.compose(commitHooks),
+ commitHook,
defaultWorkspaceName,
- CompositeQueryIndexProvider.compose(queryIndexProviders),
+ indexProvider,
securityProvider);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java?rev=1448182&r1=1448181&r2=1448182&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java Wed Feb 20 14:33:37 2013
@@ -26,7 +26,7 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitHookProvider;
import org.apache.jackrabbit.oak.spi.commit.ValidatingHook;
-import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.lifecycle.WorkspaceInitializer;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.Context;
import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration;
@@ -61,7 +61,7 @@ public class UserConfigurationImpl exten
@Nonnull
@Override
- public RepositoryInitializer getRepositoryInitializer() {
+ public WorkspaceInitializer getWorkspaceInitializer() {
return new UserInitializer(securityProvider);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserInitializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserInitializer.java?rev=1448182&r1=1448181&r2=1448182&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserInitializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserInitializer.java Wed Feb 20 14:33:37 2013
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.security.user;
+import javax.annotation.Nonnull;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.JcrConstants;
@@ -26,11 +27,13 @@ import org.apache.jackrabbit.oak.core.Ro
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
+import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUtils;
-import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider;
-import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexProvider;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
-import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.security.authentication.SystemSubject;
+import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.lifecycle.WorkspaceInitializer;
+import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
@@ -41,7 +44,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Creates initial set of users to be present in the repository. This
+ * Creates initial set of users to be present in a given workspace. This
* implementation uses the {@code UserManager} such as defined by the
* user configuration.
* <p/>
@@ -64,7 +67,7 @@ import org.slf4j.LoggerFactory;
* <li>{@link UserConstants#REP_MEMBERS}</li>
* </ul>
*/
-public class UserInitializer implements RepositoryInitializer, UserConstants {
+public class UserInitializer implements WorkspaceInitializer, UserConstants {
/**
* logger instance
@@ -77,22 +80,26 @@ public class UserInitializer implements
this.securityProvider = securityProvider;
}
- //----------------------------------------------< RepositoryInitializer >---
+ //-----------------------------------------------< WorkspaceInitializer >---
+ @Nonnull
@Override
- public NodeState initialize(NodeState state) {
+ public NodeState initialize(NodeState workspaceRoot, String workspaceName,
+ IndexHookProvider indexHook, QueryIndexProvider indexProvider,
+ CommitHook commitHook) {
MemoryNodeStore store = new MemoryNodeStore();
NodeStoreBranch branch = store.branch();
- branch.setRoot(state);
+ branch.setRoot(workspaceRoot);
try {
- branch.merge(IndexHookManager.of(new Property2IndexHookProvider()));
+ branch.merge(IndexHookManager.of(indexHook));
} catch (CommitFailedException e) {
throw new RuntimeException(e);
}
- Root root = new RootImpl(store, new Property2IndexProvider());
+ Root root = new RootImpl(store, commitHook, workspaceName, SystemSubject.INSTANCE, securityProvider, indexProvider);
UserConfiguration userConfiguration = securityProvider.getUserConfiguration();
UserManager userManager = userConfiguration.getUserManager(root, NamePathMapper.DEFAULT);
+ String errorMsg = "Failed to initialize user content.";
try {
NodeUtil rootTree = new NodeUtil(root.getTree("/"));
NodeUtil index = rootTree.getOrAddChild(IndexConstants.INDEX_DEFINITIONS_NAME, JcrConstants.NT_UNSTRUCTURED);
@@ -115,10 +122,10 @@ public class UserInitializer implements
root.commit();
}
} catch (RepositoryException e) {
- log.error("Failed to initialize user content ", e);
+ log.error(errorMsg, e);
throw new RuntimeException(e);
} catch (CommitFailedException e) {
- log.error("Failed to initialize user content ", e);
+ log.error(errorMsg, e);
throw new RuntimeException(e);
}
return store.getRoot();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java?rev=1448182&r1=1448181&r2=1448182&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java Wed Feb 20 14:33:37 2013
@@ -18,17 +18,22 @@
*/
package org.apache.jackrabbit.oak.spi.lifecycle;
+import javax.annotation.Nonnull;
+
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.NodeStoreBranch;
public class OakInitializer {
- public static void initialize(NodeStore store,
- RepositoryInitializer initializer, IndexHookProvider indexHook) {
+ public static void initialize(@Nonnull NodeStore store,
+ @Nonnull RepositoryInitializer initializer,
+ @Nonnull IndexHookProvider indexHook) {
NodeStoreBranch branch = store.branch();
NodeState before = branch.getRoot();
branch.setRoot(initializer.initialize(before));
@@ -39,4 +44,22 @@ public class OakInitializer {
}
}
+ public static void initialize(@Nonnull Iterable<WorkspaceInitializer> initializer,
+ @Nonnull NodeStore store,
+ @Nonnull String workspaceName,
+ @Nonnull IndexHookProvider indexHook,
+ @Nonnull QueryIndexProvider indexProvider,
+ @Nonnull CommitHook commitHook) {
+ NodeStoreBranch branch = store.branch();
+ NodeState root = branch.getRoot();
+ for (WorkspaceInitializer wspInit : initializer) {
+ root = wspInit.initialize(root, workspaceName, indexHook, indexProvider, commitHook);
+ }
+ branch.setRoot(root);
+ try {
+ branch.merge(IndexHookManager.of(indexHook));
+ } catch (CommitFailedException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/WorkspaceInitializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/WorkspaceInitializer.java?rev=1448182&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/WorkspaceInitializer.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/WorkspaceInitializer.java Wed Feb 20 14:33:37 2013
@@ -0,0 +1,50 @@
+/*
+ * 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.jackrabbit.oak.spi.lifecycle;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+/**
+ * Initializer of a workspace and it's initial content. A module that needs
+ * to add content to a workspace can implement this interface.
+ * <p/>
+ * TODO: define if/how runtime configuration changes may affect the workspace content.
+ * TODO: review params of initialize()
+ */
+public interface WorkspaceInitializer {
+
+ /**
+ * Initialize the content of a new workspace. This method is called before
+ * the workspace becomes available.
+ *
+ * @param workspaceRoot The workspace root state.
+ * @param workspaceName The name of the workspace that is being initialized.
+ * @param indexHook The index hook provider.
+ * @param indexProvider The query index provider used within this workspace.
+ * @param commitHook The commit hook(s) defined for this workspace.
+ * @return The modified workspace root state.
+ */
+ @Nonnull
+ NodeState initialize(NodeState workspaceRoot, String workspaceName,
+ IndexHookProvider indexHook, QueryIndexProvider indexProvider,
+ CommitHook commitHook);
+}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/SecurityConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/SecurityConfiguration.java?rev=1448182&r1=1448181&r2=1448182&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/SecurityConfiguration.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/SecurityConfiguration.java Wed Feb 20 14:33:37 2013
@@ -22,9 +22,14 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitHookProvider;
import org.apache.jackrabbit.oak.spi.lifecycle.CompositeInitializer;
import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.spi.lifecycle.WorkspaceInitializer;
+import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
/**
@@ -39,6 +44,9 @@ public interface SecurityConfiguration {
RepositoryInitializer getRepositoryInitializer();
@Nonnull
+ WorkspaceInitializer getWorkspaceInitializer();
+
+ @Nonnull
CommitHookProvider getSecurityHooks();
@Nonnull
@@ -69,6 +77,18 @@ public interface SecurityConfiguration {
@Nonnull
@Override
+ public WorkspaceInitializer getWorkspaceInitializer() {
+ return new WorkspaceInitializer() {
+ @Nonnull
+ @Override
+ public NodeState initialize(NodeState workspaceRoot, String workspaceName, IndexHookProvider indexHook, QueryIndexProvider indexProvider, CommitHook commitHook) {
+ return workspaceRoot;
+ }
+ };
+ }
+
+ @Nonnull
+ @Override
public CommitHookProvider getSecurityHooks() {
return new CommitHookProvider.Empty();
}