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

import javax.enterprise.inject.Instance;
import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabeDocumentByErgebniseingangExportContext;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabeDocumentByErgebniseingangExportExchange;
import de.ivu.elect.business.stimmeingabe.control.WasStimmeingabeDocumentByErgebniseingangExportObject;
import de.ivu.elect.exchange.AbstractExportExchange;
import de.ivu.elect.exchange.ExchangeException;
import de.ivu.elect.exchange.ExportMapper;

public class DefaultStimmeingabeDocumentByErgebniseingangExportExchange
    extends
      AbstractExportExchange<WasStimmeingabeDocumentByErgebniseingangExportObject, StimmeingabeDocumentByErgebniseingangExportContext>
    implements
      StimmeingabeDocumentByErgebniseingangExportExchange {

  private static final Logger LOG = LoggerFactory.getLogger(DefaultStimmeingabeDocumentByErgebniseingangExportExchange.class);

  @Inject
  private transient Instance<StimmeingabeDocumentByErgebniseingangExportMapper> exportMapper;

  public DefaultStimmeingabeDocumentByErgebniseingangExportExchange() {
    super();
  }

  @Override
  protected Iterable< ? extends ExportMapper<WasStimmeingabeDocumentByErgebniseingangExportObject, StimmeingabeDocumentByErgebniseingangExportContext>> getAllSupportedMapper() {
    return exportMapper;
  }

  @Override
  public boolean isDokumentVorlageBenoetigt(StimmeingabeDocumentByErgebniseingangExportContext exportContext, FileFormat fileFormat) {
    try {
      for (ExportMapper<WasStimmeingabeDocumentByErgebniseingangExportObject, StimmeingabeDocumentByErgebniseingangExportContext> mapper : getSupportedMapperForContext(exportContext)) {
        if (mapper.getFileFormat().equals(fileFormat)) {
          return ((StimmeingabeDocumentByErgebniseingangExportMapper) mapper).isDokumentVorlageBenoetigt();
        }
      }
    } catch (ExchangeException ignored) {
      LOG.debug("Fehler beim Abfrage von ExportMappern.", ignored);
      // Der fehlende Mapper fliegt uns noch an anderer Stelle um die Ohren und wird da auch richtig behandelt.
      // An dieser Stelle aber lautet die fachlich korrekte Antwort: ohne Mapper braucht auch niemand eine Vorlage.
    }

    return false;
  }
}
