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

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;

public abstract class AbstractStimmenErfassenModel {

  private final Wahldurchfuehrungsgebiet bezugGebiet;

  public AbstractStimmenErfassenModel(Wahldurchfuehrungsgebiet bezugGebiet) {
    super();

    this.bezugGebiet = bezugGebiet;
  }

  public Wahldurchfuehrungsgebiet getBezugGebiet() {
    return bezugGebiet;
  }

  protected List<Stimmeingabe> extractStimmeingaben(Collection< ? extends StimmeingabeStimmen> stimmeingabeStimmens) {
    return AbstractStimmeingabeStimmen.extractStimmeingaben(stimmeingabeStimmens);
  }

  /**
   * NOTE, dass das Ergebnis UNSORTIERT ist! Die Sortierung übernimmt der ModelBuilder mit den layout...()-Methoden!
   */
  public abstract Collection< ? extends StimmeingabeStimmen> getAllStimmeingabeValueObjects();

  /**
   * NOTE, dass das Ergebnis UNSORTIERT ist! Die Sortierung übernimmt der ModelBuilder mit den layout...()-Methoden!
   */
  public Collection<Stimmeingabe> getAllStimmeingaben() {
    Collection<Stimmeingabe> result = new ArrayList<>();

    for (StimmeingabeStimmen stimmeingabeStimmen : getAllStimmeingabeValueObjects()) {
      result.addAll(stimmeingabeStimmen.getStimmeingaben());
    }

    return result;
  }
}
