@Override public Filter getSecurityFilter(Authentication user, Class<? extends CatalogInfo> clazz) { // If there are no CatalogFilters, just get the delegate's filter if (filters == null || filters.isEmpty()) return delegate.getSecurityFilter(user, clazz); // Result is the conjunction of delegate's filter, and those of all the CatalogFilters ArrayList<Filter> convertedFilters = new ArrayList<Filter>(this.filters.size() + 1); convertedFilters.add(delegate.getSecurityFilter(user, clazz)); // Delegate's filter for (CatalogFilter filter : getCatalogFilters()) { convertedFilters.add(filter.getSecurityFilter(clazz)); // Each CatalogFilter's filter } return Predicates.and(convertedFilters.toArray(new Filter[convertedFilters.size()])); } }