package topasin.compare; import java.util.Map; import topasin.util.TopAsinContext; import topasin.util.TopAsinUtil; /** * create AsinComparable based on config * * @author mengzang * */ public final class AsinComparableFactory { public static final int SINGLE_INTEGER_FIELD_COMPARE = 0; public static final int OIH_STANDARD_COMPARE = 1; public static final int JS_COMPARE = 2; public static final int SumSingleIntegerFieldAsinComparable_Type = 3; public static final int SingleStringFieldAsinComparable_Type = 4; private static int compareType = 0; public static void init(Map<String, Object> rtOptions) { String comparatorName = (String) rtOptions.get(TopAsinContext.COMPARATOR_NAME); @SuppressWarnings("unchecked") Map<String, String> topAsinSelectionOption = (Map<String, String>) rtOptions .get(TopAsinContext.TOP_ASIN_SELECTION_OPTION); TopAsinSelectionOptionHelper.initCompareStrategy(topAsinSelectionOption); if ("SingleIntegerComparator".equalsIgnoreCase(comparatorName)) { compareType = SINGLE_INTEGER_FIELD_COMPARE; SingleIntegerFieldAsinComparable.initialAsinCompareField(((String[]) rtOptions .get(TopAsinContext.ASIN_COMPARE_FIELD_NAME))[0]); } else if ("StandardOIHComparable".equalsIgnoreCase(comparatorName)) { compareType = OIH_STANDARD_COMPARE; StandardOIHComparable.initStandardOIHComparable(); } else if ("JSAsinComparable".equalsIgnoreCase(comparatorName)) { compareType = JS_COMPARE; JSAsinComparable.initJSAsinComparable(); } else if ("SumSingalIntegerFieldAsinComparable".equalsIgnoreCase(comparatorName)) { compareType = SumSingleIntegerFieldAsinComparable_Type; SumSingalIntegerFieldAsinComparable.initialAsinCompareField(((String[]) rtOptions .get(TopAsinContext.ASIN_COMPARE_FIELD_NAME))[0]); } else if ("SingleStringFieldAsinComparable".equalsIgnoreCase(comparatorName)) { compareType = SingleStringFieldAsinComparable_Type; SingleStringFieldAsinComparable.initialAsinCompareField(((String[]) rtOptions .get(TopAsinContext.ASIN_COMPARE_FIELD_NAME))[0]); } else { throw new IllegalArgumentException(TopAsinUtil.NO_SUCH_COMPARATOR_ERR + ":" + comparatorName); } } public static AsinComparable getAsinComparable() { switch (compareType) { case SINGLE_INTEGER_FIELD_COMPARE: return new SingleIntegerFieldAsinComparable(); case OIH_STANDARD_COMPARE: return new StandardOIHComparable(); case JS_COMPARE: return new JSAsinComparable(); case SumSingleIntegerFieldAsinComparable_Type: return new SumSingalIntegerFieldAsinComparable(); case SingleStringFieldAsinComparable_Type: return new SingleStringFieldAsinComparable(); default: return null; } } }