
package de.ivu.elect.business.ergebnis.boundary;

import javax.ejb.Stateless;
import javax.inject.Inject;

import de.ivu.elect.business.datei.entity.DateiExportPK;
import de.ivu.elect.business.ergebnis.control.ErgebnisDatenCreator;
import de.ivu.elect.business.ergebnis.control.ErgebnisExportContext;
import de.ivu.elect.business.ergebnis.control.ErgebnisExportExchange;
import de.ivu.elect.business.ergebnis.control.ErgebnisExportObject;
import de.ivu.elect.business.ergebnis.entity.Stimmabgabeart;
import de.ivu.elect.business.exchange.control.AbstractExporter;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.jee.exception.NoRollbackException;

@Stateless
public class ErgebnisExporter extends AbstractExporter<ErgebnisExportObject, ErgebnisExportContext> {

  public static final DateiExportArt DATEI_EXPORT_ART = DateiExportArt.ERGEBNIS_EXPORT;

  public static final String ERGEBNIS_DATEN_CUSTOM_KEY = "ERGEBNIS_DATEN_CUSTOM_KEY";

  @Inject
  private transient ErgebnisExportExchange ergebnisExportExchange;

  @Inject
  private transient ErgebnisDatenCreator ergebnisDatenCreator;

  public ErgebnisExporter() {
    super();
  }

  @Override
  protected boolean isExportHeader() {
    return true;
  }

  @Override
  protected DateiExportArt getDateiExportArt() {
    return DATEI_EXPORT_ART;
  }

  @Override
  protected ErgebnisExportExchange getExchange() {
    return ergebnisExportExchange;
  }

  @Override
  public ErgebnisExportObject getExportObject(ErgebnisExportContext ergebnisExportContext) {
    ErgebnisExportObject result = ergebnisExportContext.get(ERGEBNIS_DATEN_CUSTOM_KEY, ErgebnisExportObject.class);

    if (result != null) {
      return result;
    }

    return new ErgebnisExportObject(ergebnisDatenCreator.createErgebnisDatenExporte(ergebnisExportContext.getErgebnis()), getBetrachtetetStimmabgabeart());
  }

  // WASDE-629
  protected Stimmabgabeart getBetrachtetetStimmabgabeart() {
    return Stimmabgabeart.GESAMT;
  }

  /**
   * ELECT-8181
   */
  public DateiExportPK exportNoRollback(FileFormat fileFormat, ErgebnisExportContext context, Mandant mandant, Wahl wahl, Wahltermin wahltermin) {
    try {
      return super.export(fileFormat, context, mandant, wahl, wahltermin);
    } catch (Exception e) {
      throw new NoRollbackException(e);
    }
  }
}
