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

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.control.StimmenPoolDAOFactory;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietReihenfolgeVorsortierer;
import de.ivu.elect.business.kandidatur.boundary.ListenkandidaturDAO;
import de.ivu.elect.business.kandidatur.control.StimmzettelFormatter;
import de.ivu.elect.business.pruefung.boundary.ZulassungPruefer;
import de.ivu.elect.business.pruefung.boundary.ZulassungPrueferDAOFactory;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDatenFactory;
import de.ivu.elect.business.wahl.entity.WahlParameterLoader;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;

@RequestScoped
public class EntityAufStimmzettelDatenDAOFactory implements EntityAufStimmzettelDatenFactory {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlParameterLoader wahlParameterLoader;

  @Inject
  private transient ZulassungPrueferDAOFactory zulassungPrueferDAOFactory;

  @Inject
  private transient StimmenPoolDAOFactory stimmenPoolDAOFactory;

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  @Inject
  private transient ListenkandidaturDAO listenkandidaturDAO;

  @Inject
  private transient StimmzettelFormatter stimmzettelFormatter;

  @Inject
  private transient EntityAufStimmzettelDatenStimmzettelPositionBerechnung entityAufStimmzettelDatenStimmzettelPositionBerechnung;

  @Inject
  private transient GruppeImGebietReihenfolgeVorsortierer gruppeImGebietReihenfolgeVorsortierer;

  public EntityAufStimmzettelDatenDAOFactory() {
    super();
  }

  @Override
  public EntityAufStimmzettelDaten getEntityAufStimmzettelDaten() {
    return new EntityAufStimmzettelDaten(wahlParameterLoader, getZulassungPruefer(), stimmzettelFormatter, entityAufStimmzettelDatenStimmzettelPositionBerechnung, stimmenPoolDAOFactory,
        gruppeImGebietReihenfolgeVorsortierer, wahlvorschlagDAO, listenkandidaturDAO);
  }

  private ZulassungPruefer getZulassungPruefer() {
    return zulassungPrueferDAOFactory.createZulassungPruefer();
  }
}
