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

}