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

import static java.util.Arrays.asList;

import java.util.List;

import de.ivu.elect.business.person.boundary.SearchParametersMitOrdnungsmerkmal;
import de.ivu.elect.business.personenregister.entity.OrdnungsmerkmalProperty;
import de.ivu.elect.business.personenregister.entity.PersonenregisterEinwohnerstatus;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.jee.presentation.dynamicform.Property;

public class PersonenregisterByOrdnungsmerkmalSearchParameters extends AbstractPersonenregisterSearchParameters implements SearchParametersMitOrdnungsmerkmal {

  private static final long serialVersionUID = 1L;

  /**** !!!!!!!!!!!!! ***********/
  /* ELECT-11217 neue Suchparameter in getParameterValues() aufnehmen!! ***/
  /**** !!!!!!!!!!!!! ***********/

  private String ordnungsmerkmal;

  private transient Property ordnungsmerkmalProperty;

  public PersonenregisterByOrdnungsmerkmalSearchParameters() {
    this(null, DEFAULT_PERSONENREGISTER_EINWOHNERSTATUS, "");
  }

  protected PersonenregisterByOrdnungsmerkmalSearchParameters(Wahltermin wahltermin, PersonenregisterEinwohnerstatus einwohnerstatus, String ordnungsmerkmal) {
    super(wahltermin, einwohnerstatus);

    // NOTE, dass die Setter explizit aufgerufen werden, um ggf. deren Spezialbehandlungen, cf. MesoByPersonendatenSearchParameters, durchzuführen!!!
    setOrdnungsmerkmal(ordnungsmerkmal);
  }

  @Override
  public String getOrdnungsmerkmal() {
    return ordnungsmerkmal;
  }

  @Override
  public void setOrdnungsmerkmal(String ordnungsmerkmal) {
    this.ordnungsmerkmal = ordnungsmerkmal;
  }

  @Override
  public Property getOrdnungsmerkmalProperty() {
    if (ordnungsmerkmalProperty == null) {
      ordnungsmerkmalProperty = createOrdnungsmerkmalProperty();
    }

    return ordnungsmerkmalProperty;
  }

  protected OrdnungsmerkmalProperty createOrdnungsmerkmalProperty() {
    return new OrdnungsmerkmalProperty(this);
  }

  @Override
  protected List<Object> getParameterValues() {
    return asList(ordnungsmerkmal);
  }
}
