
package de.ivu.elect.presentation.staat;

import java.io.Serializable;

import de.ivu.elect.business.staat.boundary.StaatSearchParameters;
import de.ivu.elect.business.staat.entity.StaatConstants;
import de.ivu.elect.jee.presentation.dynamicform.AbstractBooleanFilterKriteriumProperty;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;
import de.ivu.elect.jee.presentation.dynamicform.BooleanFilterKriterium;
import de.ivu.elect.jee.presentation.search.AbstractSearchParameters;

public class StaatSearchParametersProperties implements Serializable {

  private static final long serialVersionUID = 1L;

  private static final String WILDCARD_TOOLTIP_MSG_KEY = AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY;

  private final StaatSearchParameters searchParameters;

  public StaatSearchParametersProperties(StaatSearchParameters searchParameters) {
    this.searchParameters = searchParameters;
  }

  public StaatNameProperty getStaatNameProperty() {
    return new StaatNameProperty(searchParameters);
  }

  public StaatStaatsangehoerigkeitProperty getStaatStaatsangehoerigkeitProperty() {
    return new StaatStaatsangehoerigkeitProperty(searchParameters);
  }

  public StaatCodeProperty getStaatCodeProperty() {
    return new StaatCodeProperty(searchParameters);
  }

  public StaatNurEuStaatenProperty getStaatNurEuStaatenProperty() {
    return new StaatNurEuStaatenProperty(searchParameters);
  }

  public final class StaatNameProperty extends AbstractStringProperty {

    private final StaatSearchParameters searchParameters;

    public StaatNameProperty(StaatSearchParameters searchParameters) {
      this.searchParameters = searchParameters;
    }

    @Override
    public boolean getDefaultRequired() {
      return false;
    }

    @Override
    public String getDefaultLabel() {
      return getMessage(StaatConstants.MESSAGE_KEY_NAME_STAAT_EINZAHL);
    }

    @Override
    public String getValue() {
      return searchParameters.getStaat();
    }

    @Override
    public void setValue(String value) {
      searchParameters.setStaat(value);
    }

    @Override
    public int getDefaultMaxLength() {
      return StaatConstants.NAME_STAAT_MAX_LENGTH;
    }

    @Override
    public String getDefaultTooltip() {
      return getMessage(AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY);
    }
  }

  public final class StaatStaatsangehoerigkeitProperty extends AbstractStringProperty {

    private final StaatSearchParameters searchParameters;

    public StaatStaatsangehoerigkeitProperty(StaatSearchParameters searchParameters) {
      this.searchParameters = searchParameters;
    }

    @Override
    public boolean getDefaultRequired() {
      return false;
    }

    @Override
    public String getDefaultLabel() {
      return getMessage(StaatConstants.MESSAGE_KEY_NAME_STAATSANGEHOERIGKEIT_EINZAHL);
    }

    @Override
    public String getValue() {
      return searchParameters.getStaatsangehoerigkeit();
    }

    @Override
    public void setValue(String value) {
      searchParameters.setStaatsangehoerigkeit(value);
    }

    @Override
    public int getDefaultMaxLength() {
      return StaatConstants.NAME_STAATSANGEHOERIGKEIT_MAX_LENGTH;
    }

    @Override
    public String getDefaultTooltip() {
      return getMessage(WILDCARD_TOOLTIP_MSG_KEY);
    }
  }

  public final class StaatCodeProperty extends AbstractStringProperty {

    private final StaatSearchParameters searchParameters;

    public StaatCodeProperty(StaatSearchParameters searchParameters) {
      this.searchParameters = searchParameters;
    }

    @Override
    public boolean getDefaultRequired() {
      return false;
    }

    @Override
    public String getDefaultLabel() {
      return getMessage("staat.search.code.parameter.label");
    }

    @Override
    public String getValue() {
      return searchParameters.getCode();
    }

    @Override
    public void setValue(String value) {
      searchParameters.setCode(value);
    }

    @Override
    public int getDefaultMaxLength() {
      return 255;
    }
  }

  public static final class StaatNurEuStaatenProperty extends AbstractBooleanFilterKriteriumProperty {

    private final StaatSearchParameters searchParameters;

    public StaatNurEuStaatenProperty(StaatSearchParameters searchParameters) {
      this.searchParameters = searchParameters;
    }

    @Override
    public String getDefaultLabel() {
      return getMessage(StaatConstants.MESSAGE_KEY_EU_STAAT_EINZAHL);
    }

    @Override
    public BooleanFilterKriterium getValue() {
      return searchParameters.getEuStaaten();
    }

    @Override
    public void setValue(BooleanFilterKriterium value) {
      searchParameters.setEuStaaten(value);
    }
  }
}
