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

import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;

import java.util.List;

import javax.inject.Named;

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

import de.ivu.elect.business.ergebnis.control.AbstractKumulierteStimmenSearchParameters;
import de.ivu.elect.business.gruppe.entity.EntityMitGruppe;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.presentation.gruppe.form.GruppeSearchProperty;

@GroupedConversationScoped
@ConversationGroup(KandidaturKumulierteStimmenSearchParameters.class)
@Named(KandidaturKumulierteStimmenSearchParameters.COMPONENT_NAME)
public class KandidaturKumulierteStimmenSearchParameters extends AbstractKumulierteStimmenSearchParameters implements EntityMitGruppe<PolitischeGruppe> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "kandidaturKumulierteStimmenSearchParameters";

  private PolitischeGruppe politischeGruppe;

  private transient GruppeSearchProperty<PolitischeGruppe> politischeGruppeSearchProperty;

  public KandidaturKumulierteStimmenSearchParameters() {
    super();
  }

  @Override
  public boolean hasGruppe() {
    return nonNull(getGruppe());
  }

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

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

  public GruppeSearchProperty<PolitischeGruppe> getPolitischeGruppeSearchProperty(List<PolitischeGruppe> gruppen) {
    if (isNull(politischeGruppeSearchProperty)) {
      politischeGruppeSearchProperty = new GruppeSearchProperty<>(this, gruppen, false);
    }

    return politischeGruppeSearchProperty;
  }
}
