View Javadoc
1   package us.codecraft.webmagic.model.fields;
2   
3   import java.lang.reflect.InvocationTargetException;
4   import java.util.ArrayList;
5   import java.util.List;
6   
7   import org.slf4j.Logger;
8   
9   import lombok.Getter;
10  import us.codecraft.webmagic.model.FieldExtractor;
11  import us.codecraft.webmagic.model.formatter.ObjectFormatter;
12  
13  public class MultipleField extends PageField {
14     @Getter
15     private List<String> fieldNames; 
16  
17     public MultipleField(List<String> fieldNames) {
18        this.fieldNames = fieldNames;
19     }
20     
21     public boolean operation(Object o, FieldExtractor fieldExtractor, Logger logger) throws IllegalAccessException, InvocationTargetException {
22        if ((this.fieldNames == null || this.fieldNames.size() == 0) && fieldExtractor.isNotNull())
23           return false;
24        if (fieldExtractor.getObjectFormatter() != null) {
25           List<Object> converted = this.convert(this.fieldNames, fieldExtractor.getObjectFormatter(), logger);
26           setField(o, fieldExtractor, converted);
27        }
28        else
29           setField(o, fieldExtractor, this.fieldNames);
30        return true;
31     }
32  
33     private List<Object> convert(List<String> values, ObjectFormatter objectFormatter, Logger logger) {
34        List<Object> objects = new ArrayList<>();
35        for (String value : values) {
36            Object converted = this.convert(value, objectFormatter, logger);
37            if (converted != null)
38                objects.add(converted);
39        }
40        return objects;
41    }
42  }