package de.ivu.elect.was.exchange.wahlbeteiligung.xml;

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

import javax.inject.Inject;
import javax.xml.bind.JAXBException;

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.business.wahlbeteiligung.entity.WahlbeteiligungAuswertung;
import de.ivu.elect.business.wahlbeteiligung.entity.WahlbeteiligungAuswertungExchangeContext;
import de.ivu.elect.interfaces.was.wahlbeteiligung.WahlbeteiligungExchange;
import de.ivu.elect.jee.exchange.XmlMarshaller;
import de.ivu.elect.was.exchange.wahlbeteiligung.WahlbeteiligungAuswertungExportMapper;
import de.ivu.elect.was.exchange.wahlbeteiligung.mapper.WasWahlbeteiligungMapper;

public class DefaulXmlWahlbeteiligungAuswertungExportMapper implements WahlbeteiligungAuswertungExportMapper {

  public static final String FILE_FORMAT = "wahlbeteiligung.auswertung.exchange.file.format";

  @Inject
  protected transient XmlMarshaller<WahlbeteiligungExchange> xmlMarshaller;

  @Inject
  private transient WasWahlbeteiligungMapper wahlbeteiligungMapper;

  @Override
  public void serialize(List<WahlbeteiligungAuswertung> wahlbeteiligungAuswertungs, OutputStream os, WahlbeteiligungAuswertungExchangeContext context, FileKonfiguration fileKonfiguration) throws MappingException {
    try {
      xmlMarshaller.serialize(wahlbeteiligungMapper.mappeAuswertungen(wahlbeteiligungAuswertungs), os);
    } catch (JAXBException e) {
      throw new MappingException(e.getMessage(), e);
    }
  }

  @Override
  public FileFormat getFileFormat() {
    return new FileFormat(FILE_FORMAT, FileType.XML);
  }

  @Override
  public boolean isAcceptContext(WahlbeteiligungAuswertungExchangeContext context) {
    return context.getWahl() != null;
  }

}
