package com.linkedin.thirdeye.anomalydetection.datafilter;
import java.util.Collections;
import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
public class DataFilterFactory {
public static final String FILTER_TYPE_KEY = "type";
private static final DataFilter DUMMY_DATA_FILTER = new DummyDataFilter();
public enum FilterType {
DUMMY, AVERAGE_THRESHOLD
}
public static DataFilter fromSpec(Map<String, String> spec) {
if (MapUtils.isEmpty(spec)) {
spec = Collections.emptyMap();
}
DataFilter dataFilter = fromStringType(spec.get(FILTER_TYPE_KEY));
dataFilter.setParameters(spec);
return dataFilter;
}
private static DataFilter fromStringType(String type) {
if (StringUtils.isBlank(type)) { // backward compatibility
return DUMMY_DATA_FILTER;
}
FilterType filterType = FilterType.DUMMY;
for (FilterType enumFilterType : FilterType.class.getEnumConstants()) {
if (enumFilterType.name().compareToIgnoreCase(type) == 0) {
filterType = enumFilterType;
break;
}
}
switch (filterType) {
case DUMMY: // speed optimization for most use cases
return DUMMY_DATA_FILTER;
case AVERAGE_THRESHOLD:
return new AverageThresholdDataFilter();
default:
return DUMMY_DATA_FILTER;
}
}
}