diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FloodInfrastructurePanel.java @ 9624:02ca823ec9c6

zu Pos 20 Nachtrag; infrastructureChoice
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Fri, 11 Oct 2019 18:30:36 +0200
parents 8ed6c45136fa
children
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FloodInfrastructurePanel.java	Thu Oct 10 17:33:56 2019 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FloodInfrastructurePanel.java	Fri Oct 11 18:30:36 2019 +0200
@@ -21,8 +21,9 @@
 import org.dive4elements.river.client.shared.model.DataList;
 import org.dive4elements.river.client.shared.model.DefaultData;
 import org.dive4elements.river.client.shared.model.DefaultDataItem;
+import org.dive4elements.river.client.shared.model.InfrastructureServerClientXChange;
+import org.dive4elements.river.client.shared.model.InfrastructureServerClientXChange.Element;
 import org.dive4elements.river.client.shared.model.User;
-import org.dive4elements.river.client.shared.model.VegetationZoneServerClientXChange;
 
 import com.google.gwt.core.client.GWT;
 import com.smartgwt.client.types.ListGridFieldType;
@@ -32,13 +33,9 @@
 import com.smartgwt.client.widgets.Label;
 import com.smartgwt.client.widgets.events.ClickEvent;
 import com.smartgwt.client.widgets.events.ClickHandler;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.fields.ColorItem;
 import com.smartgwt.client.widgets.grid.ListGrid;
 import com.smartgwt.client.widgets.grid.ListGridField;
 import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.grid.events.CellSavedEvent;
-import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
 import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
 import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
 import com.smartgwt.client.widgets.layout.HLayout;
@@ -54,16 +51,19 @@
     private static final long serialVersionUID = 1L;
 
     private static final String datakey = "flood_infrastructure";
-    final protected List<ListGridRecord> records = new ArrayList<ListGridRecord>();
     private ListGrid elements = new ListGrid();
 
     private final User m_user;
 
+    private final InfrastructureServerClientXChange xchangeHelper = new InfrastructureServerClientXChange();
+
+    private Button submit;
+
     public FloodInfrastructurePanel(final User user) {
         this.m_user = user;
     }
 
-    protected final ListGrid createTable(final Layout root, final DataList data, final String width, final boolean editable) {
+    protected final ListGrid createTable(final Layout root, final DataList data, final String width) {
 
         final Label title = new Label(data.get(0).getDescription());
         title.setHeight("35px");
@@ -76,43 +76,33 @@
         this.elements.setSortField("to");
         this.elements.setCanResizeFields(false);
 
-        this.elements.setCanEdit(editable);
-
-        final ListGridField internalNumber = new ListGridField("number", "number"); // valid only if no data is to be added
-        internalNumber.setCanSort(false);
-        internalNumber.setHidden(true);
+        this.elements.setCanEdit(false);
 
-        final ListGridField infrstrField = new ListGridField("infrstr", "Infrastruktur BWaStr");// this.MSG.uinfo_vegetation_zones_label());
-        infrstrField.setType(ListGridFieldType.TEXT);
-        infrstrField.setWidth("*"); // 245
-        infrstrField.setCanSort(false);
-        infrstrField.setCanDragResize(true);
-        infrstrField.setCanEdit(true); // neue Anforderung - doch nicht? ???
+        final ListGridField groupIdField = new ListGridField("group_id", "groupId");
+        groupIdField.setHidden(true);
 
-        final ListGridField fromField = new ListGridField("type", "Typ/Bezeichnung"); // VegZonePanelHelper.createIntTableField("from",
-        // this.MSG.uinfo_vegetation_zones_from(), true,
-        // getNormalizer(), getValidator()
-        // );
-        fromField.addCellSavedHandler(new CellSavedHandler() {
-            @Override
-            public void onCellSaved(final CellSavedEvent event) {
-                // updateValidationMsgLabel();
-            }
-        });
+        final ListGridField groupField = createField("group_label", "Infrastruktur BWaStr");// this.MSG.uinfo_vegetation_zones_label());
 
-        fromField.setCanEdit(false);
+        final ListGridField typeIdField = new ListGridField("type_id", "typeId");
+        typeIdField.setHidden(true);
+
+        final ListGridField typeField = createField("type_label", "Typ/Bezeichnung");// this.MSG.uinfo_vegetation_zones_label());
 
         final ListGridField removeField = PanelHelper.createRemoveField(this.elements, GWT.getHostPageBaseURL() + this.MSG.removeFeature());
         this.elements.addRecordClickHandler(new RecordClickHandler() { // adding another custom record-Remove-Handler which is not included in the
-            // Panelhelper TODO: MERGE WITH SupraRegionalPanel!!
             @Override
             public void onRecordClick(final RecordClickEvent event) {
                 if (event.getField().getName().equals(removeField.getName())) {
-                    // updateValidationMsgLabel();
+                    final ListGridRecord r = event.getRecord();
+                    final Element infrastr = new Element(r.getAttribute("group_id"), r.getAttribute("group_label"), r.getAttribute("type_id"),
+                            r.getAttribute("type_label"));
+                    FloodInfrastructurePanel.this.xchangeHelper.removeObject(infrastr);
+
+                    validateInput();
                 }
             }
         });
-        this.elements.setFields(infrstrField, fromField, removeField);
+        this.elements.setFields(groupIdField, groupField, typeIdField, typeField, removeField);
 
         root.setWidth(width);
         root.addMember(title);
@@ -120,35 +110,54 @@
         root.addMember(PanelHelper.getSpacer(3));
         root.addMember(PanelHelper.getSpacer(3));
         return this.elements;
+    }
 
+    private ListGridField createField(final String id, final String label) {
+        final ListGridField field = new ListGridField(id, label);// this.MSG.uinfo_vegetation_zones_label());
+        field.setType(ListGridFieldType.TEXT);
+        field.setWidth("*"); // 245
+        field.setCanSort(false);
+        field.setCanDragResize(true);
+        field.setCanEdit(false);
+        return field;
     }
 
     @Override
     public final VLayout create(final DataList data) {
         final VLayout layout = new VLayout();
 
+        final List<Data> items = data.getAll();
+        final Data str = getData(items, datakey);
+        final DataItem[] strItems = str.getItems();
+        if (strItems.length > 0)
+            this.xchangeHelper.parseAndAdd(strItems[0].getStringValue());
+
         final Canvas helper = createHelper(data);
         if (helper != null)
             this.helperContainer.addMember(helper);
 
-        final Canvas submit = getNextButton();
+        this.submit = (Button) getNextButton();
 
         final VLayout root = new VLayout();
         root.setWidth(450);
         createWidget(root, data);
 
         layout.addMember(root);
-        layout.addMember(submit);
-
-        // updateValidationMsgLabel();// init Text
+        layout.addMember(this.submit);
 
         return layout;
     }
 
-    protected Canvas createHelper(final DataList dataList) {
+    private void validateInput() {
+        if (this.xchangeHelper.getItems().size() > 0)
+            this.submit.enable();
+        else
+            this.submit.disable();
+    }
 
-        final DatacageWidgetData data = new DatacageWidgetData(this.artifact, this.m_user, "uinfo.inundation_duration.vegZoneSelect", "load-system:true",
-                false);
+    private Canvas createHelper(final DataList dataList) {
+
+        final DatacageWidgetData data = new DatacageWidgetData(this.artifact, this.m_user, "sinfo_floodduration_infrastructures", "load-system:true", false);
 
         final DatacageWidget datacage = new DatacageWidget(data);
 
@@ -170,81 +179,54 @@
     private void handlePlusClicked(final DatacageWidget datacage) {
         final List<TreeNode> selection = datacage.getPlainSelection();
         if (selection == null || selection.isEmpty()) {
-            SC.say("VegetationzonesTablePanel.this.MSG.warning()");
+            SC.say(FloodInfrastructurePanel.this.MSG.warning());
             return;
         }
 
-        final TreeNode selectedNode = selection.get(0);
+        for (final TreeNode selectedNode : selection) {
+            final String groupId = selectedNode.getAttribute("group_id"); // node-names from meta-data.xml
+            final String groupLabel = selectedNode.getAttribute("group_label");
+            final String typeId = selectedNode.getAttribute("type_id");
+            final String typeLabel = selectedNode.getAttribute("type_label");
 
-        /*
-         * the encoded veg-zones is either in 'data' or 'ids'. We need both, because we have the cases of stadnard vegzones and
-         * user-defined vegzones.
-         */
-        final String dataAttribute = selectedNode.getAttribute("data");
-        final String idsAttribute = selectedNode.getAttribute("ids");
-        final String vegZoneData = (dataAttribute == null || dataAttribute.trim().length() == 0) ? idsAttribute : dataAttribute;
+            if (isEmpty(groupId) || isEmpty(groupLabel) || isEmpty(typeId) || isEmpty(typeLabel))
+                continue;
 
-        // for (final ListGridRecord r : this.elements.getRecords()) {
-        // this.elements.removeData(r);
-        // }
-        // final List<VegetationZoneServerClientXChange> rows = VegetationZoneServerClientXChange.parse(data);
-        // for (final VegetationZoneServerClientXChange row : rows) {
-        // this.elements.addData(createEntry(row));
-        // }
+            final InfrastructureServerClientXChange.Element infrastr = new InfrastructureServerClientXChange.Element(groupId, groupLabel, typeId, typeLabel);
+            if (this.xchangeHelper.containsObject(infrastr))
+                continue;
 
+            this.xchangeHelper.addObject(infrastr);
+
+            this.elements.addData(createEntry(infrastr));
+        }
+        validateInput();
     }
 
-    public final ListGridRecord createEntry(final VegetationZoneServerClientXChange row) {
-
-        final String vegzone = row.getZoneName();
-        final Integer from = row.getMin_day_overflow();
-        final Integer to = row.getMax_day_overflow();
-        final String colorStr = row.getHexColor();
+    private boolean isEmpty(final String test) {
+        if (test == null)
+            return true;
+        if (test.trim().equals(""))
+            return true;
+        return false;
+    }
 
-        if (vegzone == null)
-            return null;
-
+    public final ListGridRecord createEntry(final InfrastructureServerClientXChange.Element row) {
         final ListGridRecord r = new ListGridRecord();
-        r.setAttribute("vegzone", vegzone);
-        r.setAttribute("from", from);
-        r.setAttribute("to", to);
-        r.setAttribute("color", colorStr);
-        r.setAttribute("number", this.records.size());
-        this.records.add(r);
+        r.setAttribute("group_id", row.getGroupId());
+        r.setAttribute("group_label", row.getGroupLabel());
+        r.setAttribute("type_id", row.getTypeId());
+        r.setAttribute("type_label", row.getTypeLabel());
         return r;
-
     }
 
     public void createWidget(final Layout root, final DataList data) {
 
-        this.elements = createTable(root, data, "420", true);
-
-        // this.vegzone = PanelHelper.createItem("uinfo_vegetation_zone_label", this.MSG.uinfo_vegetation_zone_label(), "*");
-        // this.vegzone.setColSpan(4);
-        // this.start = PanelHelper.createIntegerItem("uinfo_vegetation_zones_from", this.MSG.uinfo_vegetation_zones_from(),
-        // "*");
-        // this.end = PanelHelper.createIntegerItem("uinfo_vegetation_zones_to", this.MSG.uinfo_vegetation_zones_to(), "*");
-        final VLayout fields = new VLayout();
-
-        final ColorItem colorPicker = new ColorItem();
-        colorPicker.setTitle(this.MSG.uinfo_vegetation_zone_color());
+        this.elements = createTable(root, data, "420");
 
-        colorPicker.setShowTitle(true);
-        colorPicker.setShowValueIconOnly(false);
-        colorPicker.setShowPickerIcon(true);
-        colorPicker.setColSpan(2);
-        colorPicker.setWidth(110);
-
-        final Button add = new Button(this.MSG.add_date()); // TODO: make key more generic or change to more specific
-
-        final DynamicForm form1 = new DynamicForm();
-
-        form1.setNumCols(5); // für Layout untereinander muss 2 eingestellt werden
-        // form1.setFields(this.vegzone, this.start, this.end, colorPicker);
-
-        fields.addMember(form1);
-        root.addMember(fields);
-        root.addMember(PanelHelper.getSpacer(10));
+        for (final Element item : this.xchangeHelper.getItems())
+            this.elements.addData(createEntry(item));
+        validateInput();
     }
 
     @Override
@@ -261,8 +243,18 @@
         final Data str = getData(items, datakey);
         final DataItem[] strItems = str.getItems();
 
-        // for (final VegetationZoneServerClientXChange entry : entries) {
-        final Label dateLabel = new Label("zone  (   asfd  - asdf )");
+        final List<Element> items1 = InfrastructureServerClientXChange.parse(strItems[0].getStringValue());
+
+        final StringBuilder builder = new StringBuilder();
+
+        for (final Element infrastr : items1) {
+            builder.append(infrastr.getGroupLabel()).append(" - ").append(infrastr.getTypeLabel()).append("; ");
+        }
+        if (builder.length() > 1)
+            builder.deleteCharAt(builder.length() - 2);
+        else
+            builder.append(" - keine Auswahl - (will never appear because the workflow is being disabled when the table is empty) ");
+        final Label dateLabel = new Label(builder.toString());
         dateLabel.setHeight("20px");
         vLayout.addMember(dateLabel);
 
@@ -280,10 +272,12 @@
 
         final ListGridRecord[] lgr = this.elements.getRecords();
         if (lgr.length == 0) {
-            // return new Data[0]; // TODO: Klären, ob Vegetationszonen-Auswahl Pflicht ist, ob es ein Fallback geben soll usw.
         }
+        final String dataStr = this.xchangeHelper.parseListToDataString();
 
-        final DataItem item = new DefaultDataItem(datakey, null, "VegetationZoneServerClientXChange.parseListToDataString(getZones(lgr))"); // DATA-key
+        final DataItem item = new DefaultDataItem(datakey, null,
+                dataStr.equals("") ? "Non-Empty Value -> createOld would be called (not necessary, because workflow is disabled when table is empty)"
+                        : dataStr);
         data.add(new DefaultData(datakey, null, null, new DataItem[] { item }));
         return data.toArray(new Data[data.size()]);
     }

http://dive4elements.wald.intevation.org