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

import java.util.function.Function;

import de.ivu.elect.business.gebietsbaum.boundary.AbstractGebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

/**
 *  on 13.07.2016.
 */
public interface EntityMitWurzelgebietDAO {

  /**
   * AbstractGebietDAO::findByWahlterminWurzelgebiet;
   */
  Function<Wahltermin, Gebiet> getWahlterminFct();

  /**
   * AbstractGebietDAO::findByWahlWurzelgebiet;
   */
  Function<Wahl, Gebiet> getWahlFct();

  static EntityMitWurzelgebietDAO fromDao(AbstractGebietDAO gebietDAO) {
    return new EntityMitWurzelgebietDAO() {
      @Override
      public Function<Wahltermin, Gebiet> getWahlterminFct() {
        return gebietDAO::findByWahlterminWurzelgebiet;
      }

      @Override
      public Function<Wahl, Gebiet> getWahlFct() {
        return gebietDAO::findByWahlWurzelgebiet;
      }
    };
  }
}
