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

import javax.ejb.Stateless;
import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.enterprise.event.TransactionPhase;
import javax.inject.Inject;

import de.ivu.elect.business.wahlrechtspruefung.entity.AbstractPruefkriterium;
import de.ivu.elect.business.wahlrechtspruefung.entity.Pruefkriterium;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagCreateEvent;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

@Stateless
public class WahlrechtspruefungenAnlegenWahlvorschlagCreateEventListener extends AbstractWahlrechtspruefungenAnlegenListener {

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  public WahlrechtspruefungenAnlegenWahlvorschlagCreateEventListener() {
    super();
  }

  /**
   * Lege Wahlrechtsprüfungen für alle bestehenden Prüfkriterien der Wahl an, wenn ein neuer Wahlvorschlag hinzukommt...
   */
//  @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) // ELECT-3319
//  public void listen(@Observes(notifyObserver = Reception.ALWAYS, during = TransactionPhase.AFTER_SUCCESS) WahlvorschlagCreateEvent event) {
  // @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) // ELECT-3319
  public void listen(@Observes(notifyObserver = Reception.ALWAYS, during = TransactionPhase.IN_PROGRESS) WahlvorschlagCreateEvent event) {
    Wahlvorschlag wahlvorschlag = wahlvorschlagDAO.attach(event.getEntity());

    // Direktkandidaten werden in WahlrechtspruefungenAktualisierenKandidaturCreateEventListener behandelt...
    if (wahlvorschlag != null) {
      if (!wahlvorschlag.isDirektkandidat()) {
        for (Pruefkriterium pruefkriterium : collectPruefkriterien(wahlvorschlag.getWahl(), wahlvorschlag)) {
          createWahlrechtspruefung(pruefkriterium, wahlvorschlag);
        }
      }
      wahlvorschlag.getTransientContext().remove(AbstractPruefkriterium.KEINE_EXISTENZPRUEFUNG_BEIM_ANLEGEN);
    }
  }
}
