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

import java.util.Collection;
import java.util.Collections;
import java.util.Set;

import javax.annotation.Nullable;

import de.ivu.elect.business.benutzerverwaltung.entity.*;
import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.GroupedConversationScoped;

import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;

@GroupedConversationScoped
@ConversationGroup(AbstractBenutzerSearchParameters.class)
public class BenutzerSearchParameters extends AbstractBenutzerSearchParameters {

  private static final long serialVersionUID = 1L;

  private Benutzer benutzer;

  private Collection<Rolle> rollen = Collections.emptyList();

  private Mandant mandant;

  private Set<UseCasePermission> vorhandeneRechte = Collections.emptySet();

  public BenutzerSearchParameters() {
    super();
  }

  private Benutzer getBenutzer() {
    if (benutzer == null) {
      benutzer = new Benutzer(EmptyCustomData.INSTANCE);
    }

    return benutzer;
  }

  public Mandant getMandant() {
    return mandant;
  }

  public void setMandant(Mandant mandant) {
    this.mandant = mandant;
  }

  public Set<UseCasePermission> getVorhandeneRechte() {
    return vorhandeneRechte;
  }

  public void setVorhandeneRechte(Set<UseCasePermission> vorhandeneRechte) {
    this.vorhandeneRechte = vorhandeneRechte;
  }

  public String getBenutzerkennung() {
    return getBenutzer().getBenutzerkennung();
  }

  @Nullable
  public String getVorname() {
    return getBenutzer().getVorname();
  }

  @Nullable
  public String getFamilienname() {
    return getBenutzer().getFamilienname();
  }

  @Nullable
  public Boolean isNurGesperrte() {
    return getBenutzer().getGesperrt();
  }

  public Collection<Rolle> getRollen() {
    return rollen;
  }

  public void setRollen(Collection<Rolle> rollen) {
    this.rollen = rollen;
  }

  public BenutzerProperties getBenutzerProperties() {
    return getBenutzer().getProperties();
  }

  @Override
  public void reset() {
    benutzer = null;
    rollen = Collections.emptyList();
    mandant = null;
    vorhandeneRechte = Collections.emptySet();
    super.reset();
  }
}
