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

import de.ivu.elect.business.exchange.control.AbstractWahlterminExchangeContext;
import de.ivu.elect.business.gebietsbaum.boundary.GebietImportAktualisierenArt;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class GebietsbaumExchangeContext extends AbstractWahlterminExchangeContext {

  private static final long serialVersionUID = 1L;

  private final Wahl wahl;

  private final GebietImportAktualisierenArt gebietImportAktualisierenArt;

  private String nameDerExportDatei;

  private WurzelgebietExchangeFilter wurzelgebietFilter = new WurzelgebietExchangeFilter();

  public GebietsbaumExchangeContext(Wahl wahl) {
    this(bestimmeWahltermin(wahl), wahl);
  }

  public GebietsbaumExchangeContext(Wahltermin wahltermin) {
    this(wahltermin, null);
  }

  public GebietsbaumExchangeContext(Wahltermin wahltermin, Wahl wahl) {
    this(wahltermin, wahl, GebietImportAktualisierenArt.NICHTS_AKTUALISIEREN);
  }

  public GebietsbaumExchangeContext(Wahltermin wahltermin, Wahl wahl, GebietImportAktualisierenArt gebietImportAktualisierenArt) {
    super(wahltermin);

    this.wahl = wahl;
    this.gebietImportAktualisierenArt = gebietImportAktualisierenArt;
  }

  public boolean hasWahl() {
    return getWahl() != null;
  }

  public Wahl getWahl() {
    return wahl;
  }

  public GebietImportAktualisierenArt getGebietImportAktualisierenArt() {
    return gebietImportAktualisierenArt;
  }

  /**
   * Siehe ELECT-265, stellt den Name der exportierten Datei zum Exportzeitpunkt da.
   */
  public String getNameDerExportDatei() {
    return nameDerExportDatei;
  }

  public void setNameDerExportDatei(String nameDerExportDatei) {
    this.nameDerExportDatei = nameDerExportDatei;
  }

  public WurzelgebietExchangeFilter getWurzelgebietFilter() {
    return wurzelgebietFilter;
  }

  public void setWurzelgebietFilter(WurzelgebietExchangeFilter wurzelgebietFilter) {
    this.wurzelgebietFilter = wurzelgebietFilter;
  }

  private static Wahltermin bestimmeWahltermin(Wahl wahl) {
    if (wahl == null) {
      return null;
    }

    return wahl.getWahltermin();
  }
}
