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/27 09:36:34 UTC
svn commit: r1545961 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
Author: mduerig
Date: Wed Nov 27 08:36:34 2013
New Revision: 1545961
URL: http://svn.apache.org/r1545961
Log:
OAK-1133: Observation listener PLUS
Optimise composite filters for the case of 0 or 1
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java?rev=1545961&r1=1545960&r2=1545961&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java Wed Nov 27 08:36:34 2013
@@ -34,6 +34,9 @@ import org.apache.jackrabbit.oak.spi.sta
* This utility class provides common {@link Filter} instances
*/
public final class Filters {
+ private static final ConstantFilter INCLUDE_ALL = new ConstantFilter(true);
+ private static final ConstantFilter EXCLUDE_ALL = new ConstantFilter(false);
+
private Filters() {
}
@@ -61,188 +64,200 @@ public final class Filters {
* @return Filter that includes everything
*/
public static Filter includeAll() {
- return new ConstantFilter(true);
+ return INCLUDE_ALL;
}
/**
* @return Filter that excludes everything
*/
public static Filter excludeAll() {
- return new ConstantFilter(false);
+ return EXCLUDE_ALL;
}
private static Filter any(final List<Filter> filters) {
- return new Filter() {
- @Override
- public boolean includeAdd(PropertyState after) {
- for (Filter filter : filters) {
- if (filter.includeAdd(after)) {
- return true;
+ if (filters.isEmpty()) {
+ return EXCLUDE_ALL;
+ } else if (filters.size() == 1) {
+ return filters.get(0);
+ } else {
+ return new Filter() {
+ @Override
+ public boolean includeAdd(PropertyState after) {
+ for (Filter filter : filters) {
+ if (filter.includeAdd(after)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public boolean includeChange(PropertyState before, PropertyState after) {
- for (Filter filter : filters) {
- if (filter.includeChange(before, after)) {
- return true;
+ @Override
+ public boolean includeChange(PropertyState before, PropertyState after) {
+ for (Filter filter : filters) {
+ if (filter.includeChange(before, after)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public boolean includeDelete(PropertyState before) {
- for (Filter filter : filters) {
- if (filter.includeDelete(before)) {
- return true;
+ @Override
+ public boolean includeDelete(PropertyState before) {
+ for (Filter filter : filters) {
+ if (filter.includeDelete(before)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public boolean includeAdd(String name, NodeState after) {
- for (Filter filter : filters) {
- if (filter.includeAdd(name, after)) {
- return true;
+ @Override
+ public boolean includeAdd(String name, NodeState after) {
+ for (Filter filter : filters) {
+ if (filter.includeAdd(name, after)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public boolean includeChange(String name, NodeState before, NodeState after) {
- for (Filter filter : filters) {
- if (filter.includeChange(name, before, after)) {
- return true;
+ @Override
+ public boolean includeChange(String name, NodeState before, NodeState after) {
+ for (Filter filter : filters) {
+ if (filter.includeChange(name, before, after)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public boolean includeDelete(String name, NodeState before) {
- for (Filter filter : filters) {
- if (filter.includeDelete(name, before)) {
- return true;
+ @Override
+ public boolean includeDelete(String name, NodeState before) {
+ for (Filter filter : filters) {
+ if (filter.includeDelete(name, before)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
- for (Filter filter : filters) {
- if (filter.includeMove(sourcePath, destPath, moved)) {
- return true;
+ @Override
+ public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+ for (Filter filter : filters) {
+ if (filter.includeMove(sourcePath, destPath, moved)) {
+ return true;
+ }
}
+ return false;
}
- return false;
- }
- @Override
- public Filter create(String name, NodeState before, NodeState after) {
- List<Filter> childFilters = Lists.newArrayList();
- for (Filter filter : filters) {
- Filter childFilter = filter.create(name, before, after);
- if (childFilter != null) {
- childFilters.add(childFilter);
+ @Override
+ public Filter create(String name, NodeState before, NodeState after) {
+ List<Filter> childFilters = Lists.newArrayList();
+ for (Filter filter : filters) {
+ Filter childFilter = filter.create(name, before, after);
+ if (childFilter != null) {
+ childFilters.add(childFilter);
+ }
}
+ return any(childFilters);
}
- return any(childFilters);
- }
- };
+ };
+ }
}
private static Filter all(final List<Filter> filters) {
- return new Filter() {
- @Override
- public boolean includeAdd(PropertyState after) {
- for (Filter filter : filters) {
- if (!filter.includeAdd(after)) {
- return false;
+ if (filters.isEmpty()) {
+ return INCLUDE_ALL;
+ } else if (filters.size() == 1) {
+ return filters.get(0);
+ } else {
+ return new Filter() {
+ @Override
+ public boolean includeAdd(PropertyState after) {
+ for (Filter filter : filters) {
+ if (!filter.includeAdd(after)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public boolean includeChange(PropertyState before, PropertyState after) {
- for (Filter filter : filters) {
- if (!filter.includeChange(before, after)) {
- return false;
+ @Override
+ public boolean includeChange(PropertyState before, PropertyState after) {
+ for (Filter filter : filters) {
+ if (!filter.includeChange(before, after)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public boolean includeDelete(PropertyState before) {
- for (Filter filter : filters) {
- if (!filter.includeDelete(before)) {
- return false;
+ @Override
+ public boolean includeDelete(PropertyState before) {
+ for (Filter filter : filters) {
+ if (!filter.includeDelete(before)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public boolean includeAdd(String name, NodeState after) {
- for (Filter filter : filters) {
- if (!filter.includeAdd(name, after)) {
- return false;
+ @Override
+ public boolean includeAdd(String name, NodeState after) {
+ for (Filter filter : filters) {
+ if (!filter.includeAdd(name, after)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public boolean includeChange(String name, NodeState before, NodeState after) {
- for (Filter filter : filters) {
- if (!filter.includeChange(name, before, after)) {
- return false;
+ @Override
+ public boolean includeChange(String name, NodeState before, NodeState after) {
+ for (Filter filter : filters) {
+ if (!filter.includeChange(name, before, after)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public boolean includeDelete(String name, NodeState before) {
- for (Filter filter : filters) {
- if (!filter.includeDelete(name, before)) {
- return false;
+ @Override
+ public boolean includeDelete(String name, NodeState before) {
+ for (Filter filter : filters) {
+ if (!filter.includeDelete(name, before)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
- for (Filter filter : filters) {
- if (!filter.includeMove(sourcePath, destPath, moved)) {
- return false;
+ @Override
+ public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+ for (Filter filter : filters) {
+ if (!filter.includeMove(sourcePath, destPath, moved)) {
+ return false;
+ }
}
+ return true;
}
- return true;
- }
- @Override
- public Filter create(String name, NodeState before, NodeState after) {
- List<Filter> childFilters = Lists.newArrayList();
- for (Filter filter : filters) {
- Filter childFilter = filter.create(name, before, after);
- if (childFilter == null) {
- return null;
- } else {
- childFilters.add(childFilter);
+ @Override
+ public Filter create(String name, NodeState before, NodeState after) {
+ List<Filter> childFilters = Lists.newArrayList();
+ for (Filter filter : filters) {
+ Filter childFilter = filter.create(name, before, after);
+ if (childFilter == null) {
+ return null;
+ } else {
+ childFilters.add(childFilter);
+ }
}
+ return all(childFilters);
}
- return all(childFilters);
- }
- };
+ };
+ }
}
private static class ConstantFilter implements Filter {