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

http://dive4elements.wald.intevation.org