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

import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;

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

import de.ivu.elect.business.ergebnis.entity.DHondtQuotientListenImGebiet;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.gruppe.entity.EntityMitGruppe;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;

@GroupedConversationScoped
@ConversationGroup(AbstractDHondtQuotientListenImGebietSearchParameters.class)
public class DHondtQuotientListenImGebietSearchParameters extends AbstractDHondtQuotientListenImGebietSearchParameters implements EntityMitGruppe<PolitischeGruppe> {

  private static final long serialVersionUID = 1L;

  private DHondtQuotientListenImGebiet dHondtQuotient;

  private PolitischeGruppe politischeGruppe;

  public DHondtQuotientListenImGebietSearchParameters() {
    super();
  }

  public boolean hasErgebnis() {
    return getErgebnis() != null;
  }

  public Ergebnis getErgebnis() {
    return getDHondtQuotient().getErgebnis();
  }

  public void setErgebnis(Ergebnis ergebnis) {
    getDHondtQuotient().setErgebnis(ergebnis);
  }

  public void onErgebnisSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) ErgebnisSelectChangeEvent event) {
    reset();
  }

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

  public Wahldurchfuehrungsgebiet getGebiet() {
    return getDHondtQuotient().getWahldurchfuehrungsgebiet();
  }

  public void setGebiet(Wahldurchfuehrungsgebiet gebiet) {
    getDHondtQuotient().setWahldurchfuehrungsgebiet(gebiet);
  }

  @Override
  public void onGebietSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) GebietSelectChangeEvent event) {
    super.onGebietSelectChangeEvent(event);

    reset();
  }

  @Override
  public PolitischeGruppe getGruppe() {
    return politischeGruppe;
  }

  @Override
  public void setGruppe(PolitischeGruppe politischeGruppe) {
    this.politischeGruppe = politischeGruppe;
  }

  private DHondtQuotientListenImGebiet getDHondtQuotient() {
    if (dHondtQuotient == null) {
      dHondtQuotient = new DHondtQuotientListenImGebiet();
    }

    return dHondtQuotient;
  }

  @Override
  public void reset() {
    dHondtQuotient = null;
    politischeGruppe = null;

    super.reset();
  }
}
