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
14
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 }