Mercurial > dive4elements > river
diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9256:6c24c857ccf9
fixation refactoring and inputItem behaviour to interfaces
author | gernotbelger |
---|---|
date | Fri, 13 Jul 2018 12:04:21 +0200 |
parents | cbe393451ab0 |
children | b570b6fcc052 |
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Fri Jul 13 11:56:22 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Fri Jul 13 12:04:21 2018 +0200 @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; +import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; import org.dive4elements.river.client.shared.model.Data; import org.dive4elements.river.client.shared.model.DataItem; @@ -19,7 +20,6 @@ import org.dive4elements.river.client.shared.model.DefaultData; import org.dive4elements.river.client.shared.model.DefaultDataItem; -import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.fields.TextItem; @@ -34,25 +34,30 @@ private static final long serialVersionUID = 1L; - public enum Type { - single, multi, limit5 // "SingleItem" (Klassenname) meint, dass es nur ein einziges Eingabefeld gibt (nicht from-to; epoch) - // Type multi: append (year): es können mehrere Werte eingegeben werden; Leerzeichen-getrennt - // Type single: append (year, sohlhöhendifferenz): nur ein Wert ist zulässig - // Type limit5 TODO: generalize, if needed + public interface IMultiSingleBehaviour { + void appendValue(final TextItem inputItem, final String value); + + List<String> validate(List<String> errors, String sValue); + + void setValidInputs(List<String> validInputs); + + void setErrorForItemMsg(String errorForItemMsg); + + void setMSG(FLYSConstants msg); } - private final Type type; - private TextItem inputItem; private List<String> validInputs = new ArrayList<String>(); + private final IMultiSingleBehaviour behaviour; + protected abstract String getDatakey(); protected abstract Canvas createWidget(final DataList data); - public AbstractSingleItemPanel(final Type type) { - this.type = type; + public AbstractSingleItemPanel(final IMultiSingleBehaviour behaviour) { + this.behaviour = behaviour; } @Override @@ -69,6 +74,9 @@ final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, null); final Canvas table = helper.getTable(); this.validInputs = helper.getKeycolEntries(); + this.behaviour.setValidInputs(this.validInputs); + this.behaviour.setErrorForItemMsg(this.errorForItemMsg()); + this.behaviour.setMSG(this.MSG); this.helperContainer.addMember(table); @@ -138,121 +146,17 @@ return errors; } - private final List<String> validateSingleInput(final String sValue) { - final List<String> errors = new ArrayList<String>(); - // String filtered = ""; - // int goodValues = 0; - errors.addAll(validateNumber(sValue)); - boolean isGood = false; - for (final String validYear : this.validInputs) { - /* No list contains for strings? */ - if (sValue.equals(validYear)) { - isGood = true; - break; - } - } - if (!isGood) { - String tmp = errorForItemMsg(); - tmp = tmp.replace("$1", sValue); - errors.add(tmp); - // continue; - } - - return errors; - } - - private final List<String> validateNumber(final String sValue) { - final List<String> errors = new ArrayList<String>(); - - try { - Integer.parseInt(sValue); - } - catch (final NumberFormatException e) { - errors.add(this.MSG.wrongFormat() + ": " + sValue); - - } - return errors; - } - protected abstract String errorForItemMsg(); protected final void appendValue(final String value) { - - switch (this.type) { - case multi: - // APPEND = ADD to existing -> MULTI YEAR - final String oldYears = this.inputItem.getValueAsString(); - if (oldYears != null && !oldYears.isEmpty()) - this.inputItem.setValue(oldYears.trim() + " " + value); - else - this.inputItem.setValue(value); - - break; - - case limit5: - // APPEND = ADD to existing -> MULTI YEAR - final String oldValues = this.inputItem.getValueAsString(); - if (oldValues != null && !oldValues.isEmpty()) { - final String[] oldVals = oldValues.split(" "); - if (oldVals.length < 5)// TODO: generalize, if needed - this.inputItem.setValue(oldValues.trim() + " " + value); - else { - // msg TODO: generalize, if needed - SC.warn(this.MSG.error_limit_exceeded_salix()); - } - } - - else - this.inputItem.setValue(value); - - break; - - case single: - this.inputItem.setValue(value); - break; - - default: - throw new IllegalStateException(); - } + this.behaviour.appendValue(this.inputItem, value); } @Override public final List<String> validate() { - final List<String> errors = new ArrayList<String>(); errors.addAll(this.checkForEmpty()); - final String sValue = this.inputItem.getValueAsString(); - - switch (this.type) { - case multi: - if (sValue != null) { - final String[] sValues = sValue.trim().split(" "); - for (final String value : sValues) { - errors.addAll(this.validateSingleInput(value)); - } - } - break; - case limit5: - if (sValue != null) { - final String[] values = sValue.trim().split(" "); - if (values.length > 5) { - errors.add(this.MSG.error_limit_exceeded_salix());// TODO generalize if needed - } - for (int i = 0; i < values.length; i++) { - if (i < 5) - errors.addAll(this.validateNumber(values[i])); - } - } - break; - case single: - errors.addAll(this.validateSingleInput(sValue)); - break; - - default: - throw new IllegalStateException(); - } - - return errors; + return this.behaviour.validate(errors, sValue); } } \ No newline at end of file