package com.geccocrawler.gecco.pipeline;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.reflections.Reflections;
import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.spider.SpiderBean;
public class DefaultPipelineFactory implements PipelineFactory {
private Map<String, Pipeline<? extends SpiderBean>> pipelines;
@SuppressWarnings({ "unchecked" })
public DefaultPipelineFactory(Reflections reflections) {
this.pipelines = new HashMap<String, Pipeline<? extends SpiderBean>>();
Set<Class<?>> pipelineClasses = reflections.getTypesAnnotatedWith(PipelineName.class);
for (Class<?> pipelineClass : pipelineClasses) {
PipelineName spiderFilter = pipelineClass.getAnnotation(PipelineName.class);
try {
pipelines.put(spiderFilter.value(), (Pipeline<? extends SpiderBean>) pipelineClass.newInstance());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
@Override
public Pipeline<? extends SpiderBean> getPipeline(String name) {
return pipelines.get(name);
}
}