@Service
@Slf4jpublic
class CsvScannerImpl implements CsvScanner {
private static final Integer PID_COL = 0;
private static final Integer SO_COL = 1;
private static final Integer CATEGORY_COL = 2;
private static final Integer MAX_COL_SIZE = 3;
@SneakyThrows
@Override
public List<IdentificationDataHolder> parseCsv(InputStream inputCsv) {
log.debug("parseCsv() method started");
List<IdentificationDataHolder> parsedResult = new LinkedList<>();
var bomInputStream = new BOMInputStream(inputCsv, false);
var csvReader = new CSVReaderBuilder(new InputStreamReader(bomInputStream)).withCSVParser(new CSVParserBuilder().build()).build();
for (String[] csvLine : csvReader.readAll() ) {
var csvEntryBuilder = IdentificationDataHolder.builder().pid(csvLine[PID_COL]).so(csvLine[SO_COL]);
if (csvLine.length == MAX_COL_SIZE) {
csvEntryBuilder = csvEntryBuilder.category(csvLine[CATEGORY_COL]);
}
parsedResult.add(csvEntryBuilder.build());
}
log.debug("parseCsv() method finished with result: {}",parsedResult);
return parsedResult;
}
}