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/07 14:59:39 UTC
svn commit: r1443483 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/index/
main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/
main/java/org/apache/jackrabbit/oak/security/authorization/
main/java/org/apach...
Author: angela
Date: Thu Feb 7 13:59:39 2013
New Revision: 1443483
URL: http://svn.apache.org/viewvc?rev=1443483&view=rev
Log:
OAK-396: Limit property index to nodes of given type
- adjust utilities
- add constant in IndexConstants
- change UserInitializer to specify rep:User and rep:Group as declaring node types
- change AccessControlInitializer: specify ace node types as declaring node types
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/InitialContent.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AccessControlInitializer.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserInitializer.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java?rev=1443483&r1=1443482&r2=1443483&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java Thu Feb 7 13:59:39 2013
@@ -41,4 +41,10 @@ public interface IndexConstants {
* property index definition.
*/
String PROPERTY_NAMES = "propertyNames";
+
+ /**
+ * Defines the property name of the "declaringNodeTypes" property with
+ * allows to restrict a given index definition to specific node types.
+ */
+ String DECLARING_NODE_TYPES = "declaringNodeTypes";
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java?rev=1443483&r1=1443482&r2=1443483&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java Thu Feb 7 13:59:39 2013
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.plugin
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
@@ -53,18 +55,19 @@ public class IndexUtils implements Index
/**
* Create a new property2 index definition below the given {@code indexNode}.
*
- * @param index The oak:index node builder
- * @param indexDefName The name of the new property index.
- * @param reindex {@code true} if the the reindex flag should be turned on.
- * @param unique {@code true} if the index is expected the assert property
- * uniqueness.
+ * @param index The oak:index node builder
+ * @param indexDefName The name of the new property index.
+ * @param reindex {@code true} if the the reindex flag should be turned on.
+ * @param unique {@code true} if the index is expected the assert property
+ * uniqueness.
* @param propertyNames The property names that should be indexed.
*/
- public static void createIndexDefinition(NodeBuilder index,
- String indexDefName,
+ public static void createIndexDefinition(@Nonnull NodeBuilder index,
+ @Nonnull String indexDefName,
boolean reindex,
boolean unique,
- List<String> propertyNames) {
+ @Nonnull List<String> propertyNames,
+ @Nullable List<String> declaringNodeTypeNames) {
NodeBuilder entry = index.child(indexDefName)
.setProperty(JCR_PRIMARYTYPE, IndexConstants.INDEX_DEFINITIONS_NODE_TYPE, Type.NAME)
.setProperty(IndexConstants.TYPE_PROPERTY_NAME, "p2")
@@ -78,6 +81,9 @@ public class IndexUtils implements Index
} else {
entry.setProperty(PropertyStates.createProperty(IndexConstants.PROPERTY_NAMES, propertyNames, Type.STRINGS));
}
+ if (declaringNodeTypeNames != null && !declaringNodeTypeNames.isEmpty()) {
+ entry.setProperty(PropertyStates.createProperty(IndexConstants.DECLARING_NODE_TYPES, declaringNodeTypeNames, Type.STRINGS));
+ }
}
/**
@@ -87,30 +93,35 @@ public class IndexUtils implements Index
* @param indexDefName
* @param unique
* @param propertyNames
+ * @param declaringNodeTypeNames
*/
- public static void createIndexDefinition(NodeUtil indexNode,
- String indexDefName,
+ public static void createIndexDefinition(@Nonnull NodeUtil indexNode,
+ @Nonnull String indexDefName,
boolean unique,
- String... propertyNames) {
+ @Nonnull String[] propertyNames,
+ @Nullable String[] declaringNodeTypeNames) {
NodeUtil entry = indexNode.getOrAddChild(indexDefName, IndexConstants.INDEX_DEFINITIONS_NODE_TYPE);
entry.setString(IndexConstants.TYPE_PROPERTY_NAME, "p2");
entry.setBoolean(IndexConstants.REINDEX_PROPERTY_NAME, true);
if (unique) {
entry.setBoolean(IndexConstants.UNIQUE_PROPERTY_NAME, true);
}
+ if (declaringNodeTypeNames != null && declaringNodeTypeNames.length > 0) {
+ entry.setStrings(IndexConstants.DECLARING_NODE_TYPES, declaringNodeTypeNames);
+ }
entry.setStrings(IndexConstants.PROPERTY_NAMES, propertyNames);
}
/**
* Builds a list of the existing index definitions.
- *
+ * <p/>
* Checks only children of the provided state for an index definitions
* container node, aka a node named {@link #INDEX_DEFINITIONS_NAME}
- *
+ *
* @return
*/
public static List<IndexDefinition> buildIndexDefinitions(NodeState state,
- String indexConfigPath, String typeFilter) {
+ String indexConfigPath, String typeFilter) {
NodeState definitions = state.getChildNode(INDEX_DEFINITIONS_NAME);
if (definitions == null) {
return Collections.emptyList();
@@ -130,10 +141,9 @@ public class IndexUtils implements Index
/**
* Builds an {@link IndexDefinition} out of a {@link ChildNodeEntry}
- *
*/
private static IndexDefinition getDefinition(String path,
- ChildNodeEntry def, String typeFilter) {
+ ChildNodeEntry def, String typeFilter) {
String name = def.getName();
NodeState ns = def.getNodeState();
PropertyState typeProp = ns.getProperty(TYPE_PROPERTY_NAME);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/InitialContent.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/InitialContent.java?rev=1443483&r1=1443482&r2=1443483&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/InitialContent.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/InitialContent.java Thu Feb 7 13:59:39 2013
@@ -56,19 +56,20 @@ public class InitialContent implements R
system.setProperty(JCR_PRIMARYTYPE, "rep:system", Type.NAME);
system.child(JCR_VERSIONSTORAGE)
- .setProperty(JCR_PRIMARYTYPE, "rep:versionStorage", Type.NAME);
+ .setProperty(JCR_PRIMARYTYPE, "rep:versionStorage", Type.NAME);
system.child("jcr:nodeTypes")
- .setProperty(JCR_PRIMARYTYPE, "rep:nodeTypes", Type.NAME);
+ .setProperty(JCR_PRIMARYTYPE, "rep:nodeTypes", Type.NAME);
system.child("jcr:activities")
- .setProperty(JCR_PRIMARYTYPE, "rep:Activities", Type.NAME);
+ .setProperty(JCR_PRIMARYTYPE, "rep:Activities", Type.NAME);
}
if (!root.hasChildNode(IndexConstants.INDEX_DEFINITIONS_NAME)) {
NodeBuilder index = IndexUtils.getOrCreateOakIndex(root);
- IndexUtils.createIndexDefinition(index, "uuid", true, true, ImmutableList.<String>of(JCR_UUID));
+ IndexUtils.createIndexDefinition(index, "uuid", true, true,
+ ImmutableList.<String>of(JCR_UUID), null);
IndexUtils.createIndexDefinition(index, "nodetype", true, false,
- ImmutableList.of(JCR_PRIMARYTYPE, JCR_MIXINTYPES));
+ ImmutableList.of(JCR_PRIMARYTYPE, JCR_MIXINTYPES), null);
}
try {
branch.setRoot(root.getNodeState());
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AccessControlInitializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AccessControlInitializer.java?rev=1443483&r1=1443482&r2=1443483&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AccessControlInitializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AccessControlInitializer.java Thu Feb 7 13:59:39 2013
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
/**
* AccessControlInitializer... TODO
*/
-public class AccessControlInitializer implements RepositoryInitializer {
+public class AccessControlInitializer implements RepositoryInitializer, AccessControlConstants {
/**
* logger instance
@@ -43,9 +43,9 @@ public class AccessControlInitializer im
NodeBuilder root = branch.getRoot().builder();
NodeBuilder index = IndexUtils.getOrCreateOakIndex(root);
- // TODO OAK-396: add declaring node type information
IndexUtils.createIndexDefinition(index, "acPrincipalName", true, false,
- ImmutableList.<String>of(AccessControlConstants.REP_PRINCIPAL_NAME));
+ ImmutableList.<String>of(REP_PRINCIPAL_NAME),
+ ImmutableList.<String>of(NT_REP_DENY_ACE, NT_REP_GRANT_ACE));
try {
branch.setRoot(root.getNodeState());
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=1443483&r1=1443482&r2=1443483&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 Thu Feb 7 13:59:39 2013
@@ -39,24 +39,24 @@ import org.slf4j.LoggerFactory;
* Creates initial set of users to be present in the repository. This
* implementation uses the {@code UserManager} such as defined by the
* user configuration.
- *
+ * <p/>
* Currently the following users are created:
- *
+ * <p/>
* <ul>
- * <li>An administrator user using {@link UserConstants#PARAM_ADMIN_ID}
- * or {@link UserConstants#DEFAULT_ADMIN_ID} if the config option is missing.</li>
- * <li>An administrator user using {@link UserConstants#PARAM_ANONYMOUS_ID}
- * or {@link UserConstants#DEFAULT_ANONYMOUS_ID} if the config option is
- * missing.</li>
+ * <li>An administrator user using {@link UserConstants#PARAM_ADMIN_ID}
+ * or {@link UserConstants#DEFAULT_ADMIN_ID} if the config option is missing.</li>
+ * <li>An administrator user using {@link UserConstants#PARAM_ANONYMOUS_ID}
+ * or {@link UserConstants#DEFAULT_ANONYMOUS_ID} if the config option is
+ * missing.</li>
* </ul>
- *
+ * <p/>
* In addition this initializer sets up index definitions for the following
* user related properties:
- *
+ * <p/>
* <ul>
- * <li>{@link UserConstants#REP_AUTHORIZABLE_ID}</li>
- * <li>{@link UserConstants#REP_PRINCIPAL_NAME}</li>
- * <li>{@link UserConstants#REP_MEMBERS}</li>
+ * <li>{@link UserConstants#REP_AUTHORIZABLE_ID}</li>
+ * <li>{@link UserConstants#REP_PRINCIPAL_NAME}</li>
+ * <li>{@link UserConstants#REP_MEMBERS}</li>
* </ul>
*/
public class UserInitializer implements RepositoryInitializer, UserConstants {
@@ -83,10 +83,11 @@ public class UserInitializer implements
try {
NodeUtil rootTree = new NodeUtil(root.getTree("/"));
NodeUtil index = rootTree.getOrAddChild(IndexConstants.INDEX_DEFINITIONS_NAME, JcrConstants.NT_UNSTRUCTURED);
- IndexUtils.createIndexDefinition(index, "authorizableId", true, UserConstants.REP_AUTHORIZABLE_ID);
- // FIXME OAK-396: rep:principalName only needs to be unique if defined with user/group nodes -> add defining nt-info to uniqueness constraint otherwise ac-editing will fail.
- IndexUtils.createIndexDefinition(index, "principalName", true, UserConstants.REP_PRINCIPAL_NAME);
- IndexUtils.createIndexDefinition(index, "members", false, UserConstants.REP_MEMBERS);
+ IndexUtils.createIndexDefinition(index, "authorizableId", true, new String[]{REP_AUTHORIZABLE_ID}, null);
+ IndexUtils.createIndexDefinition(index, "principalName", true,
+ new String[]{REP_PRINCIPAL_NAME},
+ new String[]{NT_REP_GROUP, NT_REP_USER});
+ IndexUtils.createIndexDefinition(index, "members", false, new String[]{UserConstants.REP_MEMBERS}, null);
String adminId = userConfiguration.getConfigurationParameters().getConfigValue(PARAM_ADMIN_ID, DEFAULT_ADMIN_ID);
if (userManager.getAuthorizable(adminId) == null) {
@@ -108,4 +109,4 @@ public class UserInitializer implements
throw new RuntimeException(e);
}
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java?rev=1443483&r1=1443482&r2=1443483&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserInitializerTest.java Thu Feb 7 13:59:39 2013
@@ -94,7 +94,7 @@ public class UserInitializerTest extends
@Test
public void testUserIndexDefinitions() throws Exception {
- Tree oakIndex = root.getTree('/' +IndexConstants.INDEX_DEFINITIONS_NAME);
+ Tree oakIndex = root.getTree('/' + IndexConstants.INDEX_DEFINITIONS_NAME);
assertNotNull(oakIndex);
Tree id = oakIndex.getChild("authorizableId");
@@ -102,6 +102,8 @@ public class UserInitializerTest extends
Tree princName = oakIndex.getChild("principalName");
assertIndexDefinition(princName, UserConstants.REP_PRINCIPAL_NAME, true);
+ String[] declaringNtNames = TreeUtil.getStrings(princName, IndexConstants.DECLARING_NODE_TYPES);
+ assertArrayEquals(new String[]{UserConstants.NT_REP_GROUP, UserConstants.NT_REP_USER}, declaringNtNames);
Tree members = oakIndex.getChild("members");
assertIndexDefinition(members, UserConstants.REP_MEMBERS, false);
@@ -111,6 +113,6 @@ public class UserInitializerTest extends
assertNotNull(tree);
assertEquals(isUnique, TreeUtil.getBoolean(tree, IndexConstants.UNIQUE_PROPERTY_NAME));
- assertArrayEquals(propName, new String[] {propName}, TreeUtil.getStrings(tree, IndexConstants.PROPERTY_NAMES));
+ assertArrayEquals(propName, new String[]{propName}, TreeUtil.getStrings(tree, IndexConstants.PROPERTY_NAMES));
}
-}
\ No newline at end of file
+}