Как реализовать композицию в OpenCSV? - PullRequest
0 голосов
/ 18 марта 2020

есть два bean-компонента:

public class Person {
    private long id;
    private String name;
// getter setter
}
public class Job {
    private long id;
    private Person person;
// getter setter
}

Документация предоставляет пример, в котором вложенный компонент представлен в виде списка:

public class Person {
    @CsvBindByPosition(position = 0)
    private long id;
    @CsvBindByPosition(position = 1)
    private String name;
// getter setter
}
public class Job {
    @CsvBindByPosition(position = 0)
    private long id;
    @CsvBindAndSplitByPosition(position = 1, converter = TextToPerson.class, elementType = Person.class)
    private List<Person> person;
// getter setter
}

Класс преобразователя :

public class TextToPerson extends AbstractCsvConverter {

    @Override
    public Object convertToRead(String s) throws CsvDataTypeMismatchException, CsvConstraintViolationException {
        Person person = new Person();
        DataProviderCSV csv = new DataProviderCSV();
        csv.getPersonById(Long.parseLong(s)).forEach(p->{
            person.setId(p.getId());
            person.setName(p.getName());
        });
        return person;
    }
    @Override
    public String convertToWrite(Object value) throws CsvDataTypeMismatchException {
        Person person = (Person) value;
        return String.valueOf(person.getId());
    }
}

Id, и при чтении данные были взяты из другой таблицы.

ConvertToWrite работает, но:

1) convertToRead () не работает, я использовать CsvToBeanBuilder () для чтения. WithType (clazz)?

2) Как я могу использовать Person вместо List в компоненте Job?

...