Filtros personalizados

Los filtros se utilizan para construir promociones como se describe en anatomía de promoción. El modelo XML de un filtro se convierte en parte del modelo XML de promoción. Una vez que implementa un filtro personalizado, puede utilizarlo para componer las promociones personalizadas. Los filtros personalizados deben implementar la interfaz com.ibm.commerce.marketing.promotion.condition.Filter. La definición de la interfaz es la siguiente:


package com.ibm.commerce.marketing.promotion.condition;

import com.ibm.commerce.marketing.promotion.runtime.LineItemSet;
import com.ibm.commerce.marketing.promotion.runtime.PromotionContext;
import com.ibm.commerce.marketing.promotion.xml.XMLizable;

/**
 * Contains the IBM Copyright information for HCL Commerce.
 * @author changl
 */

public interface Filter extends XMLizable {
   /**
    * IBM copyright notice field.
    */
    public static final String COPYRIGHT = 
          com.ibm.commerce.copyright.IBMCopyright.SHORT_COPYRIGHT;
    
    /**
     * This method filters the <code>LineItemSet</code>.
     * @param input <code>LineItemSet</code>
     * @param context <code>PromotionContext</code>
     * @return <code>LineItemSet</code>
     */

    LineItemSet filter(LineItemSet input, PromotionContext context);
}

La lógica del filtro se encapsula en el método "filter" declarado en la interfaz de filtro. Este método es el método "worker". Toma LineItemSet como entrada y devuelve un LineItemSet que es un subconjunto del LineItemSet de entrada. PromotionContext se pasa a este método y proporciona al método de filtro un contexto en el que funcionar.

Esta interfaz es una subclase de XMLizable. Por consiguiente, necesita desarrollar un modelo XML para el nuevo filtro. Se proporciona una lista de modelos XML de ejemplo para los tipos de filtro existentes en Fragmentos XML de filtro de ejemplo. En el ejemplo siguiente se ilustra uno:


<Filter impl="com.ibm.commerce.marketing.promotion.condition.CategoryFilter>
    <IncludeCategory>
       <CategoryKey>
          <DN>o=root organization</DN>
          <Name>Store 201 Pants</Name>
       </CategoryKey>
    </IncludeCategory>
    <ExcludeCategory>
       <CategoryKey>
          <DN>o=root organization</DN>
          <Name>Store 201 Sweaters</Name>
       </CategoryKey>
    </ExcludeCategory>
</Filter>

Debe sustituir el valor del atributo impl del elemento Filter con el nombre de clase totalmente calificado del filtro personalizado. El modelo de contenido del elemento Filter es completamente abierto.

Nota: Todas las implementaciones de filtro personalizadas debe ser reentrantes y de proceso múltiple.