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

import java.io.Serializable;

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

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

import de.ivu.elect.business.ergebnis.boundary.ErgebnisDAO;
import de.ivu.elect.business.ergebnis.boundary.Ergebnisberechnung;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlPK;

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class ErgebnisBerechnenAusloesen implements Serializable {

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

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlDAO wahlDAO;

  @Inject
  private transient ErgebnisDAO ergebnisDAO;

  @Inject
  private transient Ergebnisberechnung ergebnisberechnung;

  public ErgebnisBerechnenAusloesen() {
    super();
  }

  public void ergebnisBerechnenAusloeser(WahlPK wahlPK, boolean gueltigeErgebniseingaengeErneutUebernehmen) {
    Wahl wahl = wahlDAO.findByPrimaryKey(wahlPK);

    LOG.info("Loese Ergebnisberechnung aus [wahl = " + wahl + ", gueltigeErgebniseingaengeErneutUebernehmen = " + gueltigeErgebniseingaengeErneutUebernehmen + "]");

    for (Ergebnis ergebnis : ergebnisDAO.findByWahl(wahl)) {
      if (gueltigeErgebniseingaengeErneutUebernehmen) {
        ergebnisberechnung.ergebnisBerechnenAusloesenUebernahmeGueltigerEingaenge(ergebnis);
      } else {
        ergebnisberechnung.ergebnisBerechnenAusloesenOhneUebernahme(ergebnis);
      }
    }
  }
}
