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);


Reply via email to