
package de.ivu.elect.was.exchange.stimmeingabe;

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.stimmeingabe.control.StimmeingabePlausiKonfigurationExportContext;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfigurationen;
import de.ivu.elect.jee.exchange.XmlMarshaller;

import javax.inject.Inject;
import javax.xml.bind.JAXBException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class StimmeingabePlausiKonfigurationXMLExportMapper implements StimmeingabePlausiKonfigurationExportMapper {

  public static final String FORMAT_NAME = "file.format.stimmeingabe.plausi.konfigurationen";

  @Inject
  private transient XmlMarshaller<StimmeingabePlausiKonfigurationen> xmlMarshaller;

  @Inject
  private transient StimmeingabePlausiKonfigurationMapper stimmeingabePlausiKonfigurationMapper;

  @Override
  public void serialize(List<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationen, OutputStream os, StimmeingabePlausiKonfigurationExportContext context, FileKonfiguration fileKonfiguration) throws MappingException {
    try {
      xmlMarshaller.serialize(mappe(stimmeingabePlausiKonfigurationen), os);
    } catch (JAXBException e) {
      throw new MappingException(e.getMessage(), e);
    }
  }

  private de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfigurationen mappe(List<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationenIntern) {
    StimmeingabePlausiKonfigurationen stimmeingabePlausiKonfigurationenExtern = stimmeingabePlausiKonfigurationMapper.mappe(stimmeingabePlausiKonfigurationenIntern);
    if (stimmeingabePlausiKonfigurationenExtern == null) {
      stimmeingabePlausiKonfigurationenExtern = new StimmeingabePlausiKonfigurationen();
      stimmeingabePlausiKonfigurationenExtern.setStimmeingabePlausiKonfigurationen(new ArrayList<>());
    }
    return stimmeingabePlausiKonfigurationenExtern;
  }

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

  @Override
  public boolean isAcceptContext(StimmeingabePlausiKonfigurationExportContext context) {
    return true;
  }
}
