
package de.ivu.elect.business.stimmeingabe.control.plausi;

import java.util.Collection;

import de.ivu.elect.business.stimmeingabe.entity.Stimmeingabe;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.jee.faces.Messages;

public class KommunalListenwahlGueltigeListenkandidaturenGesamtZwischensummeGleichGruppeListenkandidaturenGesamtZwischensummenSummePlausi
    extends
      AbstractStimmeingabeAnzahlComparedToStimmeingabeAnzahlenSummePlausi {

  private StimmeingabePlausiFiktiveWerteFehlerBeheber fiktiveWerteFehlerBeheber;

  public KommunalListenwahlGueltigeListenkandidaturenGesamtZwischensummeGleichGruppeListenkandidaturenGesamtZwischensummenSummePlausi(
      Collection<Stimmeingabe> stimmeingabenGruppeListenkandidaturenGesamt, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    this(stimmeingabenGruppeListenkandidaturenGesamt, stimmeingabePlausiKonfiguration, messages, KEIN_FIKTIVE_WERTE_FEHLER_BEHEBER);
  }

  public KommunalListenwahlGueltigeListenkandidaturenGesamtZwischensummeGleichGruppeListenkandidaturenGesamtZwischensummenSummePlausi(
      Collection<Stimmeingabe> stimmeingabenGruppeListenkandidaturenGesamt, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages,
      StimmeingabePlausiFiktiveWerteFehlerBeheber fiktiveWerteFehlerBeheber) {
    super(
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlenPlausiDefinition(StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_LISTENSTIMMEN_ZWISCHENSUMME_LISTENKANDIDATUREN_GESAMT,
            StimmeingabeAnzahlComparedToOperator.EQUAL_TO, StimmeingabeAnzahlReference.GRUPPE_LISTENSTIMMEN_ZWISCHENSUMME_LISTENKANDIDATUREN_GESAMT),
        stimmeingabenGruppeListenkandidaturenGesamt, stimmeingabePlausiKonfiguration, messages);

    this.fiktiveWerteFehlerBeheber = fiktiveWerteFehlerBeheber;
  }

  @Override
  protected StimmeingabePlausiFiktiveWerteFehlerBeheber getFiktiveWerteFehlerBeheber() {
    if (fiktiveWerteFehlerBeheber == null) {
      // Lazy initialisieren, da Initialisierung im Konstruktor nicht ohne weiteres möglich (getComparedToStimmeingaben() wird erst von Unterklassen bestimmt, meist im Konstruktor)
      fiktiveWerteFehlerBeheber = new SummenRueckwaertsKorrigierenderFehlerBeheber(getComparedToStimmeingaben());
    }

    return fiktiveWerteFehlerBeheber;
  }
}
