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

import javax.annotation.Nullable;
import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.GroupedConversationScoped;

import de.ivu.elect.business.dokumente.entity.DokumentVorlage;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageAnlageArt;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageArt;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageProperties;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.jee.presentation.dynamicform.Property;
import de.ivu.elect.presentation.dokumente.DokumentVorlageArtNachAnwendungGefiltertProperty;
import de.ivu.elect.presentation.dokumente.DokumentVorlageAuswahl;

@GroupedConversationScoped
@ConversationGroup(AbstractDokumentVorlageSearchParameters.class)
public class DokumentVorlageSearchParameters extends AbstractDokumentVorlageSearchParameters {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient DokumentVorlageAuswahl dokumentVorlageAuswahl;

  private Wahl wahl;

  private Wahltermin wahltermin;

  private DokumentVorlage dokumentVorlage;

  public DokumentVorlageSearchParameters() {
    super();
  }

  public Wahl getWahl() {
    return wahl;
  }

  public void setWahl(Wahl wahl) {
    this.wahl = wahl;
  }

  public Wahltermin getWahltermin() {
    return wahltermin;
  }

  public void setWahltermin(Wahltermin wahltermin) {
    this.wahltermin = wahltermin;
  }

  public DokumentVorlageArt getDokumentVorlageArt() {
    return getDokumentVorlage().getDokumentVorlageArt();
  }

  public void setDokumentVorlageArt(DokumentVorlageArt dokumentVorlageArt) {
    getDokumentVorlage().setDokumentVorlageArt(dokumentVorlageArt);
  }

  public Property getDokumentVorlageArtProperty() {
    Property property = new DokumentVorlageArtNachAnwendungGefiltertProperty(getDokumentVorlage(), dokumentVorlageAuswahl, true);
    property.setRequired(false);

    return property;
  }

  public DokumentVorlageAnlageArt getDokumentVorlageAnlageArt() {
    return getDokumentVorlage().getAnlageArt();
  }

  public void setDokumentVorlageAnlageArt(DokumentVorlageAnlageArt dokumentVorlageAnlageArt) {
    getDokumentVorlage().setAnlageArt(dokumentVorlageAnlageArt);
  }

  public Property getDokumentVorlageAnlageArtProperty() {
    Property property = getDokumentVorlageProperties().getAnlageArtMitLeererAuswahlProperty();
    property.setRequired(false);

    return property;
  }

  @Nullable
  public String getVersionsnummer() {
    return getDokumentVorlage().getVersionsnummer();
  }

  public void setVersionsnummer(String versionsnummer) {
    getDokumentVorlage().setVersionsnummer(versionsnummer);
  }

  public Property getVersionsnummerProperty() {
    Property property = getDokumentVorlageProperties().getVersionsnummerProperty();
    property.setRequired(false);

    return property;
  }

  public String getName() {
    return getDokumentVorlage().getName();
  }

  public void setName(String name) {
    getDokumentVorlage().setName(name);
  }

  public Property getNameProperty() {
    Property property = getDokumentVorlageProperties().getNameProperty();
    property.setRequired(false);

    return property;
  }

  private DokumentVorlageProperties getDokumentVorlageProperties() {
    return getDokumentVorlage().getProperties();
  }

  private DokumentVorlage getDokumentVorlage() {
    if (dokumentVorlage == null) {
      dokumentVorlage = new DokumentVorlage();
      dokumentVorlage.setAnlageArt(null);
      dokumentVorlage.setDokumentVorlageArt(null);
    }

    return dokumentVorlage;
  }

  @Override
  public void reset() {
    dokumentVorlage = null;

    super.reset();
  }
}
