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 2014/02/20 14:45:56 UTC
svn commit: r1570187 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/
oak-core/src/test/java/org/a...
Author: angela
Date: Thu Feb 20 13:45:56 2014
New Revision: 1570187
URL: http://svn.apache.org/r1570187
Log:
OAK-1424 : Oak API allows to create hidden tree and properties
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionConstants.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenPropertyTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenTreeTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/WorkspaceDelegate.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java Thu Feb 20 13:45:56 2014
@@ -251,9 +251,10 @@ public interface Tree {
* Add a child with the given {@code name}. Does nothing if such a child
* already exists.
*
- * @param name name of the child
+ * @param name name of the child. A valid name does not start with a colon,
+ * is not empty and does not contain a forward slash.
* @return the {@code Tree} instance of the child with the given {@code name}.
- * @throws IllegalArgumentException if the given name is invalid
+ * @throws IllegalArgumentException if {@code name} is not valid.
*/
@Nonnull
Tree addChild(@Nonnull String name) throws IllegalArgumentException;
@@ -304,18 +305,20 @@ public interface Tree {
* Set a property state
*
* @param property The property state to set
- * @throws IllegalArgumentException if the property name is invalid
+ * @throws IllegalArgumentException if {@code property} has a non valid name. A valid name
+ * does not start with a colon, is not empty and does not contain a forward slash.
*/
void setProperty(@Nonnull PropertyState property);
/**
* Set a property state
*
- * @param name The name of this property
+ * @param name The name of this property. A valid name does not start with a colon,
+ * is not empty and does not contain a forward slash.
* @param value The value of this property
* @param <T> The type of this property. Must be one of {@code String, Blob, byte[], Long, Integer, Double, Boolean, BigDecimal}
- * @throws IllegalArgumentException if {@code T} is not one of the above types,
- * or if the given name is invalid
+ * @throws IllegalArgumentException if {@code T} is not one of the above types or
+ * if {@code name} is not valid.
*/
<T> void setProperty(@Nonnull String name, @Nonnull T value)
throws IllegalArgumentException;
@@ -323,11 +326,12 @@ public interface Tree {
/**
* Set a property state
*
- * @param name The name of this property
+ * @param name The name of this property. A valid name does not start with a colon,
+ * is not empty and does not contain a forward slash.
* @param value The value of this property
* @param type The type of this property.
* @param <T> The type of this property.
- * @throws IllegalArgumentException if the given name is invalid
+ * @throws IllegalArgumentException if {@code name} is not valid.
*/
<T> void setProperty(@Nonnull String name, @Nonnull T value, Type<T> type)
throws IllegalArgumentException;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java Thu Feb 20 13:45:56 2014
@@ -18,34 +18,33 @@
*/
package org.apache.jackrabbit.oak.core;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.indexOf;
-import static org.apache.jackrabbit.oak.api.Type.NAME;
-import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
-import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
-
import java.util.Collections;
import java.util.Set;
-
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
-
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.core.AbstractRoot.Move;
import org.apache.jackrabbit.oak.plugins.memory.MultiGenericPropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.PropertyBuilder;
import org.apache.jackrabbit.oak.plugins.tree.AbstractTree;
import org.apache.jackrabbit.oak.plugins.tree.TreeConstants;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyBuilder;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.indexOf;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
+import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
class MutableTree extends AbstractTree {
@@ -194,6 +193,7 @@ class MutableTree extends AbstractTree {
@Override
public Tree addChild(String name) {
+ checkArgument(!isHidden(name));
beforeWrite();
if (!super.hasChild(name)) {
nodeBuilder.setChildNode(name);
@@ -269,6 +269,7 @@ class MutableTree extends AbstractTree {
@Override
public void setProperty(PropertyState property) {
+ checkArgument(!isHidden(property.getName()));
beforeWrite();
nodeBuilder.setProperty(property);
root.updated();
@@ -276,6 +277,7 @@ class MutableTree extends AbstractTree {
@Override
public <T> void setProperty(String name, T value) {
+ checkArgument(!isHidden(name));
beforeWrite();
nodeBuilder.setProperty(name, value);
root.updated();
@@ -283,6 +285,7 @@ class MutableTree extends AbstractTree {
@Override
public <T> void setProperty(String name, T value, Type<T> type) {
+ checkArgument(!isHidden(name));
beforeWrite();
nodeBuilder.setProperty(name, value, type);
root.updated();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java Thu Feb 20 13:45:56 2014
@@ -22,15 +22,14 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
-
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
-
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
@@ -38,10 +37,10 @@ import org.apache.jackrabbit.oak.api.Tre
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.core.ImmutableRoot;
-import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.util.ISO8601;
@@ -109,12 +108,13 @@ class ReadWriteVersionManager extends Re
* {@code versionable} node.
*
* @param versionable the versionable node.
+ * @param infoMap The additional information as provided by {@link org.apache.jackrabbit.oak.spi.commit.CommitInfo#getInfo()}
* @return the version history node.
* @throws IllegalArgumentException if the given node does not have a
* {@code jcr:uuid} property.
*/
@Nonnull
- NodeBuilder getOrCreateVersionHistory(@Nonnull NodeBuilder versionable)
+ NodeBuilder getOrCreateVersionHistory(@Nonnull NodeBuilder versionable, @Nonnull Map<String, Object> infoMap)
throws CommitFailedException {
checkNotNull(versionable);
String vUUID = uuidFromNode(versionable);
@@ -134,9 +134,9 @@ class ReadWriteVersionManager extends Re
node.setProperty(JCR_PRIMARYTYPE, nt, Type.NAME);
}
}
- PropertyState copiedFrom = versionable.getProperty(VersionConstants.HIDDEN_COPY_SOURCE);
+ Object copiedFrom = infoMap.get(JCR_COPIED_FROM);
if (copiedFrom != null) {
- node.setProperty(JCR_COPIED_FROM, copiedFrom.getValue(Type.STRING), Type.WEAKREFERENCE);
+ node.setProperty(JCR_COPIED_FROM, copiedFrom.toString(), Type.WEAKREFERENCE);
}
// use jcr:rootVersion node to detect if we need to initialize the
@@ -171,7 +171,7 @@ class ReadWriteVersionManager extends Re
public void checkin(@Nonnull NodeBuilder versionable)
throws CommitFailedException {
- NodeBuilder history = getOrCreateVersionHistory(versionable);
+ NodeBuilder history = getOrCreateVersionHistory(versionable, Collections.EMPTY_MAP);
createVersion(history, versionable);
}
@@ -180,7 +180,7 @@ class ReadWriteVersionManager extends Re
@Nullable VersionSelector selector)
throws CommitFailedException {
String versionPath = getIdentifierManager().getPath(versionUUID);
- NodeBuilder history = getOrCreateVersionHistory(versionable);
+ NodeBuilder history = getOrCreateVersionHistory(versionable, Collections.EMPTY_MAP);
NodeBuilder version = null;
if (versionPath != null) {
String versionName = PathUtils.getName(versionPath);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionConstants.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionConstants.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionConstants.java Thu Feb 20 13:45:56 2014
@@ -160,10 +160,4 @@ public interface VersionConstants extend
VersionConstants.REP_ACTIVITIES,
VersionConstants.REP_CONFIGURATIONS
);
-
- /**
- * Name of the hidden property that indicates the ID of the base version
- * of a versionable node that has been copied.
- */
- String HIDDEN_COPY_SOURCE = ":copySource";
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditor.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditor.java Thu Feb 20 13:45:56 2014
@@ -26,8 +26,9 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
import org.apache.jackrabbit.oak.plugins.lock.LockConstants;
+import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Editor;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -52,21 +53,25 @@ class VersionEditor implements Editor {
private NodeState before;
private NodeState after;
private boolean isReadOnly;
+ private CommitInfo commitInfo;
public VersionEditor(@Nonnull NodeBuilder versionStore,
- @Nonnull NodeBuilder workspaceRoot) {
+ @Nonnull NodeBuilder workspaceRoot,
+ @Nonnull CommitInfo commitInfo) {
this(null, new ReadWriteVersionManager(checkNotNull(versionStore),
- checkNotNull(workspaceRoot)), workspaceRoot, "");
+ checkNotNull(workspaceRoot)), workspaceRoot, "", commitInfo);
}
VersionEditor(@Nullable VersionEditor parent,
@Nonnull ReadWriteVersionManager vMgr,
@Nonnull NodeBuilder node,
- @Nonnull String name) {
+ @Nonnull String name,
+ @Nonnull CommitInfo commitInfo) {
this.parent = parent;
this.vMgr = checkNotNull(vMgr);
this.node = checkNotNull(node);
this.name = checkNotNull(name);
+ this.commitInfo = commitInfo;
}
@Override
@@ -75,7 +80,7 @@ class VersionEditor implements Editor {
this.before = before;
this.after = after;
if (isVersionable()) {
- vMgr.getOrCreateVersionHistory(node);
+ vMgr.getOrCreateVersionHistory(node, commitInfo.getInfo());
}
// calculate isReadOnly state
if (after.exists() || isVersionable()) {
@@ -167,12 +172,12 @@ class VersionEditor implements Editor {
@Override
public Editor childNodeChanged(String name, NodeState before,
NodeState after) {
- return new VersionEditor(this, vMgr, node.child(name), name);
+ return new VersionEditor(this, vMgr, node.child(name), name, commitInfo);
}
@Override
public Editor childNodeDeleted(String name, NodeState before) {
- return new VersionEditor(this, vMgr, MISSING_NODE.builder(), name);
+ return new VersionEditor(this, vMgr, MISSING_NODE.builder(), name, commitInfo);
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java Thu Feb 20 13:45:56 2014
@@ -16,9 +16,6 @@
*/
package org.apache.jackrabbit.oak.plugins.version;
-import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
-import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_VERSIONSTORAGE;
-
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
@@ -29,6 +26,9 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_VERSIONSTORAGE;
+
@Component
@Service(EditorProvider.class)
public class VersionEditorProvider implements EditorProvider {
@@ -46,7 +46,7 @@ public class VersionEditorProvider imple
}
NodeBuilder versionStorage = system.child(JCR_VERSIONSTORAGE);
return new VisibleEditor(new CompositeEditor(
- new VersionEditor(versionStorage, builder),
+ new VersionEditor(versionStorage, builder, info),
new VersionStorageEditor(versionStorage, builder)));
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java Thu Feb 20 13:45:56 2014
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.plugins.version;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
@@ -111,7 +112,7 @@ public class VersionablePathHook impleme
if (JcrConstants.JCR_VERSIONHISTORY.equals(after.getName()) && nodeAfter.isVersionable(versionManager)) {
NodeBuilder vhBuilder;
try {
- vhBuilder = versionManager.getOrCreateVersionHistory(nodeAfter.builder);
+ vhBuilder = versionManager.getOrCreateVersionHistory(nodeAfter.builder, Collections.EMPTY_MAP);
} catch (CommitFailedException e) {
exceptions.add(e);
// stop further comparison
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenPropertyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenPropertyTest.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenPropertyTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenPropertyTest.java Thu Feb 20 13:45:56 2014
@@ -16,43 +16,38 @@
*/
package org.apache.jackrabbit.oak.security.authorization.evaluation;
-import static org.apache.jackrabbit.oak.api.Type.NAME;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
import java.util.Set;
import com.google.common.collect.Sets;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.memory.PropertyBuilder;
-import org.apache.jackrabbit.oak.plugins.version.VersionConstants;
-import org.apache.jackrabbit.oak.spi.state.MoveDetector;
+import org.apache.jackrabbit.oak.plugins.tree.TreeConstants;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
/**
* Test for the hidden {@link org.apache.jackrabbit.oak.plugins.tree.TreeConstants#OAK_CHILD_ORDER} property
*/
public class HiddenPropertyTest extends AbstractOakCoreTest {
- private String[] hiddenProps = new String[] {":hiddenProp", MoveDetector.SOURCE_PATH, VersionConstants.HIDDEN_COPY_SOURCE};
+ private final String[] hiddenProps = new String[] {TreeConstants.OAK_CHILD_ORDER};
@Override
@Before
public void before() throws Exception {
super.before();
- Tree a = root.getTree("/a");
- a.setProperty(":hiddenProp", "val", STRING);
- a.setProperty(MoveDetector.SOURCE_PATH, "/some/path", Type.PATH);
- a.setProperty(VersionConstants.HIDDEN_COPY_SOURCE, "abc", STRING);
+ Tree b = root.getTree("/a/b");
+ b.orderBefore("bb");
root.commit();
}
@@ -97,7 +92,6 @@ public class HiddenPropertyTest extends
}
}
- @Ignore("OAK-1424") // FIXME : OAK-1424
@Test
public void testCreateHiddenProperty() {
Tree a = root.getTree("/a");
@@ -110,7 +104,6 @@ public class HiddenPropertyTest extends
}
}
- @Ignore("OAK-1424") // FIXME : OAK-1424
@Test
public void testCreateHiddenProperty2() {
Tree a = root.getTree("/a");
@@ -123,7 +116,6 @@ public class HiddenPropertyTest extends
}
}
- @Ignore("OAK-1424") // FIXME : OAK-1424
@Test
public void testCreateHiddenProperty3() {
Tree a = root.getTree("/a");
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenTreeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenTreeTest.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenTreeTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/evaluation/HiddenTreeTest.java Thu Feb 20 13:45:56 2014
@@ -16,17 +16,16 @@
*/
package org.apache.jackrabbit.oak.security.authorization.evaluation;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.junit.Before;
+import org.junit.Test;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import org.apache.jackrabbit.oak.api.Tree;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
/**
* Test to make sure hidden trees are never exposed.
*/
@@ -100,7 +99,6 @@ public class HiddenTreeTest extends Abst
assertEquals(0, parent.getChildrenCount(1));
}
- @Ignore("OAK-1424") // FIXME : OAK-1424
@Test
public void testCreateHiddenChild() {
try {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/WorkspaceDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/WorkspaceDelegate.java?rev=1570187&r1=1570186&r2=1570187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/WorkspaceDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/WorkspaceDelegate.java Thu Feb 20 13:45:56 2014
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.jcr.delegate;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nonnull;
@@ -25,6 +26,7 @@ import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.ConstraintViolationException;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -93,45 +95,46 @@ public class WorkspaceDelegate {
accessManager.checkPermissions(destPath, Permissions.getString(Permissions.NODE_TYPE_MANAGEMENT));
- try {
- Tree typeRoot = root.getTree(NODE_TYPES_PATH);
- new WorkspaceCopy(src, destParent, Text.getName(destPath), typeRoot, sessionDelegate.getAuthInfo().getUserID()).perform();
- context.getSessionDelegate().commit(root);
- sessionDelegate.refresh(true);
- } catch (CommitFailedException e) {
- throw e.asRepositoryException();
- }
+ String userId = sessionDelegate.getAuthInfo().getUserID();
+ new WorkspaceCopy(src, destParent, Text.getName(destPath)).perform(root, userId);
+ sessionDelegate.refresh(true);
}
//---------------------------< internal >-----------------------------------
private static final class WorkspaceCopy {
-
private final Map<String, String> translated = Maps.newHashMap();
- private final Tree src;
+ private final Tree source;
private final Tree destParent;
private final String destName;
- private final Tree typeRoot;
- private final String userId;
-
- public WorkspaceCopy(@Nonnull Tree src, @Nonnull Tree destParent,
- @Nonnull String destName, @Nonnull Tree typeRoot,
- @Nonnull String userId) {
- this.src = src;
+ public WorkspaceCopy(@Nonnull Tree source, @Nonnull Tree destParent, @Nonnull String destName) {
+ this.source = source;
this.destParent = destParent;
this.destName = destName;
- this.typeRoot = typeRoot;
- this.userId = userId;
}
- public void perform() throws RepositoryException {
- copy(src, destParent, destName);
- updateReferences(src, destParent.getChild(destName));
+ public void perform(@Nonnull Root root, @Nonnull String userId) throws RepositoryException {
+ try {
+ Tree typeRoot = root.getTree(NODE_TYPES_PATH);
+ copy(source, destParent, destName, typeRoot, userId);
+ updateReferences(source, destParent.getChild(destName));
+
+ Map<String, String> copyInfo = new HashMap<String, String>();
+ copyInfo.put("copy-source", source.getPath());
+ if (TreeUtil.isNodeType(source, JcrConstants.MIX_VERSIONABLE, typeRoot)) {
+ String sourceBaseVersionId = source.getProperty(JcrConstants.JCR_BASEVERSION).getValue(Type.STRING);
+ copyInfo.put(VersionConstants.JCR_COPIED_FROM, sourceBaseVersionId);
+ }
+ root.commit(ImmutableMap.<String, Object>copyOf(copyInfo));
+ } catch (CommitFailedException e) {
+ throw e.asRepositoryException();
+ }
}
- private void copy(@Nonnull Tree source, @Nonnull Tree destParent, @Nonnull String destName) throws RepositoryException {
+ private void copy(Tree source, Tree destParent, String destName, Tree typeRoot, String userId)
+ throws RepositoryException {
String primaryType = TreeUtil.getPrimaryTypeName(source);
if (primaryType == null) {
primaryType = TreeUtil.getDefaultChildType(typeRoot, destParent, destName);
@@ -159,12 +162,8 @@ public class WorkspaceDelegate {
dest.setProperty(property);
}
}
- if (TreeUtil.isNodeType(source, JcrConstants.MIX_VERSIONABLE, typeRoot)) {
- String sourceBaseVersionId = source.getProperty(JcrConstants.JCR_BASEVERSION).getValue(Type.STRING);
- dest.setProperty(VersionConstants.HIDDEN_COPY_SOURCE, sourceBaseVersionId, Type.PATH);
- }
for (Tree child : source.getChildren()) {
- copy(child, dest, child.getName());
+ copy(child, dest, child.getName(), typeRoot, userId);
}
}