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

import javax.annotation.Nullable;

import de.ivu.elect.business.exchange.control.AbstractWahlterminExchangeContext;
import de.ivu.elect.business.exchange.control.ContextMitImportInstanceTracker;
import de.ivu.elect.business.exchange.control.ImportInstanceTracker;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class VeranstaltungExchangeContext extends AbstractWahlterminExchangeContext implements
    ContextMitImportInstanceTracker
{

  private static final long serialVersionUID = 1L;

  private final Wahl wahl;
  private final Gebiet gebiet;

  /**
   * HINT: Fall WahlterminImporter, dort werden die Personendaten aus der Datei gelesen, dann persistiert, dann separat
   * die Teilnahmen aus der Datei gelesen und importiert. Mit dem ImportInstanceTracker können wir uns aber an der
   * dateispezifischen Referenz (bspw. Person.id) den Datenbank-PK merken.
   */
  private ImportInstanceTracker importInstanceTracker = ImportInstanceTracker.DEAKTIVIERT;

  /**
   * HINT: Fall WahlImporter, dort werden zunächst die Personendaten aus der Datei gelesen, dann persistiert, und dann
   * direkt die Teilnahmen (mit den schon persistierten Personendaten) in den Importer gegeben.
   */
  private boolean teilnahmePersonendatenSindBereitsPersistent = false;

  public VeranstaltungExchangeContext(Wahltermin wahltermin, @Nullable Wahl wahl, @Nullable Gebiet gebiet) {
    super(wahltermin);
    this.wahl = wahl;
    this.gebiet = gebiet;
  }

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

  public Wahl getWahl() {
    return wahl;
  }

  public boolean hasGebiet() {
    return gebiet != null;
  }

  public Gebiet getGebiet() {
    return gebiet;
  }

  @Override
  public ImportInstanceTracker getImportInstanceTracker() {
    return importInstanceTracker;
  }

  @Override
  public void setImportInstanceTracker(ImportInstanceTracker tracker) {
    importInstanceTracker = tracker;
  }

  public boolean isTeilnahmePersonendatenSindBereitsPersistent() {
    return teilnahmePersonendatenSindBereitsPersistent;
  }

  public void setTeilnahmePersonendatenSindBereitsPersistent(boolean teilnahmePersonendatenSindBereitsPersistent) {
    this.teilnahmePersonendatenSindBereitsPersistent = teilnahmePersonendatenSindBereitsPersistent;
  }
}
