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

import java.util.HashSet;
import java.util.Set;

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.lokalisierung.control.LokalisierungSchluesselCollector;
import de.ivu.elect.business.lokalisierung.control.LokalisierungSchluesselMitPunktAmEndeAnzeigenProperty;
import de.ivu.elect.business.lokalisierung.control.LokalisierungWertNichtVorhandenProperty;
import de.ivu.elect.business.lokalisierung.entity.Lokalisierung;
import de.ivu.elect.business.lokalisierung.entity.LokalisierungWertNichtVorhanden;
import de.ivu.elect.jee.faces.Messages;

@GroupedConversationScoped
@ConversationGroup(AbstractLokalisierungSearchParameters.class)
public class LokalisierungSearchParameters extends AbstractLokalisierungSearchParameters {

  private static final long serialVersionUID = 1L;

  @Inject
  private Messages messages;

  private Lokalisierung lokalisierung;

  private LokalisierungWertNichtVorhanden lokalisierungWertNichtVorhanden;

  private boolean schluesselMitPunktAmEndeAnzeigen = false;

  private String viewId;

  private Set<String> schluesselSet;

  public LokalisierungSearchParameters() {
    super();
  }

  public boolean isSchluesselMitPunktAmEndeAnzeigen() {
    return schluesselMitPunktAmEndeAnzeigen;
  }

  public void setSchluesselMitPunktAmEndeAnzeigen(boolean schluesselMitPunktAmEndeAnzeigen) {
    this.schluesselMitPunktAmEndeAnzeigen = schluesselMitPunktAmEndeAnzeigen;
  }

  public LokalisierungWertNichtVorhanden getLokalisierungWertNichtVorhanden() {
    return lokalisierungWertNichtVorhanden;
  }

  public void setLokalisierungWertNichtVorhanden(LokalisierungWertNichtVorhanden lokalisierungWertNichtVorhanden) {
    this.lokalisierungWertNichtVorhanden = lokalisierungWertNichtVorhanden;
  }

  public Lokalisierung getLokalisierung() {
    if (lokalisierung == null) {
      lokalisierung = new Lokalisierung();
    }
    return lokalisierung;
  }

  public LokalisierungWertNichtVorhandenProperty getLokalisierungWertNichtVorhandenProperty() {
    return new LokalisierungWertNichtVorhandenProperty(this, messages);
  }

  public LokalisierungSchluesselMitPunktAmEndeAnzeigenProperty getLokalisierungSchluesselMitPunktAmEndeAnzeigenProperty() {
    return new LokalisierungSchluesselMitPunktAmEndeAnzeigenProperty(this, messages);
  }

  @Override
  public void reset() {
    resetValues();
    super.reset();
  }

  protected void resetValues() {
    lokalisierung = null;
    lokalisierungWertNichtVorhanden = null;
    schluesselMitPunktAmEndeAnzeigen = false;
    viewId = null;
    schluesselSet = null;
  }

  public void setLokalisierungSchluesselCollector(LokalisierungSchluesselCollector lokalisierungSchluesselCollector) {
    resetValues();
    this.viewId = lokalisierungSchluesselCollector.getViewId();
    this.schluesselSet = new HashSet<>(lokalisierungSchluesselCollector.getVerwendeteSchluessel());
  }

  public Set<String> getSchluesselSet() {
    return schluesselSet;
  }

  public boolean isSchluesselSetVorhanden() {
    return getSchluesselSet() != null && !getSchluesselSet().isEmpty();
  }

  public String getViewId() {
    return viewId;
  }
}
