
package de.ivu.elect.interfaces.core;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import de.ivu.elect.interfaces.core.internet.InternetKonfiguration;
import de.ivu.elect.interfaces.core.konfiguration.WahlKonfiguration;
import de.ivu.elect.interfaces.core.plausikonfiguration.StimmeingabePlausiKonfigurationen;
import de.ivu.elect.interfaces.core.zulassungspruefung.Zulassungspruefung;
import de.ivu.elect.interfaces.gebietgeometrie.GebietGeometrie;
import de.ivu.elect.interfaces.was.wahlbeteiligung.WahlbeteiligungExchange;
import de.ivu.elect.interfaces.wes.Stimmzettelerfassung;
import de.ivu.elect.interfaces.wvp.Kandidatenportal;

/**
 * BEI ÄNDERUNGEN AUCH de.ivu.elect.interfaces.was.replikation.WahlUpdate ANPASSEN!!!
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Wahl implements Serializable {

  private static final long serialVersionUID = 1L;

  @XmlElement(required = true)
  private String name;

  @XmlElement(required = false) //  ELECTMUC-2113
  private String kurzname;

  @XmlElement(required = false) //  ELECTMUC-2113
  private String kennzeichen;

  @XmlElement(required = false) //  ELECTMUC-2113 eigentlich required aber Abwärtskopatibilität...
  private Long anzahlStimmzettel;

  @XmlElement(required = false) // Optional nur für Abwärtskompatibilität, Feld ist Pflicht ELECTMUC-2011
  private String wahlterminNummer;

  @XmlElement(required = true)
  private Date wahldatum;

  @XmlElement(required = true)
  private String wahlart;

  @XmlElement(required = false)
  private String farbe;

  @XmlElement(required = false)
  private Boolean unterstuetzerErfassbar;

  @XmlElement(required = false)
  private Long anzahlUnterstuetzerEintragungsliste;

  @XmlElement(required = false)
  private BigDecimal quorum;

  @XmlElement(required = false) // Pflichtfeld / Abwärtskompatibilität
  private Wahlgang wahlgang;

  @XmlElement(required = true)
  private String customData;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/GEBIETGEOMETRIE")
  private GebietGeometrie gebietGeometrie;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/KONFIGURATION")
  private WahlKonfiguration wahlKonfiguration;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/PLAUSIKONFIGURATION")
  private StimmeingabePlausiKonfigurationen stimmeingabePlausiKonfigurationen;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/INTERNET")
  private InternetKonfiguration internetKonfiguration;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/WAHLBETEILIGUNG")
  private WahlbeteiligungExchange wahlbeteiligungExchange;

  @XmlElementWrapper(name = "gebiete", nillable = false, required = true)
  @XmlElement(required = false, name = "gebiet", nillable = true)
  private List<Gebiet> gebiete = new ArrayList<>();

  @XmlElementWrapper(name = "gruppen", nillable = false, required = true)
  @XmlElement(required = false, name = "gruppe", nillable = true)
  private List<Gruppe> gruppen = new ArrayList<>();

  @XmlElementWrapper(name = "politscheGruppen", nillable = false, required = true)
  @XmlElement(required = false, name = "politischeGruppe", nillable = true)
  private List<PolitischeGruppe> politischeGruppen = new ArrayList<>();

  @XmlElementWrapper(name = "gruppenImGebiet", nillable = false, required = true)
  @XmlElement(required = false, name = "gruppeImGebiet", nillable = true)
  private List<GruppeImGebiet> gruppenImGebiet = new ArrayList<>();

  @XmlElementWrapper(name = "direktkandidaten", nillable = false, required = true)
  @XmlElement(required = false, name = "direktkandidat", nillable = true)
  private List<Direktkandidat> direktkandidaten = new ArrayList<>();

  @XmlElementWrapper(name = "direktkandidaturen", nillable = false, required = true)
  @XmlElement(required = false, name = "direktkandidatur", nillable = true)
  private List<Direktkandidatur> direktkandidaturen = new ArrayList<>();

  @XmlElementWrapper(name = "listen", nillable = false, required = true)
  @XmlElement(required = false, name = "liste", nillable = true)
  private List<Liste> listen = new ArrayList<>();

  @XmlElementWrapper(name = "listenkandidaturen", nillable = false, required = true)
  @XmlElement(required = false, name = "listenkandidatur", nillable = true)
  private List<Listenkandidatur> listenkandidaturen = new ArrayList<>();

  @XmlElementWrapper(name = "referendumOptionen", nillable = false, required = true)
  @XmlElement(required = false, name = "referendumOption", nillable = true)
  private List<ReferendumOption> referendumOptionen = new ArrayList<>();

  @XmlElementWrapper(name = "kandidaturVerknuepfungen", nillable = false, required = true)
  @XmlElement(required = false, name = "kandidaturVerknuepfung", nillable = true)
  private List<KandidaturVerknuepfung> kandidaturVerknuepfungen = new ArrayList<>();

  @XmlElementWrapper(name = "wahlvorschlagsPersonen", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlvorschlagsPerson", nillable = true)
  private List<WahlvorschlagsPerson> wahlvorschlagsPersonen = new ArrayList<>();

  @XmlElementWrapper(name = "wahlausschussmitglieder", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlausschussmitglied", nillable = true)
  private List<Wahlausschussmitglied> wahlausschussmitglieder = new ArrayList<>();

  @XmlElementWrapper(name = "staatenGruppen", nillable = false, required = true)
  @XmlElement(required = false, name = "staatenGruppe", nillable = true)
  private List<StaatenGruppe> staatenGruppen = new ArrayList<>();

  @XmlElementWrapper(name = "gebietsgruppierungen", nillable = false, required = true)
  @XmlElement(required = false, name = "gebietsgruppierung", nillable = true)
  private List<Gebietsgruppierung> gebietsgruppierungen = new ArrayList<>();

  @XmlElementWrapper(name = "wahlausschussEntschaedigungen", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlausschussEntschaedigung", nillable = true)
  private List<WahlausschussEntschaedigung> wahlausschussEntschaedigungen = new ArrayList<>();

  @XmlElementWrapper(name = "sitzeVorperiode", nillable = false, required = true)
  @XmlElement(required = false, name = "sitze", nillable = true)
  private List<Sitze> sitzeVorperiode = new ArrayList<>();

  @XmlElementWrapper(name = "gewaehltVorperiode", nillable = false, required = true)
  @XmlElement(required = false, name = "gewaehlt", nillable = true)
  private List<Gewaehlt> gewaehltVorperiode = new ArrayList<>();

  @XmlElementWrapper(name = "fremdkandidaturen", nillable = false, required = true)
  @XmlElement(required = false, name = "fremdkandidatur", nillable = true)
  private List<Fremdkandidatur> fremdkandidaturen = new ArrayList<>();

  @XmlElementWrapper(name = "dokumentvorlagen", nillable = true, required = false) // Abwärtskompatibel
  @XmlElement(required = false, name = "dokumentvorlage", nillable = true)
  private List<DokumentVorlage> dokumentVorlagen = new ArrayList<>();

  @XmlElementWrapper(name = "wahlparameters", nillable = true, required = false) // Abwärtskompatibel
  @XmlElement(required = false, name = "wahlparameter", nillable = true)
  private List<WahlParameter> wahlparameters = new ArrayList<>(); // ELECT-8305

  @XmlElementWrapper(name = "veranstaltungList", nillable = false, required = true)
  @XmlElement(required = false, name = "veranstaltung", nillable = true)
  private List<Veranstaltung> veranstaltungList = new ArrayList<>();

  @XmlElement(required = false)
  private Wahldurchfuehrung wahldurchfuehrung;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/WES")
  private Stimmzettelerfassung stimmzettelerfassung;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/WVP")
  private Kandidatenportal kandidatenportal;

  @XmlElement(required = false, namespace = "http://www.ivu.de/ELECT/ZULASSUNGSPRUEFUNG")
  private Zulassungspruefung zulassungspruefung;

  public Wahl() {
    super();
  }

  public List<Liste> getListen() {
    return listen;
  }

  public void setListen(List<Liste> listen) {
    this.listen = listen;
  }

  public List<PolitischeGruppe> getPolitischeGruppen() {
    return politischeGruppen;
  }

  public void setPolitischeGruppen(List<PolitischeGruppe> politischeGruppen) {
    this.politischeGruppen = politischeGruppen;
  }

  public List<Direktkandidat> getDirektkandidaten() {
    return direktkandidaten;
  }

  public void setDirektkandidaten(List<Direktkandidat> direktkandidaten) {
    this.direktkandidaten = direktkandidaten;
  }

  public List<Direktkandidatur> getDirektkandidaturen() {
    return direktkandidaturen;
  }

  public void setDirektkandidaturen(List<Direktkandidatur> direktkandidaturen) {
    this.direktkandidaturen = direktkandidaturen;
  }

  public List<Listenkandidatur> getListenkandidaturen() {
    return listenkandidaturen;
  }

  public void setListenkandidaturen(List<Listenkandidatur> listenkandidaturen) {
    this.listenkandidaturen = listenkandidaturen;
  }

  public List<ReferendumOption> getReferendumOptionen() {
    return referendumOptionen;
  }

  public void setReferendumOptionen(List<ReferendumOption> referendumOptionen) {
    this.referendumOptionen = referendumOptionen;
  }

  public List<GruppeImGebiet> getGruppenImGebiet() {
    return gruppenImGebiet;
  }

  public void setGruppenImGebiet(List<GruppeImGebiet> gruppenImGebiet) {
    this.gruppenImGebiet = gruppenImGebiet;
  }

  public List<Gruppe> getGruppen() {
    return gruppen;
  }

  public void setGruppen(List<Gruppe> gruppen) {
    this.gruppen = gruppen;
  }

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

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

  public String getCustomData() {
    return customData;
  }

  public void setCustomData(String customData) {
    this.customData = customData;
  }

  public Date getWahldatum() {
    return wahldatum;
  }

  public void setWahldatum(Date wahldatum) {
    this.wahldatum = wahldatum;
  }

  public String getWahlart() {
    return wahlart;
  }

  public void setWahlart(String wahlart) {
    this.wahlart = wahlart;
  }

  public String getFarbe() {
    return farbe;
  }

  public void setFarbe(String farbe) {
    this.farbe = farbe;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public List<KandidaturVerknuepfung> getKandidaturVerknuepfungen() {
    return kandidaturVerknuepfungen;
  }

  public void setKandidaturVerknuepfungen(List<KandidaturVerknuepfung> kandidaturVerknuepfungen) {
    this.kandidaturVerknuepfungen = kandidaturVerknuepfungen;
  }

  public BigDecimal getQuorum() {
    return quorum;
  }

  public void setQuorum(BigDecimal quorum) {
    this.quorum = quorum;
  }

  public List<WahlvorschlagsPerson> getWahlvorschlagsPersonen() {
    return wahlvorschlagsPersonen;
  }

  public void setWahlvorschlagsPersonen(List<WahlvorschlagsPerson> wahlvorschlagsPersonen) {
    this.wahlvorschlagsPersonen = wahlvorschlagsPersonen;
  }

  public List<Wahlausschussmitglied> getWahlausschussmitglieder() {
    return wahlausschussmitglieder;
  }

  public void setWahlausschussmitglieder(List<Wahlausschussmitglied> wahlausschussmitglieder) {
    this.wahlausschussmitglieder = wahlausschussmitglieder;
  }

  public List<StaatenGruppe> getStaatenGruppen() {
    return staatenGruppen;
  }

  public void setStaatenGruppen(List<StaatenGruppe> staatenGruppen) {
    this.staatenGruppen = staatenGruppen;
  }

  public List<Gebietsgruppierung> getGebietsgruppierungen() {
    return gebietsgruppierungen;
  }

  public void setGebietsgruppierungen(List<Gebietsgruppierung> gebietsgruppierungen) {
    this.gebietsgruppierungen = gebietsgruppierungen;
  }

  public List<WahlausschussEntschaedigung> getWahlausschussEntschaedigungen() {
    return wahlausschussEntschaedigungen;
  }

  public void setWahlausschussEntschaedigungen(List<WahlausschussEntschaedigung> wahlausschussEntschaedigungen) {
    this.wahlausschussEntschaedigungen = wahlausschussEntschaedigungen;
  }

  public List<Sitze> getSitzeVorperiode() {
    return sitzeVorperiode;
  }

  public void setSitzeVorperiode(List<Sitze> sitzeVorperiode) {
    this.sitzeVorperiode = sitzeVorperiode;
  }

  public List<Gewaehlt> getGewaehltVorperiode() {
    return gewaehltVorperiode;
  }

  public void setGewaehltVorperiode(List<Gewaehlt> gewaehltVorperiode) {
    this.gewaehltVorperiode = gewaehltVorperiode;
  }

  public GebietGeometrie getGebietGeometrie() {
    return gebietGeometrie;
  }

  public void setGebietGeometrie(GebietGeometrie gebietGeometrie) {
    this.gebietGeometrie = gebietGeometrie;
  }

  public Long getAnzahlUnterstuetzerEintragungsliste() {
    return anzahlUnterstuetzerEintragungsliste;
  }

  public void setAnzahlUnterstuetzerEintragungsliste(Long anzahlUnterstuetzerEintragungsliste) {
    this.anzahlUnterstuetzerEintragungsliste = anzahlUnterstuetzerEintragungsliste;
  }

  public Boolean getUnterstuetzerErfassbar() {
    return unterstuetzerErfassbar;
  }

  public void setUnterstuetzerErfassbar(Boolean unterstuetzerErfassbar) {
    this.unterstuetzerErfassbar = unterstuetzerErfassbar;
  }

  public WahlKonfiguration getWahlKonfiguration() {
    return wahlKonfiguration;
  }

  public void setWahlKonfiguration(WahlKonfiguration wahlKonfiguration) {
    this.wahlKonfiguration = wahlKonfiguration;
  }

  public List<Fremdkandidatur> getFremdkandidaturen() {
    return fremdkandidaturen;
  }

  public void setFremdkandidaturen(List<Fremdkandidatur> fremdkandidaturen) {
    this.fremdkandidaturen = fremdkandidaturen;
  }

  public String getKurzname() {
    return kurzname;
  }

  public void setKurzname(String kurzname) {
    this.kurzname = kurzname;
  }

  public String getKennzeichen() {
    return kennzeichen;
  }

  public void setKennzeichen(String kennzeichen) {
    this.kennzeichen = kennzeichen;
  }

  public Long getAnzahlStimmzettel() {
    return anzahlStimmzettel;
  }

  public void setAnzahlStimmzettel(Long anzahlStimmzettel) {
    this.anzahlStimmzettel = anzahlStimmzettel;
  }

  public Wahldurchfuehrung getWahldurchfuehrung() {
    return wahldurchfuehrung;
  }

  public void setWahldurchfuehrung(Wahldurchfuehrung wahldurchfuehrung) {
    this.wahldurchfuehrung = wahldurchfuehrung;
  }

  public List<DokumentVorlage> getDokumentVorlagen() {
    return dokumentVorlagen;
  }

  public void setDokumentVorlagen(List<DokumentVorlage> dokumentVorlagen) {
    this.dokumentVorlagen = dokumentVorlagen;
  }

  public String getWahlterminNummer() {
    return wahlterminNummer;
  }

  public void setWahlterminNummer(String wahlterminNummer) {
    this.wahlterminNummer = wahlterminNummer;
  }

  public InternetKonfiguration getInternetKonfiguration() {
    return internetKonfiguration;
  }

  public void setInternetKonfiguration(InternetKonfiguration internetKonfiguration) {
    this.internetKonfiguration = internetKonfiguration;
  }

  public StimmeingabePlausiKonfigurationen getStimmeingabePlausiKonfigurationen() {
    return stimmeingabePlausiKonfigurationen;
  }

  public void setStimmeingabePlausiKonfigurationen(StimmeingabePlausiKonfigurationen stimmeingabePlausiKonfigurationen) {
    this.stimmeingabePlausiKonfigurationen = stimmeingabePlausiKonfigurationen;
  }

  public WahlbeteiligungExchange getWahlbeteiligungExchange() {
    return wahlbeteiligungExchange;
  }

  public void setWahlbeteiligungExchange(WahlbeteiligungExchange wahlbeteiligungExchange) {
    this.wahlbeteiligungExchange = wahlbeteiligungExchange;
  }

  public Wahlgang getWahlgang() {
    return wahlgang;
  }

  public void setWahlgang(Wahlgang wahlgang) {
    this.wahlgang = wahlgang;
  }

  public List<WahlParameter> getWahlparameters() {
    return wahlparameters;
  }

  public void setWahlparameters(List<WahlParameter> wahlparameters) {
    this.wahlparameters = wahlparameters;
  }

  public List<Veranstaltung> getVeranstaltungList() {
    return veranstaltungList;
  }

  public void setVeranstaltungList(List<Veranstaltung> veranstaltungList) {
    this.veranstaltungList = veranstaltungList;
  }

  public Stimmzettelerfassung getStimmzettelerfassung() {
    return stimmzettelerfassung;
  }

  public void setStimmzettelerfassung(Stimmzettelerfassung stimmzettelerfassung) {
    this.stimmzettelerfassung = stimmzettelerfassung;
  }

  public Zulassungspruefung getZulassungspruefung() {
    return zulassungspruefung;
  }

  public void setZulassungspruefung(Zulassungspruefung zulassungspruefung) {
    this.zulassungspruefung = zulassungspruefung;
  }

  public Kandidatenportal getKandidatenportal() {
    return kandidatenportal;
  }

  public void setKandidatenportal(Kandidatenportal kandidatenportal) {
    this.kandidatenportal = kandidatenportal;
  }
}
