
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.DHondtQuotientListenInGruppe;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.EntityMitGruppe;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;

@GroupedConversationScoped
@ConversationGroup(AbstractDHondtQuotientListenInGruppeSearchParameters.class)
public class DHondtQuotientListenInGruppeSearchParameters extends AbstractDHondtQuotientListenInGruppeSearchParameters implements EntityMitGruppe<PolitischeGruppe> {

  private static final long serialVersionUID = 1L;

  private DHondtQuotientListenInGruppe dHondtQuotient;

  private Gebiet gebiet;

  public DHondtQuotientListenInGruppeSearchParameters() {
    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 Gebiet getGebiet() {
    return gebiet;
  }

  public void setGebiet(Gebiet gebiet) {
    this.gebiet = gebiet;
  }

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

    reset();
  }

  @Override
  public boolean hasGruppe() {
    return getGruppe() != null;
  }

  @Override
  public PolitischeGruppe getGruppe() {
    return getDHondtQuotient().getPolitischeGruppe();
  }

  @Override
  public void setGruppe(PolitischeGruppe politischeGruppe) {
    getDHondtQuotient().setPolitischeGruppe(politischeGruppe);
  }

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

    return dHondtQuotient;
  }

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

    super.reset();
  }
}
