Author: stefanegli
Date: Mon Nov 28 10:37:27 2016
New Revision: 1771703
URL: http://svn.apache.org/viewvc?rev=1771703&view=rev
Log:
OAK-5168 : avoid recompilation of wildcard patterns by having a corresponding
patternMap be passed to the GlobbingPathFilter at creation time
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/OakEventFilterImpl.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java?rev=1771703&r1=1771702&r2=1771703&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
Mon Nov 28 10:37:27 2016
@@ -31,7 +31,10 @@ import static javax.jcr.observation.Even
import static javax.jcr.observation.Event.PROPERTY_REMOVED;
import static org.apache.jackrabbit.oak.commons.PathUtils.isAncestor;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
@@ -499,6 +502,7 @@ public final class FilterBuilder {
private static class PathCondition implements Condition {
private final String pathGlob;
+ private final Map<String,Pattern> patternMap = new
HashMap<String,Pattern>();
public PathCondition(String pathGlob) {
this.pathGlob = pathGlob;
@@ -506,7 +510,7 @@ public final class FilterBuilder {
@Override
public EventFilter createFilter(NodeState before, NodeState after) {
- return new GlobbingPathFilter(pathGlob);
+ return new GlobbingPathFilter(pathGlob, patternMap);
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java?rev=1771703&r1=1771702&r2=1771703&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
Mon Nov 28 10:37:27 2016
@@ -34,6 +34,7 @@ import com.google.common.collect.Immutab
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.slf4j.LoggerFactory;
/**
* This {@code Filter} implementation supports filtering on paths using
@@ -75,6 +76,11 @@ public class GlobbingPathFilter implemen
this.patternMap = checkNotNull(patternMap);
}
+ public GlobbingPathFilter(@Nonnull String pattern, Map<String, Pattern>
patternMap) {
+ this(elements(pattern), checkNotNull(patternMap));
+ }
+
+ /** for testing only - use variant which passes the patternMap for
productive code **/
public GlobbingPathFilter(@Nonnull String pattern) {
this(elements(pattern), new HashMap<String, Pattern>());
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/OakEventFilterImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/OakEventFilterImpl.java?rev=1771703&r1=1771702&r2=1771703&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/OakEventFilterImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/OakEventFilterImpl.java
Mon Nov 28 10:37:27 2016
@@ -23,10 +23,12 @@ import static com.google.common.collect.
import static javax.jcr.observation.Event.NODE_REMOVED;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
@@ -48,6 +50,7 @@ import org.apache.jackrabbit.oak.plugins
import
org.apache.jackrabbit.oak.plugins.observation.filter.PermissionProviderFactory;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.slf4j.LoggerFactory;
/**
* Implements OakEventFilter which is an extension to the JackrabbitEventFilter
@@ -57,6 +60,7 @@ public class OakEventFilterImpl extends
static class NodeTypeAggregationFilter implements EventFilter, Condition {
+ private final Map<String,Pattern> patternMap = new
HashMap<String,Pattern>();
private final String[] nodeTypes;
private final String[] relativeGlobPaths;
private final boolean includeThis;
@@ -132,9 +136,9 @@ public class OakEventFilterImpl extends
List<EventFilter> filters = newArrayList();
for (String relativeGlobPath : relativeGlobPaths) {
if (relativeGlobPath.endsWith("*")) {
- filters.add(new GlobbingPathFilter(relativeGlobPath));
+ filters.add(new GlobbingPathFilter(relativeGlobPath,
patternMap));
} else {
- filters.add(new GlobbingPathFilter(relativeGlobPath +
"/*"));
+ filters.add(new GlobbingPathFilter(relativeGlobPath +
"/*", patternMap));
}
}
return filters.isEmpty() ? ConstantFilter.EXCLUDE_ALL :
Filters.any(filters);