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

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlartErgebnisart;
import de.ivu.elect.business.wahlvorschlag.boundary.AbstractDirektkandidatDAO;
import de.ivu.elect.business.wahlvorschlag.boundary.AbstractListeDAO;

public interface StimmeingabePlausiBuilder extends PlausiBuilder {

  /**
   * TODO Durch StimmeingabeErfassenDescription.isApplicable ablösen, cf. Kommentar in StimmeingabeErfassenPlausiBuilderResolver
   */
  boolean isApplicable(Wahl wahl);

  void checkPreConditions(Gebiet gebiet, WahlartErgebnisart ergebnisart, AbstractDirektkandidatDAO direktkandidatDAO, AbstractListeDAO listeDAO);

  StimmeingabePlausiBuilder NO_OP_BUILDER = new StimmeingabePlausiBuilder() {

    @Override
    public boolean isApplicable(Wahl wahl) {
      return false;
    }

    @Override
    public void checkPreConditions(Gebiet gebiet, WahlartErgebnisart ergebnisart, AbstractDirektkandidatDAO direktkandidatDAO, AbstractListeDAO listeDAO) {
      // Do nothing...
    }

    @Override
    public void fillStimmeingabePlausis(Ergebniseingang ergebniseingang) {
      // Do nothing...
    }
  };
}
