
package de.ivu.elect.business.wahl.entity;

import javax.annotation.Nullable;
import javax.persistence.NoResultException;

import de.ivu.elect.business.ergebnis.boundary.AbstractErgebnisDAO;
import de.ivu.elect.business.ergebnis.entity.AbstractErgebnis;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.gebietsbaum.boundary.AbstractWahldurchfuehrungsgebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.jee.entity.customdata.CustomData;

public abstract class AbstractWahldurchfuehrung extends Wahl implements WahldurchfuehrungBase {

  private static final long serialVersionUID = 1L;

  protected AbstractWahldurchfuehrung() {
    super();
  }

  public AbstractWahldurchfuehrung(CustomData customData) {
    super(customData);
  }

  public boolean isErgebniseingangsartEndgueltig() {
    return getErgebniseingangsart().isEndgueltig();
  }

  @Nullable
  public Wahldurchfuehrungsgebiet getWurzelgebiet(AbstractWahldurchfuehrungsgebietDAO gebietDAO) {
    try {
      return gebietDAO.findByWahlWurzelgebiet(this);
    } catch (NoResultException nre) {
      return null;
    }
  }

  public Ergebnis bestimmeZuBerechnendesErgebnis(AbstractErgebnisDAO ergebnisDAO) {
    return AbstractErgebnis.getErgebnisZurWahlNachErgebnisart(getErgebniseingangsart().korrespondierendeErgebnisart(), this, ergebnisDAO);
  }

  @Override
  public boolean isWahldatumNichtFestgelegt() {
    return getWahltermin().isWahldatumNichtFestgelegt();
  }
}
