1 package us.codecraft.webmagic.handler;
2
3 import us.codecraft.webmagic.Page;
4 import us.codecraft.webmagic.Site;
5 import us.codecraft.webmagic.processor.PageProcessor;
6
7 import java.util.ArrayList;
8 import java.util.List;
9
10
11
12
13 public class CompositePageProcessor implements PageProcessor {
14
15 private Site site;
16
17 private List<SubPageProcessor> subPageProcessors = new ArrayList<SubPageProcessor>();
18
19 public CompositePageProcessor(Site site) {
20 this.site = site;
21 }
22
23 @Override
24 public void process(Page page) {
25 for (SubPageProcessor subPageProcessor : subPageProcessors) {
26 if (subPageProcessor.match(page.getRequest())) {
27 SubPageProcessor.MatchOther matchOtherProcessorProcessor = subPageProcessor.processPage(page);
28 if (matchOtherProcessorProcessor == null || matchOtherProcessorProcessor != SubPageProcessor.MatchOther.YES) {
29 return;
30 }
31 }
32 }
33 }
34
35 public CompositePageProcessor setSite(Site site) {
36 this.site = site;
37 return this;
38 }
39
40 public CompositePageProcessor addSubPageProcessor(SubPageProcessor subPageProcessor) {
41 this.subPageProcessors.add(subPageProcessor);
42 return this;
43 }
44
45 public CompositePageProcessor setSubPageProcessors(SubPageProcessor... subPageProcessors) {
46 this.subPageProcessors = new ArrayList<SubPageProcessor>();
47 for (SubPageProcessor subPageProcessor : subPageProcessors) {
48 this.subPageProcessors.add(subPageProcessor);
49 }
50 return this;
51 }
52
53 @Override
54 public Site getSite() {
55 return site;
56 }
57 }