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 md...@apache.org on 2013/11/19 18:20:14 UTC
svn commit: r1543508 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation:
ChangeProcessor.java FilterProvider.java filter/NodeTypeFilter.java
filter/PathFilter.java filter/UuidFilter.java
Author: mduerig
Date: Tue Nov 19 17:20:13 2013
New Revision: 1543508
URL: http://svn.apache.org/r1543508
Log:
OAK-1133: Observation listener PLUS
Correct calculation of associated parent node
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilterProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/PathFilter.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1543508&r1=1543507&r2=1543508&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Tue Nov 19 17:20:13 2013
@@ -128,7 +128,7 @@ public class ChangeProcessor implements
ImmutableTree afterTree = getTree(root, path);
EventIterator<Event> events = new EventIterator<Event>(
beforeTree.getNodeState(), afterTree.getNodeState(),
- provider.getFilter(afterTree),
+ provider.getFilter(beforeTree, afterTree),
new JcrListener(beforeTree, afterTree, namePathMapper, info));
if (events.hasNext()) {
eventListener.onEvent(new EventIteratorAdapter(events));
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilterProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilterProvider.java?rev=1543508&r1=1543507&r2=1543508&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilterProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilterProvider.java Tue Nov 19 17:20:13 2013
@@ -92,9 +92,9 @@ public class FilterProvider {
&& (includeClusterExternal || !isExternal(info));
}
- public Filter getFilter(ImmutableTree afterTree) {
+ public Filter getFilter(ImmutableTree beforeTree, ImmutableTree afterTree) {
List<Filter> filters = Lists.<Filter>newArrayList(
- new PathFilter(afterTree, path, deep));
+ new PathFilter(beforeTree, afterTree, path, deep));
if ((ALL_EVENTS & eventTypes) == 0) {
return Filters.excludeAll();
@@ -106,7 +106,8 @@ public class FilterProvider {
if (uuids.length == 0) {
return Filters.excludeAll();
} else {
- filters.add(new UuidFilter(afterTree.getNodeState(), uuids));
+ filters.add(new UuidFilter(
+ beforeTree.getNodeState(), afterTree.getNodeState(), uuids));
}
}
@@ -114,7 +115,7 @@ public class FilterProvider {
if (ntNames.length == 0) {
return Filters.excludeAll();
} else {
- filters.add(new NodeTypeFilter(afterTree, ntManager, ntNames));
+ filters.add(new NodeTypeFilter(beforeTree, afterTree, ntManager, ntNames));
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java?rev=1543508&r1=1543507&r2=1543508&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java Tue Nov 19 17:20:13 2013
@@ -34,12 +34,14 @@ import org.apache.jackrabbit.oak.spi.sta
* TODO Clarify: filter applies to parent
*/
public class NodeTypeFilter implements Filter {
+ private final ImmutableTree beforeTree;
private final ImmutableTree afterTree;
private final ReadOnlyNodeTypeManager ntManager;
private final String[] ntNames;
- public NodeTypeFilter(@Nonnull ImmutableTree afterTree,
+ public NodeTypeFilter(@Nonnull ImmutableTree beforeTree, @Nonnull ImmutableTree afterTree,
@Nonnull ReadOnlyNodeTypeManager ntManager, @Nonnull String[] ntNames) {
+ this.beforeTree = checkNotNull(beforeTree);
this.afterTree = checkNotNull(afterTree);
this.ntManager = checkNotNull(ntManager);
this.ntNames = checkNotNull(ntNames);
@@ -82,7 +84,8 @@ public class NodeTypeFilter implements F
@Override
public Filter create(String name, NodeState before, NodeState after) {
- return new NodeTypeFilter(afterTree.getChild(name), ntManager, ntNames);
+ return new NodeTypeFilter(
+ beforeTree.getChild(name), afterTree.getChild(name), ntManager, ntNames);
}
//------------------------------------------------------------< private >---
@@ -95,8 +98,12 @@ public class NodeTypeFilter implements F
* parent node.
*/
private boolean includeByType() {
+ ImmutableTree associatedParent = afterTree.exists()
+ ? afterTree
+ : beforeTree;
+
for (String ntName : ntNames) {
- if (ntManager.isNodeType(afterTree, ntName)) {
+ if (ntManager.isNodeType(associatedParent, ntName)) {
return true;
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/PathFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/PathFilter.java?rev=1543508&r1=1543507&r2=1543508&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/PathFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/PathFilter.java Tue Nov 19 17:20:13 2013
@@ -19,6 +19,10 @@
package org.apache.jackrabbit.oak.plugins.observation.filter;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.annotation.Nonnull;
+
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.core.ImmutableTree;
@@ -30,55 +34,58 @@ import org.apache.jackrabbit.oak.spi.sta
* TODO Clarify: filter applies to parent
*/
public class PathFilter implements Filter {
+ private final ImmutableTree beforeTree;
private final ImmutableTree afterTree;
private final String path;
private final boolean deep;
- public PathFilter(ImmutableTree afterTree, String path, boolean deep) {
- this.afterTree = afterTree;
- this.path = path;
+ public PathFilter(@Nonnull ImmutableTree beforeTree, @Nonnull ImmutableTree afterTree,
+ @Nonnull String path, boolean deep) {
+ this.beforeTree = checkNotNull(beforeTree);
+ this.afterTree = checkNotNull(afterTree);
+ this.path = checkNotNull(path);
this.deep = deep;
}
@Override
public boolean includeAdd(PropertyState after) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public boolean includeChange(PropertyState before, PropertyState after) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public boolean includeDelete(PropertyState before) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public boolean includeAdd(String name, NodeState after) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public boolean includeChange(String name, NodeState before, NodeState after) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public boolean includeDelete(String name, NodeState before) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
- return includeByPath(afterTree.getPath());
+ return includeByPath();
}
@Override
public Filter create(String name, NodeState before, NodeState after) {
- if (includeChildren(PathUtils.concat(afterTree.getPath(), name))) {
- return new PathFilter(afterTree.getChild(name), path, deep);
+ if (includeChildren(name)) {
+ return new PathFilter(beforeTree, afterTree.getChild(name), path, deep);
} else {
return null;
}
@@ -86,7 +93,11 @@ public class PathFilter implements Filte
//------------------------------------------------------------< private >---
- private boolean includeByPath(String path) {
+ private boolean includeByPath() {
+ String path = afterTree.exists()
+ ? afterTree.getPath()
+ : beforeTree.getPath();
+
boolean equalPaths = this.path.equals(path);
if (!deep && !equalPaths) {
return false;
@@ -98,12 +109,11 @@ public class PathFilter implements Filte
return true;
}
- /**
- * Determine whether the children of a {@code path} would be matched by this filter
- * @param path path whose children to test
- * @return {@code true} if the children of {@code path} could be matched by this filter
- */
- public boolean includeChildren(String path) {
+ private boolean includeChildren(String name) {
+ String path = afterTree.exists()
+ ? PathUtils.concat(afterTree.getPath(), name)
+ : PathUtils.concat(beforeTree.getPath(), name);
+
return PathUtils.isAncestor(path, this.path) ||
path.equals((this.path)) ||
deep && PathUtils.isAncestor(this.path, path);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java?rev=1543508&r1=1543507&r2=1543508&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java Tue Nov 19 17:20:13 2013
@@ -34,10 +34,13 @@ import org.apache.jackrabbit.oak.spi.sta
* TODO Clarify: filter applies to parent
*/
public class UuidFilter implements Filter {
+ private final NodeState before;
private final NodeState after;
private final String[] uuids;
- public UuidFilter(@Nonnull NodeState after, @Nonnull String[] uuids) {
+ public UuidFilter(@Nonnull NodeState before, @Nonnull NodeState after,
+ @Nonnull String[] uuids) {
+ this.before = checkNotNull(before);
this.after = checkNotNull(after);
this.uuids = checkNotNull(uuids);
}
@@ -79,7 +82,8 @@ public class UuidFilter implements Filte
@Override
public Filter create(String name, NodeState before, NodeState after) {
- return new UuidFilter(after, uuids);
+ // FIXME shouldn't we pass the respective child node states here!?
+ return new UuidFilter(before, after, uuids);
}
//------------------------------------------------------------< private >---
@@ -89,7 +93,11 @@ public class UuidFilter implements Filte
return false;
}
- PropertyState uuidProperty = after.getProperty(JcrConstants.JCR_UUID);
+ NodeState associatedParent = after.exists()
+ ? after
+ : before;
+
+ PropertyState uuidProperty = associatedParent.getProperty(JcrConstants.JCR_UUID);
if (uuidProperty == null) {
return false;
}