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

import java.io.OutputStream;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.benutzerverwaltung.entity.RechteKonfiguration;
import de.ivu.elect.business.benutzerverwaltung.entity.RechteKonfigurationExchangeContext;
import de.ivu.elect.business.datei.entity.FileType;
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.exchange.csv.CsvMarshaller;
import de.ivu.elect.exchange.rolle.RechteKonfigurationExportMapper;

import static java.util.stream.Collectors.toList;

public class CsvRechteKonfigurationExportMapper implements RechteKonfigurationExportMapper {

  @Inject
  protected transient CsvMarshaller csvMarshaller;

  public CsvRechteKonfigurationExportMapper() {
    super();
  }

  @Override
  public void serialize(List<RechteKonfiguration> rechteKonfigurations, OutputStream os, RechteKonfigurationExchangeContext noContext, FileKonfiguration fileKonfiguration) throws MappingException {
    csvMarshaller.serialize(DefaultRechteKonfigurationCsvDTO.class, mappeEntityInternToExtern(rechteKonfigurations), os, fileKonfiguration);
  }

  private List<DefaultRechteKonfigurationCsvDTO> mappeEntityInternToExtern(List<RechteKonfiguration> rechteKonfigurations) {
    return rechteKonfigurations.stream().map(DefaultRechteKonfigurationCsvDTO::new).collect(toList());
  }

  @Override
  public FileFormat getFileFormat() {
    return new FileFormat(CsvRechteKonfigurationImportMapper.FORMAT_NAME, FileType.CSV);
  }

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