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

import java.util.Collection;

import de.ivu.elect.business.dokumente.control.ElectDokumentContext;
import de.ivu.elect.business.dokumente.entity.DokumentVorlage;
import de.ivu.elect.business.ergebnis.control.ErgebnisExchangeContext;
import de.ivu.elect.business.gebietsbaum.boundary.AbstractGebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.EntityMitGebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.entity.Wahl;

public abstract class AbstractStimmeingabeDocumentExportContext extends ElectDokumentContext implements StimmeingabeDocumentExportContext {

  private static final long serialVersionUID = 1L;

  private final ErgebnisExchangeContext ergebnisExchangeContext;

  private final DokumentVorlage dokumentVorlage;

  private final boolean documentFuerWahlgebietRequired;

  private final boolean sectionErfassteStimmzettelExcluded;

  private final boolean sectionZaehllisteElektronischExcluded;

  private final boolean eingabenExcluded;

  public AbstractStimmeingabeDocumentExportContext(ElectDokumentContext context, ErgebnisExchangeContext ergebnisExchangeContext, DokumentVorlage dokumentVorlage,
      boolean documentFuerWahlgebietRequired, boolean sectionErfassteStimmzettelExcluded, boolean sectionZaehllisteElektronischExcluded, boolean eingabenExcluded) {
    super(context);

    this.ergebnisExchangeContext = ergebnisExchangeContext;

    this.dokumentVorlage = dokumentVorlage;

    this.documentFuerWahlgebietRequired = documentFuerWahlgebietRequired;

    this.sectionErfassteStimmzettelExcluded = sectionErfassteStimmzettelExcluded;
    this.sectionZaehllisteElektronischExcluded = sectionZaehllisteElektronischExcluded;

    this.eingabenExcluded = eingabenExcluded;
  }

  @Override
  public Wahl getWahl() {
    return ergebnisExchangeContext.getWahl();
  }

  @Override
  public Collection<Gebiet> getAuswertungsgebiete(AbstractGebietDAO gebietDAO) {
    return ergebnisExchangeContext.getAuswertungsgebiete(gebietDAO);
  }

  @Override
  public DokumentVorlage getDokumentVorlage() {
    return dokumentVorlage;
  }

  public <T extends EntityMitGebiet> Collection<T> collectEntitiesExportierbar(AbstractGebietDAO gebietDAO, Collection<T> entities) {
    return ergebnisExchangeContext.collectEntitiesExportierbar(gebietDAO, entities);
  }

  @Override
  public boolean isDocumentFuerWahlgebietRequired() {
    return documentFuerWahlgebietRequired;
  }

  @Override
  public boolean isSectionErfassteStimmzettelExcluded() {
    return sectionErfassteStimmzettelExcluded;
  }

  @Override
  public boolean isSectionZaehllisteElektronischExcluded() {
    return sectionZaehllisteElektronischExcluded;
  }

  @Override
  public boolean isEingabenExcluded() {
    return eingabenExcluded;
  }
}
