View Javadoc
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   * @author code4crafter@gmail.com
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  }