
package de.ivu.elect.exchange.lokalisierung.csv;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.exchange.control.FileKonfiguration;
import de.ivu.elect.business.exchange.control.MappingException;
import de.ivu.elect.business.exchange.control.NoContext;
import de.ivu.elect.business.lokalisierung.entity.Lokalisierung;
import de.ivu.elect.exchange.CsvImportMapper;
import de.ivu.elect.exchange.csv.CsvMarshaller;
import de.ivu.elect.exchange.lokalisierung.LokalisierungImportMapper;
import de.ivu.elect.jee.exchange.Violations;

public class LokalisierungGeaendertCsvImportMapper implements LokalisierungImportMapper, CsvImportMapper<List<Lokalisierung>, NoContext> {

  @Inject
  private transient CsvMarshaller csvMarshaller;

  public LokalisierungGeaendertCsvImportMapper() {
    super();
  }

  @Override
  public List<Lokalisierung> deserialize(InputStream is, NoContext noContext, FileKonfiguration fileKonfiguration) throws MappingException {
    return mappe(csvMarshaller.deserialize(LokalisierungDTO.class, is, fileKonfiguration));
  }

  private List<Lokalisierung> mappe(List<LokalisierungDTO> deserialize) {
    List<Lokalisierung> result = new ArrayList<>(deserialize.size());

    for (LokalisierungDTO lokalisierungDTO : deserialize) {
      result.add(lokalisierungDTO.getLokalisierung());
    }

    return result;
  }

  @Override
  public Violations validateInputFormat(InputStream is, NoContext noContext, FileKonfiguration fileKonfiguration) {
    return new Violations();
  }

  @Override
  public FileFormat getFileFormat() {
    return LokalisierungGeaendertCsvExportMapper.FILE_FORMAT;
  }

  @Override
  public boolean isAcceptContext(NoContext noContext) {
    return true;
  }

  @Override
  public List<String> getCsvColumnHeaders(NoContext context) {
    return csvMarshaller.extractHeader(LokalisierungDTO.class);
  }
}
