View Javadoc
1   package us.codecraft.webmagic.model;
2   
3   import us.codecraft.webmagic.ResultItems;
4   import us.codecraft.webmagic.Task;
5   import us.codecraft.webmagic.model.annotation.ExtractBy;
6   import us.codecraft.webmagic.pipeline.CollectorPageModelPipeline;
7   import us.codecraft.webmagic.pipeline.CollectorPipeline;
8   
9   import java.lang.annotation.Annotation;
10  import java.util.List;
11  
12  /**
13   * @author code4crafter@gmail.com
14   * @since 0.4.0
15   */
16  class PageModelCollectorPipeline<T> implements CollectorPipeline<T> {
17  
18      private final CollectorPageModelPipeline<T> classPipeline = new CollectorPageModelPipeline<T>();
19  
20      private final Class<?> clazz;
21  
22      PageModelCollectorPipeline(Class<?> clazz) {
23          this.clazz = clazz;
24      }
25  
26      @Override
27      public List<T> getCollected() {
28          return classPipeline.getCollected();
29      }
30  
31      @Override
32      public synchronized void process(ResultItems resultItems, Task task) {
33          Object o = resultItems.get(clazz.getCanonicalName());
34          if (o != null) {
35              Annotation annotation = clazz.getAnnotation(ExtractBy.class);
36              if (annotation == null || !((ExtractBy) annotation).multi()) {
37                  classPipeline.process((T) o, task);
38              } else {
39                  List<Object> list = (List<Object>) o;
40                  for (Object o1 : list) {
41                     classPipeline.process((T) o1, task);
42                  }
43              }
44          }
45      }
46  }