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

import java.util.List;

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.boundary.PruefkriteriumCreateEvent;
import de.ivu.elect.business.wahlrechtspruefung.entity.Pruefkriterium;
import de.ivu.elect.business.wahlrechtspruefung.entity.PruefkriteriumDaoContainer;

@Stateless
public class WahlrechtspruefungenAnlegenPruefkriteriumCreateEventListener extends AbstractWahlrechtspruefungenAnlegenListener {

  @Inject
  private transient PruefkriteriumDaoContainer pruefkriteriumDaoContainer;

  public WahlrechtspruefungenAnlegenPruefkriteriumCreateEventListener() {
    super();
  }

  /**
   * Lege Wahlrechtsprüfungen für alle bestehenden Kandidaturen und Wahlvorschläge der Wahl an, wenn ein neues Prüfkriterium hinzukommt...
   */
  public void listen(@Observes(notifyObserver = Reception.ALWAYS, during = TransactionPhase.IN_PROGRESS) PruefkriteriumCreateEvent event) {
    Pruefkriterium pruefkriterium = pruefkriteriumDAO.attach(event.getEntity());

    if (pruefkriterium != null) {
      for (Object entitaetZuPruefen : collectEntitaetenZuPruefen(pruefkriterium)) {
        createWahlrechtspruefung(pruefkriterium, entitaetZuPruefen);
      }
    }
  }

  private List< ? extends Object> collectEntitaetenZuPruefen(Pruefkriterium pruefkriterium) {
    return pruefkriterium.getPruefkriteriumBezug().holeZuPruefendeEntitaeten(pruefkriterium.getWahl(), pruefkriteriumDaoContainer);
  }
}
