View Javadoc
1   package us.codecraft.webmagic.selector;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   /**
7    * All selectors will be arranged as a pipeline. <br>
8    * The next selector uses the result of the previous as source.
9    * @author code4crafter@gmail.com <br>
10   * @since 0.2.0
11   */
12  public class AndSelector implements Selector {
13  
14      private List<Selector> selectors = new ArrayList<Selector>();
15  
16      public AndSelector(Selector... selectors) {
17          for (Selector selector : selectors) {
18              this.selectors.add(selector);
19          }
20      }
21  
22      public AndSelector(List<Selector> selectors) {
23          this.selectors = selectors;
24      }
25  
26      @Override
27      public String select(String text) {
28          for (Selector selector : selectors) {
29              if (text == null) {
30                  return null;
31              }
32              text = selector.select(text);
33          }
34          return text;
35      }
36  
37      @Override
38      public List<String> selectList(String text) {
39          List<String> results = new ArrayList<String>();
40          boolean first = true;
41          for (Selector selector : selectors) {
42              if (first) {
43                  results = selector.selectList(text);
44                  first = false;
45              } else {
46                  List<String> resultsTemp = new ArrayList<String>();
47                  for (String result : results) {
48                      resultsTemp.addAll(selector.selectList(result));
49                  }
50                  results = resultsTemp;
51                  if (results == null || results.size() == 0) {
52                      return results;
53                  }
54              }
55          }
56          return results;
57      }
58  }