2015-01-27 1 views
-1

Я пытаюсь создать собственный процессор ячеек для SuperCSV, который будет обрабатывать список из поля внутри файла. Я изменил конструктор bean для размещения списков, теперь мне просто нужно создать процессор, и мне было интересно, есть ли у кого-нибудь опыт с этим. Я прочитал документацию ... любая помощь приветствуется!Пользовательский ячеистый процессор для списков

Bean Конструктор:

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()); 
} 

Процессор:

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

В документации creating a custom cell processor показывает, вам просто нужно создать новый процессор ячейки которого 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; 
     } 
} 

Затем вы можете использовать new Optional(new ParseStringList()) как процессор для manufacturer колонки.

В качестве альтернативы (без использования специального процессора ячеек) вы можете использовать только CsvDozerBeanReader и индексированное сопоставление (например, manufacturer[0]), как показано на рисунке documentation.

 Смежные вопросы

  • Нет связанных вопросов^_^