package topasin.describer;
import static topasin.util.TopAsinUtil.log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import topasin.util.TopAsinContext;
import topasin.util.TopAsinUtil;
/**
* create output instance based on config
*
* @author mengzang
*
*/
public class AsinDescriberFactory {
public static final int ASIN_DETAILS_DESCRIBER = 0;
public static final int ASIN_KEY_FIELDS_DESCRIBER = 1;
private static int[] DESCRIBER_TYPES;
private static List<String> DESCRIBER_NAMES = new ArrayList<String>();
@SuppressWarnings("unchecked")
public static void init(Map<String, Object> rtOptions) {
List<String> describerNames = (List<String>) rtOptions.get(TopAsinContext.DESCRIBER_NAMES);
if (CollectionUtils.isEmpty(describerNames)) {
throw new IllegalArgumentException(TopAsinUtil.NO_ASIN_DESCRIBER_ERR);
}
DESCRIBER_TYPES = new int[describerNames.size()];
for (int i = 0; i < describerNames.size(); i++) {
String describerName = describerNames.get(i);
if ("AsinDetailDescriber".equalsIgnoreCase(describerName)) {
DESCRIBER_TYPES[i] = ASIN_DETAILS_DESCRIBER;
DESCRIBER_NAMES.add(describerName);
} else if ("TopAsinKeyFieldsDescriber".equalsIgnoreCase(describerName)) {
DESCRIBER_TYPES[i] = ASIN_KEY_FIELDS_DESCRIBER;
DESCRIBER_NAMES.add(describerName);
TopAsinKeyFieldsDescriber.initKeyFieldNames(rtOptions);
} else {
log("No such describer:" + describerName);
}
}
DESCRIBER_NAMES = Collections.unmodifiableList(DESCRIBER_NAMES);
}
public static TopAsinDescriber[] getAllDescribers() {
TopAsinDescriber[] ret = new TopAsinDescriber[DESCRIBER_TYPES.length];
for (int i = 0; i < DESCRIBER_TYPES.length; i++) {
ret[i] = createOutputInstance(DESCRIBER_TYPES[i]);
}
return ret;
}
public static List<String> getAllDescriberNames() {
return DESCRIBER_NAMES;
}
public static TopAsinDescriber createOutputInstance(int describerType) {
switch (describerType) {
case ASIN_DETAILS_DESCRIBER:
return new AsinDetailDescriber();
case ASIN_KEY_FIELDS_DESCRIBER:
return new TopAsinKeyFieldsDescriber();
default:
return null;
}
}
}