
package de.ivu.elect.wus.exchange.wahl;

import java.io.OutputStream;

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.wahl.control.WahlExportContext;
import de.ivu.elect.business.wahl.control.WahlExportObject;
import de.ivu.elect.core.exchange.mapper.WahlInternExternMapper;
import de.ivu.elect.interfaces.core.Wahl;
import de.ivu.elect.jee.exchange.XmlMarshaller;

public class WasWahlXMLExportMapper implements WahlExportMapper {

  @Inject
  private transient XmlMarshaller<Wahl> xmlMarshaller;

  @Inject
  private transient WahlInternExternMapper wahlInternExternMapper;

  public WasWahlXMLExportMapper() {
    super();
  }

  @Override
  public boolean isAcceptContext(WahlExportContext context) {
    return false /* Deaktiviert, Dateien zu groß */ && context.getWahl() != null;
  }

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

  @Override
  public void serialize(WahlExportObject exportObject, OutputStream os, WahlExportContext context, FileKonfiguration fileKonfiguration) throws MappingException {
    try {
      Wahl wahl = wahlInternExternMapper.mappe(exportObject.getWahldaten(), exportObject.getDokumentVorlagen(), exportObject.getWahlParameters());

      xmlMarshaller.serialize(wahl, os);
    } catch (JAXBException e) {
      throw new MappingException(e.getMessage(), e);
    }
  }
}
