Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java Wed May 9 15:38:38 2018 @@ -16,19 +16,16 @@ */ package org.apache.jackrabbit.oak.security.authorization.composite; -import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NAMESPACE_MANAGEMENT; -import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NODE_TYPE_MANAGEMENT; -import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ; -import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_WRITE; -import static org.junit.Assert.assertEquals; - import java.util.List; import java.util.Map; import java.util.Set; - import javax.annotation.Nonnull; import javax.annotation.Nullable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.oak.AbstractSecurityTest; import org.apache.jackrabbit.oak.api.PropertyState; @@ -48,10 +45,11 @@ import org.apache.jackrabbit.oak.spi.sta import org.junit.Assert; import org.junit.Test; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; +import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NAMESPACE_MANAGEMENT; +import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_NODE_TYPE_MANAGEMENT; +import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ; +import static org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_WRITE; +import static org.junit.Assert.assertEquals; public class CompositeProviderCustomMixTest extends AbstractSecurityTest { @@ -232,7 +230,7 @@ public class CompositeProviderCustomMixT AuthorizationConfiguration config = getConfig(AuthorizationConfiguration.class); List<AggregatedPermissionProvider> composite = ImmutableList.of(a1, a2); - return new CompositePermissionProvider(root, composite, config.getContext(), type, getRootProvider()); + return new CompositePermissionProvider(root, composite, config.getContext(), type, getRootProvider(), getTreeProvider()); } private static class CustomProvider implements AggregatedPermissionProvider { @@ -351,7 +349,7 @@ public class CompositeProviderCustomMixT } } - private static class CustomTreePermission implements TreePermission { + private static final class CustomTreePermission implements TreePermission { private final Set<String> granted; private final Map<String, Long> grantMap;
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java Wed May 9 15:38:38 2018 @@ -30,7 +30,6 @@ import org.apache.jackrabbit.api.Jackrab import org.apache.jackrabbit.oak.api.ContentSession; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.commons.PathUtils; -import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree; import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration; import org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider; import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider; @@ -124,7 +123,7 @@ public class CompositeProviderNoScopeTes List<String> childNames = ImmutableList.of("test", "a", "b", "c", "nonexisting"); Tree rootTree = readOnlyRoot.getTree(ROOT_PATH); - NodeState ns = ((ImmutableTree) rootTree).getNodeState(); + NodeState ns = getTreeProvider().asNodeState(rootTree); TreePermission tp = createPermissionProvider().getTreePermission(rootTree, TreePermission.EMPTY); assertCompositeTreePermission(tp); @@ -141,7 +140,7 @@ public class CompositeProviderNoScopeTes List<String> childNames = ImmutableList.of("test", "a", "b", "c", "nonexisting"); Tree rootTree = readOnlyRoot.getTree(ROOT_PATH); - NodeState ns = ((ImmutableTree) rootTree).getNodeState(); + NodeState ns = getTreeProvider().asNodeState(rootTree); TreePermission tp = createPermissionProviderOR().getTreePermission(rootTree, TreePermission.EMPTY); assertCompositeTreePermission(tp); @@ -438,7 +437,7 @@ public class CompositeProviderNoScopeTes Tree rootTree = readOnlyRoot.getTree(ROOT_PATH); - NodeState ns = ((ImmutableTree) rootTree).getNodeState(); + NodeState ns = getTreeProvider().asNodeState(rootTree); TreePermission tp = cppTestUser.getTreePermission(rootTree, TreePermission.EMPTY); assertEquals(2, ((TreePermission[]) tpField.get(tp)).length); Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java Wed May 9 15:38:38 2018 @@ -26,7 +26,6 @@ import org.apache.jackrabbit.oak.api.Roo import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants; import org.apache.jackrabbit.oak.plugins.tree.TreeUtil; -import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree; import org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType; import org.apache.jackrabbit.oak.spi.security.Context; import org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider; @@ -43,7 +42,7 @@ import static org.junit.Assert.assertSam public class CompositeTreePermissionTest extends AbstractSecurityTest { private Root readOnlyRoot; - private ImmutableTree rootTree; + private Tree rootTree; private AggregatedPermissionProvider fullScopeProvider; @@ -56,7 +55,7 @@ public class CompositeTreePermissionTest root.commit(); readOnlyRoot = getRootProvider().createReadOnlyRoot(root); - rootTree = (ImmutableTree) readOnlyRoot.getTree("/"); + rootTree = readOnlyRoot.getTree("/"); fullScopeProvider = new FullScopeProvider(readOnlyRoot); } @@ -73,7 +72,7 @@ public class CompositeTreePermissionTest } private TreePermission createRootTreePermission(AggregatedPermissionProvider... providers) { - return new CompositePermissionProvider(readOnlyRoot, Arrays.asList(providers), Context.DEFAULT, CompositionType.AND, getRootProvider()) + return new CompositePermissionProvider(readOnlyRoot, Arrays.asList(providers), Context.DEFAULT, CompositionType.AND, getRootProvider(), getTreeProvider()) .getTreePermission(rootTree, TreePermission.EMPTY); } @@ -96,7 +95,7 @@ public class CompositeTreePermissionTest assertCompositeTreePermission(false, rootTp); assertEquals(expected, rootTp.getClass()); - TreePermission testTp = rootTp.getChildPermission("test", rootTree.getChild("test").getNodeState()); + TreePermission testTp = rootTp.getChildPermission("test", getTreeProvider().asNodeState(rootTree.getChild("test"))); assertEquals(expected, testTp.getClass()); } @@ -105,7 +104,7 @@ public class CompositeTreePermissionTest TreePermission rootTp = createRootTreePermission(fullScopeProvider, fullScopeProvider); assertCompositeTreePermission(true, rootTp); - TreePermission testTp = rootTp.getChildPermission("test", rootTree.getChild("test").getNodeState()); + TreePermission testTp = rootTp.getChildPermission("test", getTreeProvider().asNodeState(rootTree.getChild("test"))); assertCompositeTreePermission(true, testTp); } @@ -114,7 +113,7 @@ public class CompositeTreePermissionTest TreePermission rootTp = createRootTreePermission(new NoScopeProvider(root), new NoScopeProvider(root)); assertCompositeTreePermission(true, rootTp); - assertSame(TreePermission.EMPTY, rootTp.getChildPermission("test", rootTree.getChild("test").getNodeState())); + assertSame(TreePermission.EMPTY, rootTp.getChildPermission("test", getTreeProvider().asNodeState(rootTree.getChild("test")))); } @Test @@ -122,7 +121,7 @@ public class CompositeTreePermissionTest TreePermission rootTp = createRootTreePermission(fullScopeProvider, new NoScopeProvider(root), new NoScopeProvider(root)); assertCompositeTreePermission(true, rootTp); - NodeState childState = rootTree.getChild("test").getNodeState(); + NodeState childState = getTreeProvider().asNodeState(rootTree.getChild("test")); TreePermission testTp = rootTp.getChildPermission("test", childState); TreePermission expected = fullScopeProvider.getTreePermission(rootTree, TreePermission.EMPTY).getChildPermission("test", childState); assertEquals(expected.getClass(), testTp.getClass()); Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java Wed May 9 15:38:38 2018 @@ -31,7 +31,6 @@ import org.apache.jackrabbit.oak.plugins import org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions; import org.apache.jackrabbit.oak.spi.security.authorization.permission.RepositoryPermission; import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission; -import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits; import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants; import org.apache.jackrabbit.oak.spi.state.NodeState; Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java Wed May 9 15:38:38 2018 @@ -32,7 +32,6 @@ import org.apache.jackrabbit.oak.commons import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.plugins.memory.PropertyStates; import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants; -import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree; import org.apache.jackrabbit.oak.plugins.version.ReadOnlyVersionManager; import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration; import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider; @@ -165,17 +164,17 @@ public class VersionTreePermissionTest e public void testGetChild() throws Exception { Tree versionHistory = checkNotNull(vMgr.getVersionHistory(testTree)); - ImmutableTree t = (ImmutableTree) getRootProvider().createReadOnlyRoot(root).getTree("/"); + Tree t = getRootProvider().createReadOnlyRoot(root).getTree("/"); TreePermission tp = pp.getTreePermission(t, TreePermission.EMPTY); for (String name : PathUtils.elements(versionHistory.getPath())) { t = t.getChild(name); - tp = tp.getChildPermission(name, t.getNodeState()); + tp = tp.getChildPermission(name, getTreeProvider().asNodeState(t)); } String expectedPath = "/test"; assertVersionPermission(tp, "/test", true); - NodeState ns = t.getChild("1.0").getNodeState(); + NodeState ns = getTreeProvider().asNodeState(t.getChild("1.0")); tp = tp.getChildPermission("1.0", ns); assertVersionPermission(tp, "/test", true); Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java Wed May 9 15:38:38 2018 @@ -24,6 +24,7 @@ import org.apache.jackrabbit.api.securit import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.plugins.tree.impl.RootProviderService; +import org.apache.jackrabbit.oak.plugins.tree.impl.TreeProviderService; import org.apache.jackrabbit.oak.spi.commit.CommitHook; import org.apache.jackrabbit.oak.spi.commit.MoveTracker; import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider; @@ -43,6 +44,7 @@ public class PrivilegeConfigurationImplT @Before public void before() { configuration.setRootProvider(new RootProviderService()); + configuration.setTreeProvider(new TreeProviderService()); } @Test Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java Wed May 9 15:38:38 2018 @@ -25,6 +25,7 @@ import org.apache.jackrabbit.JcrConstant import org.apache.jackrabbit.oak.AbstractSecurityTest; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.api.PropertyState; +import org.apache.jackrabbit.oak.api.Root; import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; @@ -64,10 +65,19 @@ public class PrivilegeValidatorTest exte return privTree; } + private void register(@Nonnull String privName, @Nonnull String... aggr) throws Exception { + getPrivilegeManager(root).registerPrivilege(privName, false, aggr); + } + private static void setPrivilegeBits(Tree tree, String name, long value) { tree.setProperty(PropertyStates.createProperty(name, Collections.singleton(value), Type.LONGS)); } + private PrivilegeValidator createPrivilegeValidator() { + Root immutable = getRootProvider().createReadOnlyRoot(root); + return new PrivilegeValidator(immutable, immutable, getTreeProvider()); + } + @Test public void testMissingPrivilegeBits() { try { @@ -180,7 +190,7 @@ public class PrivilegeValidatorTest exte NodeState privilegeDefinition = nb.getNodeState(); assertTrue(NT_REP_PRIVILEGE.equals(NodeStateUtils.getPrimaryTypeName(privilegeDefinition))); - PrivilegeValidator pv = new PrivilegeValidator(root, root); + PrivilegeValidator pv = new PrivilegeValidator(root, root, getTreeProvider()); try { pv.childNodeChanged("test", privilegeDefinition, EmptyNodeState.EMPTY_NODE); } catch (CommitFailedException e) { @@ -199,7 +209,7 @@ public class PrivilegeValidatorTest exte NodeState privilegeDefinition = nb.getNodeState(); assertTrue(NT_REP_PRIVILEGE.equals(NodeStateUtils.getPrimaryTypeName(privilegeDefinition))); - PrivilegeValidator pv = new PrivilegeValidator(root, root); + PrivilegeValidator pv = new PrivilegeValidator(root, root, getTreeProvider()); assertNull(pv.childNodeChanged("test", privilegeDefinition, privilegeDefinition)); } @@ -227,7 +237,7 @@ public class PrivilegeValidatorTest exte PropertyState before = PropertyStates.createProperty(REP_AGGREGATES, ImmutableList.of(REP_READ_NODES, REP_READ_PROPERTIES), Type.NAMES); PropertyState after = PropertyStates.createProperty(REP_AGGREGATES, ImmutableList.of(REP_READ_NODES), Type.NAMES); - PrivilegeValidator validator = new PrivilegeValidator(root, root); + PrivilegeValidator validator = new PrivilegeValidator(root, root, getTreeProvider()); validator.propertyChanged(before, after); fail("modifying property in privilege store must fail."); } catch (CommitFailedException e) { @@ -242,7 +252,7 @@ public class PrivilegeValidatorTest exte try { PropertyState before = PropertyStates.createProperty(REP_AGGREGATES, ImmutableList.of(REP_READ_NODES, REP_READ_PROPERTIES), Type.NAMES); - PrivilegeValidator validator = new PrivilegeValidator(root, root); + PrivilegeValidator validator = new PrivilegeValidator(root, root, getTreeProvider()); validator.propertyDeleted(before); fail("removing property from privilege store must fail."); } catch (CommitFailedException e) { @@ -272,7 +282,7 @@ public class PrivilegeValidatorTest exte .setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_PRIVILEGE) .getNodeState(); - PrivilegeValidator validator = new PrivilegeValidator(root, root); + PrivilegeValidator validator = createPrivilegeValidator(); validator.childNodeAdded("test", newDef); fail("missing priv bits must be detected."); } catch (CommitFailedException e) { @@ -290,7 +300,7 @@ public class PrivilegeValidatorTest exte .setProperty(REP_AGGREGATES, ImmutableList.of("unknown", JCR_READ), Type.NAMES) .getNodeState(); - PrivilegeValidator validator = new PrivilegeValidator(root, root); + PrivilegeValidator validator = createPrivilegeValidator(); validator.childNodeAdded("test", newDef); fail("unknown aggregate must be detected."); } catch (CommitFailedException e) { @@ -300,9 +310,9 @@ public class PrivilegeValidatorTest exte } @Test - public void testCircularAggregate() { + public void testCircularAggregate() throws Exception { try { - createPrivilegeTree("test"); + register("test"); NodeState newDef = new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE) .setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_PRIVILEGE) @@ -310,9 +320,9 @@ public class PrivilegeValidatorTest exte .setProperty(REP_AGGREGATES, ImmutableList.of("test", JCR_READ), Type.NAMES) .getNodeState(); - PrivilegeValidator validator = new PrivilegeValidator(root, root); + PrivilegeValidator validator = createPrivilegeValidator(); validator.childNodeAdded("test", newDef); - fail("unknown aggregate must be detected."); + fail("circular aggregate must be detected."); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); assertEquals(52, e.getCode()); @@ -320,9 +330,10 @@ public class PrivilegeValidatorTest exte } @Test - public void testCircularAggregate2() { + public void testCircularAggregate2() throws Exception { try { - createPrivilegeTree("test2", "test"); + register("test"); + register("test2", "test", PrivilegeConstants.JCR_READ); NodeState newDef = new MemoryNodeBuilder(EmptyNodeState.EMPTY_NODE) .setProperty(JcrConstants.JCR_PRIMARYTYPE, NT_REP_PRIVILEGE) @@ -330,9 +341,9 @@ public class PrivilegeValidatorTest exte .setProperty(REP_AGGREGATES, ImmutableList.of("test2", JCR_READ), Type.NAMES) .getNodeState(); - PrivilegeValidator validator = new PrivilegeValidator(root, root); + PrivilegeValidator validator = createPrivilegeValidator(); validator.childNodeAdded("test", newDef); - fail("unknown aggregate must be detected."); + fail("circular aggregate must be detected."); } catch (CommitFailedException e) { assertTrue(e.isConstraintViolation()); assertEquals(52, e.getCode()); Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java (original) +++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java Wed May 9 15:38:38 2018 @@ -30,4 +30,7 @@ public interface TreeProvider { @Nonnull Tree createReadOnlyTree(@Nonnull Tree readOnlyParent, @Nonnull String childName, @Nonnull NodeState childState); + + @Nonnull + NodeState asNodeState(@Nonnull Tree readOnlyTree); } \ No newline at end of file Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java?rev=1831261&r1=1831260&r2=1831261&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java (original) +++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java Wed May 9 15:38:38 2018 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@Version("3.0.1") +@Version("3.1.0") package org.apache.jackrabbit.oak.plugins.tree; import org.osgi.annotation.versioning.Version;
