2015-01-27 6 views
-1

파일 내의 필드에서 목록을 처리하는 SuperCSV 용 사용자 정의 셀 프로세서를 만들려고합니다. 나는리스트를 수용하기 위해 빈 생성자를 변경했다. 이제 프로세서를 생성 할 필요가있다. 그리고 누군가가 이것을 경험했는지 궁금하다. 나는 설명서를 읽었습니다 ... 어떤 도움을 주셔서 감사합니다!목록 용 사용자 정의 셀 프로세서

콩 생성자 :

public class CustomerBean { 
private String name; 
private List<String> manufacturer; 
private String model; 
private List<String> owner; 

public CustomerBean() { 
} 
public CustomerBean(final String name, final List<String> manufacturer, 
    final String model, final List<String> owner, 
    public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public List<String> getManufacturer() { 
    return manufacturer; 
} 
public void setManufacturer(List<String> manufacturer) { 
    this.manufacturer = manufacturer; 
} 
public String getModel() { 
    return model; 
} 
public void setModel(String model) { 
    this.model = model; 
} 
public List<String> getOwner() { 
    return owner; 
} 
public void setOwner(List<String> owner) { 
    this.owner = owner; 
} 

public String toString() { 
    return String 
      .format("[Name=%s, Manufacturer=%s, Model=%s, Owner=%s]", 
        getName(), getManufacturer(), getModel(), getOwner()); 
} 

프로세서 : creating a custom cell processor 쇼에 대한 문서로

public class ParseHandler { 

private static CellProcessor[] getProcessors() { 

    final CellProcessor[] processors = new CellProcessor[] { 

      new Optional(), //name 
      new Optional(), //manufacturer - needs to be processed as a list! 
      new Optional(), //model 
      new Optional(), //owner - needs to be processed as a list! 
      new Optional(), //integration team 
      new Optional(), //shipping 
      new Optional(), //hardware/software 
      new Optional(), //subsystem 
      new Optional(), //plane 
      new Optional(), //integration stand-alone 
      new Optional(), //integration interface 
      new Optional(), //function 
      new Optional(), //help links 
      new Optional(), //installation instructions 
      new Optional(), //test steps 
      new Optional(), //lead engineer 
    }; 
    return processors; 
} 

public static CustomerBean readWithCsvBeanReader(Path path) throws IOException { 
    ICsvBeanReader beanReader = null; 
    CustomerBean customer = null; 
    System.out.println("Processing File: " + path); 
    try { 
     beanReader = new CsvBeanReader(new FileReader(path.toString()), CsvPreference.STANDARD_PREFERENCE); 
     //header elements are the same as the bean property names 
     final String[] header = {"name", "manufacturer", "model", "owner", "integrationTeam", "shipping", "hardwareSoftware", "subsystem", "plane", "integrationStandalone", 
       "integrationInterface", "function", "helpLinks", "installationInstructions", "testSteps", "leadEngineer"}; 
       beanReader.getHeader(true); 
     final CellProcessor[] processors = getProcessors(); 

     if ((customer = beanReader.read(CustomerBean.class, header, processors)) != null) { 
      System.out.println(String.format("%s", customer.toString())); 
     } 
    } finally { 
     if (beanReader != null) { 
      beanReader.close(); 
     } 
    } return customer; 
} 
} 
+0

무엇이 당신의 질문입니다. 확실하게 그것은 "누구도이 경험을 가지고 있지 않습니다" – Kon

답변

0

, 당신은 누구의 execute() 방법 문자열의 목록으로 객체를 반환하는 새로운 셀 프로세서를 만들어야합니다 .

public class ParseStringList extends CellProcessorAdaptor { 

     public ParseStringList() { 
       super(); 
     } 

     public Object execute(Object value, CsvContext context) { 
       validateInputNotNull(value, context); // throws an Exception if the input is null 
       List<String> result = new ArrayList<String>(); 
       result.add((String) object); 
       return result; 
     } 
} 

그럼 당신은 manufacturer 열의 프로세서로 new Optional(new ParseStringList())를 사용할 수 있습니다.

또는 맞춤형 셀 프로세서가 필요하지 않은 경우 documentation에 표시된대로 CsvDozerBeanReader 및 색인 된 매핑 (예 : manufacturer[0])을 사용할 수 있습니다.