PageFilterAdapter extends TypedFilterAdapterBase<PageFilter> { @Override public FilterSupportStatus isFilterSupported(FilterAdapterContext context, PageFilter filter) { Optional<FilterList> currentList = context.getCurrentFilterList(); if ((currentList.isPresent() && !isFilterListSupported(currentList.get(), filter)) || context.getFilterListDepth() > 1) { return TOP_LEVEL_ONLY; } return FilterSupportStatus.SUPPORTED; }  @Override Filter adapt(FilterAdapterContext context, PageFilter filter); @Override FilterSupportStatus isFilterSupported(FilterAdapterContext context, PageFilter filter);  }
@Test public void mustPassOneIsNotSupported() { FilterAdapterContext context = new FilterAdapterContext(new Scan(), new DefaultReadHooks()); PageFilter filter = new PageFilter(20); FilterList filterList = new FilterList(Operator.MUST_PASS_ONE, filter); try (ContextCloseable ignroed = context.beginFilterList(filterList)) { FilterSupportStatus status = pageFilterAdapter.isFilterSupported(context, filter); Assert.assertFalse( "MUST_PASS_ONE FilterLists should not be supported.", status.isSupported()); } }
@Test public void topLevelPageFilterIsSupported() { FilterAdapterContext context = new FilterAdapterContext(new Scan(), new DefaultReadHooks()); PageFilter filter = new PageFilter(20); FilterSupportStatus status = pageFilterAdapter.isFilterSupported(context, filter); Assert.assertTrue("Top-level page filter should be supported", status.isSupported()); }
@Test public void mustPassAllIsSupportedAtTopLevel() { FilterAdapterContext context = new FilterAdapterContext(new Scan(), new DefaultReadHooks()); PageFilter filter = new PageFilter(20); FilterList filterList = new FilterList(Operator.MUST_PASS_ALL, filter); try (ContextCloseable ignored = context.beginFilterList(filterList)) { FilterSupportStatus status = pageFilterAdapter.isFilterSupported(context, filter); Assert.assertTrue( "MUST_PASS_ALL should be supported at the top-level.", status.isSupported()); } }
@Test public void pageFilterMustBeInLastPosition() { FilterAdapterContext context = new FilterAdapterContext(new Scan(), new DefaultReadHooks()); ValueFilter valueFilter = new ValueFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("value"))); PageFilter pageFilter = new PageFilter(20); FilterList filterList = new FilterList(Operator.MUST_PASS_ALL, pageFilter, valueFilter); try (ContextCloseable ignored = context.beginFilterList(filterList)) { FilterSupportStatus status = pageFilterAdapter.isFilterSupported(context, pageFilter); Assert.assertFalse( "PageFilter must be in the last position of a MUST_PASS_ALL filter list", status.isSupported()); } }
@Test public void mustPassAllIsNotSupportedBelowTopLevel() { FilterAdapterContext context = new FilterAdapterContext(new Scan(), new DefaultReadHooks()); PageFilter pageFilter = new PageFilter(20); FilterList secondLevelList = new FilterList(Operator.MUST_PASS_ALL, pageFilter); FilterList topLevelList = new FilterList(Operator.MUST_PASS_ALL, secondLevelList); try (ContextCloseable ignored = context.beginFilterList(topLevelList)) { try (ContextCloseable evenMoreIgnored = context.beginFilterList(secondLevelList)) { FilterSupportStatus status = pageFilterAdapter.isFilterSupported(context, pageFilter); Assert.assertFalse( "MUST_PASS_ALL should not be supported lower than top level.", status.isSupported()); } } }