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

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

import de.ivu.elect.business.datei.entity.DateiExport;
import de.ivu.elect.business.exchange.control.AbstractExporter;
import de.ivu.elect.business.exchange.control.ExportExchange;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.gebietsbaum.boundary.GebietDAO;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietExchangeObject;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietExportContext;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietExportExchange;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;

@Stateless
public class GruppeImGebietExporter extends AbstractExporter<GruppeImGebietExchangeObject, GruppeImGebietExportContext> {

  @Inject
  private transient GruppeImGebietExportExchange gruppeImGebietExportExchange;

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient GebietDAO gebietDAO;

  @Inject
  private transient GruppeImGebietDAO gruppeImGebietDAO;

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  @Override
  protected void processContextAndDateiExportIfNecessary(GruppeImGebietExportContext context, DateiExport dateiExport) {
    super.processContextAndDateiExportIfNecessary(context, dateiExport);
    context.setUrsprungsname(dateiExport.getDatei().getDateiname());
  }

  @Override
  public ExportExchange<GruppeImGebietExchangeObject, GruppeImGebietExportContext> getExchange() {
    return gruppeImGebietExportExchange;
  }

  @Override
  public GruppeImGebietExchangeObject getExportObject(GruppeImGebietExportContext context) {
    Wahl wahl = wahlDAO.attach(context.getWahl());

    return new GruppeImGebietExchangeObject(wahl, gebietDAO.findByWahl(wahl), gruppeImGebietDAO.findByWahlEager(wahl),
        wahlvorschlagDAO.findByWahl(wahl));
  }

  @Override
  protected DateiExportArt getDateiExportArt() {
    return DateiExportArt.GRUPPE_IM_GEBIET_EXPORT;
  }

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