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

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

import javax.annotation.Nullable;

import de.ivu.elect.business.dokumente.control.ElectDokumentContext;
import de.ivu.elect.business.ergebnis.control.ErgebnisDaten;
import de.ivu.elect.business.ergebnis.control.ErgebnisExchangeContext;
import de.ivu.elect.business.gebietsbaum.boundary.AbstractGebietDAO;
import de.ivu.elect.business.gebietsbaum.boundary.GebietsartTemplate;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.kandidatur.control.StimmzettelFormatterKandidaturFormatDarstellung;

public class GesamtErgebnisDokumentContext extends ElectDokumentContext {

  private static final long serialVersionUID = 1L;

  private final ErgebnisExchangeContext ergebnisExchangeContext;

  private transient ErgebnisDaten ergebnisDaten;

  private transient List<Wahldurchfuehrungsgebiet> gebiete;

  private final Collection<GebietsartTemplate> gebieteMitDetailsGebietsarten;

  private transient List<Wahldurchfuehrungsgebiet> gebieteMitDetails;

  public GesamtErgebnisDokumentContext(ElectDokumentContext electDokumentContext, ErgebnisExchangeContext ergebnisExchangeContext, Collection<GebietsartTemplate> gebieteMitDetailsGebietsarten) {
    super(electDokumentContext);

    this.ergebnisExchangeContext = ergebnisExchangeContext;

    this.gebieteMitDetailsGebietsarten = gebieteMitDetailsGebietsarten;
  }

  public ErgebnisDaten getErgebnisDaten() {
    return ergebnisDaten;
  }

  public void setErgebnisDaten(ErgebnisDaten ergebnisDaten) {
    this.ergebnisDaten = ergebnisDaten;
  }

  public Collection<Wahldurchfuehrungsgebiet> collectGebieteExportierbar(AbstractGebietDAO gebietDAO, List<Wahldurchfuehrungsgebiet> gebiete) {
    return ergebnisExchangeContext.collectEntitiesExportierbar(gebietDAO, gebiete);
  }

  @Nullable
  public StimmzettelFormatterKandidaturFormatDarstellung getKandidaturFormatDarstellung() {
    return ergebnisExchangeContext.getKandidaturFormatDarstellung();
  }

  public List<Wahldurchfuehrungsgebiet> getGebiete() {
    return gebiete;
  }

  public void setGebiete(List<Wahldurchfuehrungsgebiet> gebiete) {
    this.gebiete = gebiete;
  }

  public Collection<GebietsartTemplate> getGebieteMitDetailsGebietsarten() {
    return gebieteMitDetailsGebietsarten;
  }

  public List<Wahldurchfuehrungsgebiet> getGebieteMitDetails() {
    return gebieteMitDetails;
  }

  public void setGebieteMitDetails(List<Wahldurchfuehrungsgebiet> gebieteMitDetails) {
    this.gebieteMitDetails = gebieteMitDetails;
  }

  public void removeErgebnisDaten() {
    ergebnisDaten = null;
  }

  public void removeGebiete() {
    gebiete = null;
  }

  public void removeGebieteMitDetails() {
    gebieteMitDetails = null;
  }
}
