code: public boolean filterTarget(final T filteringTarget, final V referencingObject) {
      logger.debug(String.format("start filtering '%s' with factor filter for '%s'",
          filteringTarget == null ? "(null)" : filteringTarget.toString(),
          this.getName()));
  
      final Collection<FactorFilter<T, V>> filterList = this.factorFilterList.values();
      boolean result = true;
      for (final FactorFilter<T, V> filter : filterList) {
        result &= filter.filterTarget(filteringTarget, referencingObject);
        logger.debug(String.format("[Factor: %s] filter result : %s ",
            filter.getFactorName(), result));
        if (!result) {
          break;
        }
      }
      logger.debug(String.format("Final filtering result : %s ", result));
      return result;
    }
docs: function to analyze the target item according to the reference object to decide whether the
  item should be filtered.
  
  @param filteringTarget: object to be checked.
  @param referencingObject: object which contains statistics based on which a decision is made
  whether the object being checked need to be filtered or not.
  @return true if the check passed, false if check failed, which means the item need to be
  filtered.