
package de.ivu.elect.presentation.wahlvorschlag;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty;
import de.ivu.elect.jee.presentation.dynamicform.Property;
import de.ivu.elect.presentation.wahlvorschlag.form.WahlvorschlagGruppeFinderProperty;

public abstract class AbstractAutoUpdateWahlvorschlagStringProperty extends AbstractStringProperty {

  private final AbstractStringProperty property;

  private final WahlvorschlagGruppeFinderProperty wahlvorschlagGruppeFinderProperty;

  public AbstractAutoUpdateWahlvorschlagStringProperty(AbstractStringProperty property, WahlvorschlagGruppeFinderProperty wahlvorschlagGruppeFinderProperty) {
    super();

    this.property = property;

    this.wahlvorschlagGruppeFinderProperty = wahlvorschlagGruppeFinderProperty;
  }

  @Override
  public void onObservedPropertyValueChanged(Property observedProperty) {
    setValue(getValueAusGruppe(wahlvorschlagGruppeFinderProperty.getGruppe(), wahlvorschlagGruppeFinderProperty.getGebiet()));
  }

  protected abstract String getValueAusGruppe(Gruppe gruppe, Gebiet gebiet);

  @Override
  public boolean getDefaultRequired() {
    return property.getDefaultRequired();
  }

  @Override
  public boolean isRequired() {
    return property.isRequired();
  }

  @Override
  public void setRequired(boolean required) {
    property.setRequired(required);
  }

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

  @Override
  public int getMaxLength() {
    return property.getMaxLength();
  }

  @Override
  public void setMaxLength(int maxLength) {
    property.setMaxLength(maxLength);
  }

  @Override
  public String getDefaultLabel() {
    return property.getDefaultLabel();
  }

  @Override
  public String getDefaultValue() {
    return property.getDefaultValue();
  }

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

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