View Javadoc
1   package us.codecraft.webmagic.selector;
2   
3   
4   import java.util.ArrayList;
5   import java.util.List;
6   
7   import org.apache.commons.collections4.CollectionUtils;
8   
9   /**
10   * @author code4crafer@gmail.com
11   * @since 0.5.2
12   */
13  public abstract class AbstractSelectable implements Selectable {
14  
15      protected abstract List<String> getSourceTexts();
16  
17      @Override
18      public Selectable css(String selector) {
19          return $(selector);
20      }
21  
22      @Override
23      public Selectable css(String selector, String attrName) {
24          return $(selector, attrName);
25      }
26  
27      protected Selectable select(Selector selector, List<String> strings) {
28          List<String> results = new ArrayList<String>();
29          for (String string : strings) {
30              String result = selector.select(string);
31              if (result != null) {
32                  results.add(result);
33              }
34          }
35          return new PlainText(results);
36      }
37  
38      protected Selectable selectList(Selector selector, List<String> strings) {
39          List<String> results = new ArrayList<String>();
40          for (String string : strings) {
41              List<String> result = selector.selectList(string);
42              results.addAll(result);
43          }
44          return new PlainText(results);
45      }
46  
47      @Override
48      public List<String> all() {
49          return getSourceTexts();
50      }
51  
52      @Override
53      public Selectable jsonPath(String jsonPath) {
54          throw new UnsupportedOperationException();
55      }
56  
57      @Override
58      public String get() {
59      	List<String> sourceTexts = all();
60          if (CollectionUtils.isNotEmpty(sourceTexts)) {
61              return sourceTexts.get(0);
62          } 
63          return null;
64          
65      }
66  
67      @Override
68      public Selectable select(Selector selector) {
69          return select(selector, getSourceTexts());
70      }
71  
72      @Override
73      public Selectable selectList(Selector selector) {
74          return selectList(selector, getSourceTexts());
75      }
76  
77      @Override
78      public Selectable regex(String regex) {
79          RegexSelector regexSelector = Selectors.regex(regex);
80          return selectList(regexSelector, getSourceTexts());
81      }
82  
83      @Override
84      public Selectable regex(String regex, int group) {
85          RegexSelector regexSelector = Selectors.regex(regex, group);
86          return selectList(regexSelector, getSourceTexts());
87      }
88  
89      @Override
90      public Selectable replace(String regex, String replacement) {
91          ReplaceSelector replaceSelector = new ReplaceSelector(regex,replacement);
92          return select(replaceSelector, getSourceTexts());
93      }
94  
95      public String getFirstSourceText() {
96      	List<String> sourceTexts = getSourceTexts();
97          if (CollectionUtils.isNotEmpty(sourceTexts)) {
98              return sourceTexts.get(0);
99          }
100         return null;
101     }
102 
103     @Override
104     public String toString() {
105         return get();
106     }
107 
108     @Override
109     public boolean match() {
110         return CollectionUtils.isNotEmpty(getSourceTexts());
111     }
112 }