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:45:06 UTC
svn commit: r1546234 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ReferencesTest.java
Author: tripod
Date: Wed Nov 27 23:45:05 2013
New Revision: 1546234
URL: http://svn.apache.org/r1546234
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
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=1546234&r1=1546233&r2=1546234&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:45:05 2013
@@ -218,7 +218,10 @@ 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, weak ? Type.WEAKREFERENCE : Type.REFERENCE);
+ return findPaths(result, uuid, propertyName, nodeTypeNames,
+ weak ? Type.WEAKREFERENCE : Type.REFERENCE,
+ weak ? Type.WEAKREFERENCES : Type.REFERENCES
+ );
} catch (ParseException e) {
log.error("query failed", e);
return Collections.emptySet();
@@ -226,7 +229,7 @@ public class IdentifierManager {
}
private Iterable<String> findPaths(final Result result, final String uuid, final String propertyName,
- final String[] nodeTypeNames, final Type<?> propertyType) {
+ final String[] nodeTypeNames, final Type<?> type, final Type<?> types) {
return new Iterable<String>() {
@Override
public Iterator<String> iterator() {
@@ -242,15 +245,19 @@ public class IdentifierManager {
class PropertyToPath implements Function<PropertyState, String> {
@Override
public String apply(PropertyState pState) {
- if (pState.getType() == propertyType) {
- if (pState.isArray()) {
+ if (pState.isArray()) {
+ if (pState.getType() == types) {
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 (pState.getType() == type) {
+ 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=1546234&r1=1546233&r2=1546234&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:45:05 2013
@@ -144,6 +144,22 @@ public class ReferencesTest extends Abst
checkReferences("refs", ref.getWeakReferences(), n0.getPath() + "/weak_reference");
}
+ public void testMixedReferencesOnSameNode3() 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("mv_strong_reference", new Value[]{superuser.getValueFactory().createValue(ref, false)});
+ n0.setProperty("weak_reference", superuser.getValueFactory().createValue(ref, true));
+ n0.setProperty("mv_weak_reference", new Value[]{superuser.getValueFactory().createValue(ref, true)});
+ superuser.save();
+
+ checkReferences("refs", ref.getReferences(), n0.getPath() + "/strong_reference", n0.getPath() + "/mv_strong_reference");
+ checkReferences("refs", ref.getWeakReferences(), n0.getPath() + "/weak_reference", n0.getPath() + "/mv_weak_reference");
+ }
+
// OAK-1195 Unable to move referenced mode
public void testMovedReferences() throws RepositoryException {
Node ref = testRootNode.addNode(nodeName2, testNodeType);