EnrichCatalogGlassesLineMapper.java
package com.sintia.ffl.admin.optique.catalogue.batch.reader.enrichcatalog;
import com.sintia.ffl.admin.optique.catalogue.models.AssociationCSV;
import com.sintia.ffl.admin.optique.catalogue.models.GlassesCSV;
import com.sintia.ffl.admin.optique.catalogue.util.Constants;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.file.transform.FieldSet;
/**
* Convert the raw data from the CSV file to a {@link AssociationCSV} object
*
* @author jumazet
*/
public class EnrichCatalogGlassesLineMapper implements LineMapper<GlassesCSV> {
private final String[] columnsName = new String[] { "maker", "provider", "glassOptoCode", "glassClass", "glassName",
"geometry", "material", "surfaceType", "hardened",
"antiReflection", "photochromic", "refractiveIndex", "tinted", "action", "expiryDate", "startDate" };
@Override
public GlassesCSV mapLine(String line, int lineNumber) {
GlassesCSV result = new GlassesCSV();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(columnsName);
tokenizer.setDelimiter(Constants.CSV_SEPARATOR);
FieldSet fields = tokenizer.tokenize(line);
result.setMaker(fields.readString("maker"));
result.setProvider(fields.readString("provider"));
result.setGlassOptoCode(fields.readString("glassOptoCode"));
result.setClassCode(fields.readString("glassClass"));
result.setGlassName(fields.readString("glassName"));
result.setGeometry(fields.readString("geometry"));
result.setMaterial(fields.readString("material"));
result.setSurfaceType("AS".equals(fields.readString("surfaceType")));
result.setHardened("DU".equals(fields.readString("hardened")));
result.setAntiReflection("SAR".equals(fields.readString("antiReflection")));
result.setPhotochromic("PR".equals(fields.readString("photochromic")));
result.setRefractiveIndex(fields.readInt("refractiveIndex"));
result.setTinted("CO".equals(fields.readString("tinted")));
result.setAction(fields.readString("action"));
// We test first if the field expiryDate has a value, because otherwise we will
// have some IllegalArgumentException when the field is empty or when the
// value is not correct. And we will not be able to differentiate them.
if (!"".equals(fields.readString("expiryDate"))) {
result.setExpiryDate(new java.sql.Date(fields.readDate("expiryDate", "dd/MM/yyyy")
.getTime()).toLocalDate());
}
if (!"".equals(fields.readString("startDate"))) {
result.setStartDate(new java.sql.Date(fields.readDate("startDate", "dd/MM/yyyy")
.getTime()).toLocalDate());
}
return result;
}
}