/*
   * (non-Javadoc)
   *
   * @see atg.commerce.search.refinement.CommerceFacetSearchTools#isEligibleFacetValue(atg.repository.search.refinement.FacetTrail,
   *      atg.repository.search.refinement.FacetValue)
   */
  @Override
  protected boolean isEligibleFacetValue(FacetTrail pFacetTrail, FacetValue pFacetValue) {
    boolean result = true;

    if (PerformanceMonitor.isEnabled()) {
      PerformanceMonitor.startOperation("search", "TEST:CastFacetSearchTools.isEligibleFacetValue");
    }
    if (isSkipValuesAlreadyInTrail()) {
      FacetValue[] trailValues = pFacetTrail.getFacetValues();
      for (int i = 0; i < trailValues.length; i++) {
        if (trailValues[i] instanceof DisjunctionMultiValue) {
          for (Object o : ((DisjunctionMultiValue) trailValues[i]).getValues()) {
            Object value =
                pFacetValue instanceof FacetDisjunctionMultiValue
                    ? ((FacetDisjunctionMultiValue) pFacetValue).getSingleValue()
                    : pFacetValue instanceof RangeFacetDisjunctionMultiValue
                        ? ((RangeFacetDisjunctionMultiValue) pFacetValue).getSingleValue()
                        : pFacetValue.getValue();
            if (value.equals(o)) {
              if (PerformanceMonitor.isEnabled()) {
                PerformanceMonitor.endOperation(
                    "search", "TEST:CastFacetSearchTools.isEligibleFacetValue");
              }
              return false;
            }
          }

        } else {
          result = super.isEligibleFacetValue(pFacetTrail, pFacetValue);
          break;
        }
      }
    } // end if
    if (PerformanceMonitor.isEnabled()) {
      PerformanceMonitor.endOperation("search", "TEST:CastFacetSearchTools.isEligibleFacetValue");
    }
    return result;
  }