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

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.internet.control.GebietUndStimmabgabeart;

public class AbstractErgebnisDaten {

  private final Function<Wahldurchfuehrungsgebiet, List<Wahldurchfuehrungsgebiet>> untergeordneteGebiete;

  private final Supplier<Set<Gebiet>> erfassteGebiete;

  public AbstractErgebnisDaten(Function<Wahldurchfuehrungsgebiet, List<Wahldurchfuehrungsgebiet>> untergeordneteGebiete, Supplier<Set<Gebiet>> erfassteGebiete) {
    super();

    this.untergeordneteGebiete = untergeordneteGebiete;

    this.erfassteGebiete = erfassteGebiete;
  }

  protected static long notNull(Long aLong) {
    if (aLong == null) {
      return 0L;
    }

    return aLong;
  }

  protected <T, G extends GebietUndStimmabgabeart> Map<T, Long> bestimmeStimmenOderSummiereAufUntergebieten(G gebietUndStimmabgabeart, Map<G, Map<T, Long>> cache,
      BestimmeStimmen<T, G> bestimmeStimmen) {
    return StimmergebnisDaten.bestimmeStimmenOderSummiereAufUntergebieten(gebietUndStimmabgabeart, cache, bestimmeStimmen, untergeordneteGebiete, erfassteGebiete);
  }
}
