code: @Override
      public boolean accepts(Item item, List<Item> acceptedItems, List<Item> rejectedItems,
                             boolean runningBeforeProcessing) {
          boolean accepted = true;
  
          if (CollectionUtils.isNotEmpty(filters)) {
              for (Iterator<ItemFilter> filterIter = filters.iterator(); accepted && filterIter.hasNext();) {
                  ItemFilter filter = filterIter.next();
                  if (runningBeforeProcessing && filter.runBeforeProcessing()) {
                      accepted = filter.accepts(item, acceptedItems, rejectedItems, runningBeforeProcessing);
                  } else if (!runningBeforeProcessing && filter.runAfterProcessing()) {
                      accepted = filter.accepts(item, acceptedItems, rejectedItems, runningBeforeProcessing);
                  }
              }
          }
  
          return accepted;
      }
docs: If {@code runningBeforeProcessing} is true, calls all filters that need to be run before processing. If
  it is false, calls all filters that need to be run after processing. Filters in the chain are called until
  one of them rejects the item.