diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9079:aafae1ab25f0

epoch-panels, single-input-panels
author gernotbelger
date Wed, 23 May 2018 17:30:24 +0200
parents fc02833dbcc1
children 5a0e8d76582e
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java	Tue May 22 17:44:05 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java	Wed May 23 17:30:24 2018 +0200
@@ -21,10 +21,7 @@
 
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.Label;
-import com.smartgwt.client.widgets.form.DynamicForm;
 import com.smartgwt.client.widgets.form.fields.TextItem;
-import com.smartgwt.client.widgets.form.validator.IsIntegerValidator;
-import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.layout.HLayout;
 import com.smartgwt.client.widgets.layout.VLayout;
 
@@ -34,24 +31,30 @@
  */
 public abstract class AbstractSingleItemPanel extends AbstractUIProvider {
 
-    protected static final String FORM_ID = "FORM_ID";
+    private static final long serialVersionUID = 1L;
 
-    protected TextItem inputItem;
+    protected enum Type {
+        single, multi // "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
+    }
 
-    protected List<String> validInputs = new ArrayList<String>();
+    private final Type type;
 
-    protected ListGrid table;
+    private TextItem inputItem;
+
+    private List<String> validInputs = new ArrayList<String>();
 
     protected abstract String getDatakey();
 
-    protected abstract void appendValue(final String value);
+    protected abstract Canvas createWidget(final DataList data);
 
-    protected abstract boolean getTitleVisible();
-
-    protected abstract String errorForItemMsg();
+    public AbstractSingleItemPanel(final Type type) {
+        this.type = type;
+    }
 
     @Override
-    public Canvas create(final DataList data) {
+    public final Canvas create(final DataList data) {
         final VLayout layout = new VLayout();
         final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class
 
@@ -76,28 +79,8 @@
         return layout;
     }
 
-    public Canvas createWidget(final DataList data) {
-        final VLayout layout = new VLayout();
-
-        final Label title = new Label(data.get(0).getDescription());
-        title.setHeight("25px");
-
-        final DynamicForm form = new DynamicForm();
-        form.setID(FORM_ID);
-        form.setNumCols(4);
-        this.inputItem = new TextItem(this.MSG.years());
-        this.inputItem.setShowTitle(getTitleVisible());
-        this.inputItem.setValidators(new IsIntegerValidator()); // TODO: validator to be overriden...
-        form.setFields(this.inputItem);
-
-        layout.addMember(title);
-        layout.addMember(form);
-
-        return layout;
-    }
-
     @Override
-    public Canvas createOld(final DataList dataList) {
+    public final Canvas createOld(final DataList dataList) {
         final List<Data> items = dataList.getAll();
         final Data years = getData(items, getDatakey());
         final DataItem[] yearsItems = years.getItems();
@@ -121,20 +104,45 @@
     }
 
     @Override
-    public List<String> validate() {
+    protected final Data[] getData() {
+        final List<String> errors = this.validate();
+        if (errors.size() > 0) {
+            showErrors(errors); // TODO: do not allow advance state
+            // return null;
+        }
+        if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) {
+            final List<Data> data = new ArrayList<Data>();
+
+            final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim());
+            data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata }));
+
+            return data.toArray(new Data[data.size()]);
+        }
+        return new Data[0];
+    }
+
+    protected final TextItem createInputItem(final String title) {
+        this.inputItem = PanelHelper.createItem(title);// new TextItem(title);
+        return this.inputItem;
+    }
+
+    private final List<String> checkForEmpty() {
         final List<String> errors = new ArrayList<String>();
 
         if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) {
             errors.add(this.MSG.empty_filter());
             return errors;
         }
-        final String sValue = this.inputItem.getValueAsString();
-        String filtered = "";
-        int goodValues = 0;
+        return errors;
+    }
 
-        int value = 0;
+    private final List<String> validateSingleInput(final String sValue) {
+        final List<String> errors = new ArrayList<String>();
+        // String filtered = "";
+        // int goodValues = 0;
+
         try {
-            value = Integer.parseInt(sValue);
+            Integer.parseInt(sValue);
         }
         catch (final NumberFormatException e) {
             errors.add(this.MSG.wrongFormat() + ": " + sValue);
@@ -154,32 +162,63 @@
             errors.add(tmp);
             // continue;
         }
-        goodValues++;
-        if (goodValues > 1) {
-            filtered += " " + Integer.toString(value);
-        } else {
-            filtered = Integer.toString(value);
+        // goodValues++;
+        // if (goodValues > 1) {
+        // filtered += " " + Integer.toString(value);
+        // } else {
+        // filtered = Integer.toString(value);
+        // }
+        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 single:
+            this.inputItem.setValue(value);
+            break;
+
+        default:
+            throw new IllegalStateException();
+        }
+    }
+
+    @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:
+            final String[] sValues = sValue.trim().split(" ");
+            for (final String value : sValues) {
+                errors.addAll(this.validateSingleInput(value));
+            }
+            break;
+
+        case single:
+            errors.addAll(this.validateSingleInput(sValue));
+            break;
+
+        default:
+            throw new IllegalStateException();
         }
 
         return errors;
     }
-
-    @Override
-    protected Data[] getData() {
-        final List<String> errors = this.validate();
-        if (errors.size() > 0) {
-            showErrors(errors); // TODO: do not allow advance state
-            // return null;
-        }
-        if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) {
-            final List<Data> data = new ArrayList<Data>();
-
-            final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim());
-            data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata }));
-
-            return data.toArray(new Data[data.size()]);
-        }
-        return new Data[0];
-    }
-
-}
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org