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 }