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 tr...@apache.org on 2013/11/28 00:22:10 UTC
svn commit: r1546228 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/
oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/
oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/
Author: tripod
Date: Wed Nov 27 23:22:09 2013
New Revision: 1546228
URL: http://svn.apache.org/r1546228
Log:
OAK-1234 Node.getReferences() also returns weak references on same node
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java?rev=1546228&r1=1546227&r2=1546228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java Wed Nov 27 23:22:09 2013
@@ -218,7 +218,7 @@ public class IdentifierManager {
Result result = root.getQueryEngine().executeQuery(
"SELECT * FROM [nt:base] WHERE PROPERTY([" + pName + "], '" + reference + "') = $uuid",
Query.JCR_SQL2, Long.MAX_VALUE, 0, bindings, new NamePathMapper.Default());
- return findPaths(result, uuid, propertyName, nodeTypeNames);
+ return findPaths(result, uuid, propertyName, nodeTypeNames, weak ? Type.WEAKREFERENCE : Type.REFERENCE);
} catch (ParseException e) {
log.error("query failed", e);
return Collections.emptySet();
@@ -226,7 +226,7 @@ public class IdentifierManager {
}
private Iterable<String> findPaths(final Result result, final String uuid, final String propertyName,
- final String[] nodeTypeNames) {
+ final String[] nodeTypeNames, final Type<?> propertyType) {
return new Iterable<String>() {
@Override
public Iterator<String> iterator() {
@@ -242,14 +242,16 @@ public class IdentifierManager {
class PropertyToPath implements Function<PropertyState, String> {
@Override
public String apply(PropertyState pState) {
- if (pState.isArray()) {
- for (String value : pState.getValue(Type.STRINGS)) {
- if (uuid.equals(value)) {
- return PathUtils.concat(rowPath, pState.getName());
+ if (pState.getType() == propertyType) {
+ if (pState.isArray()) {
+ for (String value : pState.getValue(Type.STRINGS)) {
+ if (uuid.equals(value)) {
+ return PathUtils.concat(rowPath, pState.getName());
+ }
}
+ } else if (uuid.equals(pState.getValue(Type.STRING))) {
+ return PathUtils.concat(rowPath, pState.getName());
}
- } else if (uuid.equals(pState.getValue(Type.STRING))) {
- return PathUtils.concat(rowPath, pState.getName());
}
return null;
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java?rev=1546228&r1=1546227&r2=1546228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java Wed Nov 27 23:22:09 2013
@@ -25,6 +25,7 @@ import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
+import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.version.Version;
@@ -114,6 +115,35 @@ public class ReferencesTest extends Abst
checkReferences("refs", ref.getReferences("myref1"), n1.getPath() + "/myref1");
}
+ public void testMixedReferences() throws RepositoryException {
+ Node ref = testRootNode.addNode(nodeName2, testNodeType);
+ ref.addMixin(mixReferenceable);
+ superuser.save();
+
+ Node n0 = testRootNode.addNode(nodeName1, testNodeType);
+ n0.setProperty("strong_reference", ref);
+ Node n1 = testRootNode.addNode(nodeName3, testNodeType);
+ n1.setProperty("weak_reference", superuser.getValueFactory().createValue(ref, true));
+ superuser.save();
+
+ checkReferences("refs", ref.getReferences(), n0.getPath() + "/strong_reference");
+ checkReferences("refs", ref.getWeakReferences(), n1.getPath() + "/weak_reference");
+ }
+
+ public void testMixedReferencesOnSameNode() throws RepositoryException {
+ Node ref = testRootNode.addNode(nodeName2, testNodeType);
+ ref.addMixin(mixReferenceable);
+ superuser.save();
+
+ Node n0 = testRootNode.addNode(nodeName1, testNodeType);
+ n0.setProperty("strong_reference", ref);
+ n0.setProperty("weak_reference", superuser.getValueFactory().createValue(ref, true));
+ superuser.save();
+
+ checkReferences("refs", ref.getReferences(), n0.getPath() + "/strong_reference");
+ checkReferences("refs", ref.getWeakReferences(), n0.getPath() + "/weak_reference");
+ }
+
// OAK-1195 Unable to move referenced mode
public void testMovedReferences() throws RepositoryException {
Node ref = testRootNode.addNode(nodeName2, testNodeType);
Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java?rev=1546228&r1=1546227&r2=1546228&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgradeTest.java Wed Nov 27 23:22:09 2013
@@ -28,6 +28,7 @@ import javax.jcr.Binary;
import javax.jcr.Credentials;
import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
+import javax.jcr.PropertyIterator;
import javax.jcr.PropertyType;
import javax.jcr.Repository;
import javax.jcr.Session;
@@ -123,6 +124,7 @@ public class RepositoryUpgradeTest {
properties.setProperty("double", Math.PI);
properties.setProperty("long", 9876543210L);
properties.setProperty("reference", referenceable);
+ properties.setProperty("weak_reference", session.getValueFactory().createValue(referenceable, true));
properties.setProperty("string", "test");
properties.setProperty("multiple", "a,b,c".split(","));
session.save();
@@ -215,6 +217,23 @@ public class RepositoryUpgradeTest {
assertEquals(
"/referenceable",
properties.getProperty("reference").getNode().getPath());
+ PropertyIterator refs = session.getNode("/referenceable").getReferences();
+ assertTrue(refs.hasNext());
+ assertEquals(properties.getPath() + "/reference", refs.nextProperty().getPath());
+ assertFalse(refs.hasNext());
+ assertEquals(
+ PropertyType.WEAKREFERENCE,
+ properties.getProperty("weak_reference").getType());
+ assertEquals(
+ identifier,
+ properties.getProperty("weak_reference").getString());
+ assertEquals(
+ "/referenceable",
+ properties.getProperty("weak_reference").getNode().getPath());
+ PropertyIterator weakRefs = session.getNode("/referenceable").getWeakReferences();
+ assertTrue(weakRefs.hasNext());
+ assertEquals(properties.getPath() + "/weak_reference", weakRefs.nextProperty().getPath());
+ assertFalse(weakRefs.hasNext());
assertEquals(
PropertyType.STRING,
properties.getProperty("string").getType());