# HG changeset patch
# User gernotbelger
# Date 1530698451 -7200
# Node ID e3c2ae1887e81b405c995772f7addf91f120cd33
# Parent 8642a76f22be5750ba12a0f65d2fb17022d8c1e0
Allow to filter contents of datacage on client side.
Allow to override column label of datacage
Some code cleanup
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Wed Jul 04 12:00:51 2018 +0200
@@ -1544,4 +1544,8 @@
String sinfo_collision_export();
String sinfo_flood_height();
+
+ String sinfo_columnlabel_soundings();
+
+ String sinfo_columnlabel_waterlevels();
}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Wed Jul 04 12:00:51 2018 +0200
@@ -831,4 +831,7 @@
bundu = Betrieb und Unterhaltung
chart_settings_export_metadata = Show Meta-Data
-export_csv_title = Title:
\ No newline at end of file
+export_csv_title = Title:
+
+sinfo_columnlabel_soundings = Wahl der Peilung
+sinfo_columnlabel_waterlevels = Wahl des Wasserspiegels
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Wed Jul 04 12:00:51 2018 +0200
@@ -831,4 +831,7 @@
bundu = Betrieb und Unterhaltung
chart_settings_export_metadata = Metadaten anzeigen
-export_csv_title = Titel:
\ No newline at end of file
+export_csv_title = Titel:
+
+sinfo_columnlabel_soundings = Wahl der Peilung
+sinfo_columnlabel_waterlevels = Wahl des Wasserspiegels
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePairWidget.java Wed Jul 04 12:00:51 2018 +0200
@@ -9,9 +9,7 @@
package org.dive4elements.river.client.client.ui;
import org.dive4elements.river.client.client.FLYSConstants;
-import org.dive4elements.river.client.shared.model.Artifact;
import org.dive4elements.river.client.shared.model.ToLoad;
-import org.dive4elements.river.client.shared.model.User;
import com.google.gwt.core.client.GWT;
import com.smartgwt.client.util.SC;
@@ -28,52 +26,40 @@
*/
public class DatacagePairWidget extends VLayout {
/** i18n resource. */
- protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
+ private final FLYSConstants MSG = GWT.create(FLYSConstants.class);
/** The "remote" ListGrid to insert data to when add-button is clicked. */
- protected ListGrid grid;
+ private final ListGrid grid;
/** First (upper) DataCage Grid. */
- protected DatacageWidget firstDatacageWidget;
+ private final DatacageWidget firstDatacageWidget;
/** Second (lower) DataCage Grid. */
- protected DatacageWidget secondDatacageWidget;
+ private final DatacageWidget secondDatacageWidget;
/** Max number of recommendation pairs to be added */
private final int maxCount;
+
/** errorMsg maxCount */
private final String msgMaxCount;
- /**
- *
- * @param artifact
- * Artifact to query datacage with.
- * @param user
- * User to query datacage with.
- * @param leftOuts
- * outs to query the left datacage with.
- * @param rightOuts
- * outs to query the right datacage with.
- * @param grid
- * Grid into which to insert selection of pairs.
- * @param max
- */
- public DatacagePairWidget(final Artifact artifact, final User user, final String leftOuts, final String rightOuts, final ListGrid grid, final int maxCount,
+ public DatacagePairWidget(final DatacageWidgetData leftData, final DatacageWidgetData rightData, final ListGrid grid, final int maxCount,
final String msgMaxCount) {
this.msgMaxCount = msgMaxCount;
this.maxCount = maxCount;
this.grid = grid;
final HLayout hLayout = new HLayout();
- this.firstDatacageWidget = new DatacageWidget(artifact, user, leftOuts, "load-system:true", false);
- this.secondDatacageWidget = new DatacageWidget(artifact, user, rightOuts, "load-system:true", false);
+
+ this.firstDatacageWidget = new DatacageWidget(leftData);
+ this.secondDatacageWidget = new DatacageWidget(rightData);
+
this.firstDatacageWidget.setIsMutliSelectable(false);
this.secondDatacageWidget.setIsMutliSelectable(false);
hLayout.addMember(this.firstDatacageWidget);
hLayout.addMember(this.secondDatacageWidget);
- // TODO: icon
final Button plusBtn = new Button(this.MSG.datacage_add_pair());
plusBtn.setAutoFit(true);
plusBtn.addClickHandler(new ClickHandler() {
@@ -95,10 +81,13 @@
final ToLoad toLoad1 = this.firstDatacageWidget.getSelection();
final ToLoad toLoad2 = this.secondDatacageWidget.getSelection();
+ // FIXME: allows to select folders... but it should not
+
if (toLoad1 == null || toLoad2 == null || toLoad1.toRecommendations().isEmpty() || toLoad2.toRecommendations().isEmpty()) {
SC.say(this.MSG.warning_select_two_values());
return;
}
+
if (this.grid.getTotalRows() >= this.maxCount) {
SC.say(this.msgMaxCount);
return;
@@ -106,5 +95,4 @@
this.grid.addData(new RecommendationPairRecord(toLoad1.toRecommendations().get(0), toLoad2.toRecommendations().get(0)));
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacagePanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -8,18 +8,18 @@
package org.dive4elements.river.client.client.ui;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataList;
+import org.dive4elements.river.client.shared.model.ToLoad;
+import org.dive4elements.river.client.shared.model.User;
+
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.VLayout;
-import org.dive4elements.river.client.shared.model.Data;
-import org.dive4elements.river.client.shared.model.DataList;
-import org.dive4elements.river.client.shared.model.User;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
/**
* @author Ingo Weinzierl
*/
@@ -27,34 +27,35 @@
private static final long serialVersionUID = 6937994648371673222L;
- protected String dataName;
-
- protected User user;
+ private String dataName;
- protected DatacageWidget widget;
+ private final User user;
+ private DatacageWidget widget;
- public DatacagePanel() {
- super();
+ private final String outs;
+
+ private final String parameters;
+
+ private final boolean multiSelectable;
+
+ public DatacagePanel(final User user, final String outs, final String parameters, final boolean multiSelectable) {
+ this.user = user;
+ this.outs = outs;
+ this.parameters = parameters;
+ this.multiSelectable = multiSelectable;
}
-
- public DatacagePanel(User user) {
- super();
- this.user = user;
- }
-
-
@Override
- public Canvas create(DataList dataList) {
- Data data = dataList.get(0);
+ public Canvas create(final DataList dataList) {
+ final Data data = dataList.get(0);
this.dataName = data.getLabel();
createWidget();
- Canvas label = new Label(data.getDescription());
- Canvas submit = getNextButton();
- VLayout layout = new VLayout();
+ final Canvas label = new Label(data.getDescription());
+ final Canvas submit = getNextButton();
+ final VLayout layout = new VLayout();
label.setHeight(25);
layout.addMember(label);
@@ -64,39 +65,36 @@
return layout;
}
+ private void createWidget() {
- protected void createWidget() {
- widget = new DatacageWidget(
- artifact,
- getUser(),
- getOuts(),
- getParameters(),
- false);
+ final DatacageWidgetData data = new DatacageWidgetData(this.artifact, this.user, this.outs, this.parameters, false);
- widget.setHeight100();
+ this.widget = new DatacageWidget(data);
- helperContainer.addMember(widget);
+ this.widget.setHeight100();
+
+ this.helperContainer.addMember(this.widget);
+
+ this.widget.setIsMutliSelectable(this.multiSelectable);
}
-
@Override
public List validate() {
return new ArrayList();
}
-
- public User getUser() {
- return user;
+ /**
+ * Unclear if this may implement super.getDataName...
+ */
+ protected final String getMyDataName() {
+ return this.dataName;
}
-
- public String getOuts() {
- return null;
+ protected final ToLoad getSelection() {
+ return this.widget.getSelection();
}
-
- public String getParameters() {
- return null;
+ protected final String[] getSelectionTitles() {
+ return this.widget.getSelectionTitles();
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageTwinPanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageTwinPanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageTwinPanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -32,6 +32,8 @@
public static interface IDatacageTwinPanelInfo extends IRecommendationInfo {
String getOuts();
+
+ String getColumnLabel();
}
public DatacageTwinPanel(final User user, final IValidator validator, final IDatacageTwinPanelInfo leftInfo, final IDatacageTwinPanelInfo rightInfo,
@@ -54,9 +56,14 @@
final HLayout helperLayout = new HLayout();
final String leftOuts = this.leftInfo.getOuts();
+ final String leftLabel = this.leftInfo.getColumnLabel();
+ final DatacageWidgetData leftData = new DatacageWidgetData(this.artifact, user, leftOuts, "load-system:true", false, leftLabel);
+
final String rightOuts = this.rightInfo.getOuts();
+ final String rightLabel = this.rightInfo.getColumnLabel();
+ final DatacageWidgetData rightData = new DatacageWidgetData(this.artifact, user, rightOuts, "load-system:true", false, rightLabel);
- helperLayout.addMember(new DatacagePairWidget(this.artifact, user, leftOuts, rightOuts, differencesList, this.maxCount, this.msgMaxCount));
+ helperLayout.addMember(new DatacagePairWidget(leftData, rightData, differencesList, this.maxCount, this.msgMaxCount));
if (dataList != null && dataList.get(0) != null && dataList.get(0).getDescription() != null) {
final Label title = new Label(dataList.get(0).getDescription());
@@ -71,5 +78,4 @@
return layout;
}
-
}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidget.java Wed Jul 04 12:00:51 2018 +0200
@@ -8,468 +8,409 @@
package org.dive4elements.river.client.client.ui;
-import com.google.gwt.core.client.GWT;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import com.smartgwt.client.types.SelectionStyle;
-import com.smartgwt.client.types.TreeModelType;
-
-import com.smartgwt.client.util.SC;
-
-import com.smartgwt.client.widgets.Button;
-
-import com.smartgwt.client.widgets.events.ClickEvent;
-import com.smartgwt.client.widgets.events.ClickHandler;
-
-import com.smartgwt.client.widgets.grid.HoverCustomizer;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
-
-import com.smartgwt.client.widgets.grid.events.RecordDoubleClickEvent;
-import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
-
-import com.smartgwt.client.widgets.layout.VLayout;
-
-import com.smartgwt.client.widgets.tree.Tree;
-import com.smartgwt.client.widgets.tree.TreeGrid;
-import com.smartgwt.client.widgets.tree.TreeNode;
-
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.MissingResourceException;
import java.util.Stack;
import org.dive4elements.river.client.client.Config;
import org.dive4elements.river.client.client.FLYSConstants;
-
import org.dive4elements.river.client.client.event.DatacageDoubleClickHandler;
import org.dive4elements.river.client.client.event.DatacageHandler;
-
import org.dive4elements.river.client.client.services.MetaDataService;
import org.dive4elements.river.client.client.services.MetaDataServiceAsync;
-
-import org.dive4elements.river.client.shared.model.Artifact;
import org.dive4elements.river.client.shared.model.AttrList;
import org.dive4elements.river.client.shared.model.DataCageNode;
import org.dive4elements.river.client.shared.model.DataCageTree;
import org.dive4elements.river.client.shared.model.ToLoad;
import org.dive4elements.river.client.shared.model.User;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.SelectionStyle;
+import com.smartgwt.client.types.TreeModelType;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Button;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordDoubleClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tree.Tree;
+import com.smartgwt.client.widgets.tree.TreeGrid;
+import com.smartgwt.client.widgets.tree.TreeNode;
+
// TODO: refactor, extract ~DataCageGrid
/**
* Display tree of, for example, previous calculations and allows
* selection in order to access/clone these.
*/
-public class DatacageWidget
-extends VLayout
-{
+public class DatacageWidget extends VLayout {
public static final int MAX_OPEN = 30;
- protected MetaDataServiceAsync metaDataService =
- GWT.create(MetaDataService.class);
-
- protected FLYSConstants messages =
- GWT.create(FLYSConstants.class);
-
- protected Artifact artifact;
- protected User user;
- protected String outs;
- protected String parameters;
-
- protected TreeGrid treeGrid;
- protected Tree tree;
-
- protected ToLoad toLoad;
-
- protected List handlers;
- protected List doubleHandlers;
-
- /** Layout to show spinning wheel of joy. */
- protected VLayout lockScreen;
-
-
- public DatacageWidget() {
- handlers = new ArrayList();
- doubleHandlers = new ArrayList();
+ public interface DatacageFilter {
+ boolean accept(DataCageNode node);
}
-
- public DatacageWidget(Artifact artifact, User user) {
- this(artifact, user, null);
- }
-
- public DatacageWidget(Artifact artifact, User user, String outs) {
- this(artifact, user, outs, true);
- }
+ public static final DatacageFilter ACCEPT_ALL_FILTER = new DatacageFilter() {
+ @Override
+ public boolean accept(final DataCageNode node) {
+ return true;
+ }
+ };
- public DatacageWidget(
- Artifact artifact,
- User user,
- String outs,
- boolean showButton
- ) {
- this(artifact, user, outs, null, showButton);
- }
-
+ private final MetaDataServiceAsync metaDataService = GWT.create(MetaDataService.class);
- public DatacageWidget(
- Artifact artifact,
- User user,
- String outs,
- String parameters,
- boolean showButton
- ) {
- this();
+ private final FLYSConstants messages = GWT.create(FLYSConstants.class);
- this.artifact = artifact;
- this.user = user;
- this.outs = outs;
- this.parameters = parameters;
+ private final List handlers = new ArrayList();
- toLoad = new ToLoad();
+ private final List doubleHandlers = new ArrayList();
+
+ private final TreeGrid treeGrid;
+
+ private Tree tree;
+
+ private ToLoad toLoad;
+
+ /** Layout to show spinning wheel of joy. */
+ private VLayout lockScreen;
+
+ private DataCageTree dcTree;
+
+ private DatacageFilter filter = ACCEPT_ALL_FILTER;
+
+ private DatacageWidgetData data;
+
+ public DatacageWidget(final DatacageWidgetData data) {
+
+ this.data = data;
+
+ this.toLoad = new ToLoad();
setWidth100();
- tree = new Tree();
- tree.setModelType(TreeModelType.CHILDREN);
- tree.setNameProperty("name");
- tree.setIdField("id");
- tree.setChildrenProperty("children-nodes");
- tree.setShowRoot(false);
+ this.treeGrid = new TreeGrid();
- treeGrid = new TreeGrid();
- treeGrid.setLoadDataOnDemand(false);
- treeGrid.setWidth100();
- treeGrid.setHeight100();
- treeGrid.setShowRoot(false);
- treeGrid.setNodeIcon("[SKIN]/../blank.gif");
- treeGrid.setShowConnectors(true);
- treeGrid.setLoadingMessage(messages.databasket_loading());
- treeGrid.setEmptyMessage(messages.databasket_loading());
- treeGrid.setLoadingDataMessage(messages.databasket_loading());
+ final String columnLabel = this.data.getColumnLabel();
+ if (columnLabel != null)
+ this.treeGrid.setTreeFieldTitle(columnLabel);
- treeGrid.setHoverMoveWithMouse(true);
- treeGrid.setCanHover(true);
- treeGrid.setShowHover(true);
- treeGrid.setHoverOpacity(75);
- treeGrid.setHoverWidth(120);
+ this.treeGrid.setLoadDataOnDemand(false);
+ this.treeGrid.setWidth100();
+ this.treeGrid.setHeight100();
+ this.treeGrid.setShowRoot(false);
+ this.treeGrid.setNodeIcon("[SKIN]/../blank.gif");
+ this.treeGrid.setShowConnectors(true);
+ this.treeGrid.setLoadingMessage(this.messages.databasket_loading());
+ this.treeGrid.setLoadingDataMessage(this.messages.databasket_loading());
- treeGrid.setHoverCustomizer(new HoverCustomizer() {
+ // FIXME: other message
+ this.treeGrid.setEmptyMessage(this.messages.databasket_loading());
+
+ this.treeGrid.setHoverMoveWithMouse(true);
+ this.treeGrid.setCanHover(true);
+ this.treeGrid.setShowHover(true);
+ this.treeGrid.setHoverOpacity(75);
+ this.treeGrid.setHoverWidth(120);
+
+ this.treeGrid.setHoverCustomizer(new HoverCustomizer() {
@Override
- public String hoverHTML(Object value,
- ListGridRecord record,
- int rowNum,
- int colNum
- ) {
- if(record instanceof TreeNode) {
- TreeNode hoveredTreeNode = (TreeNode)record;
+ public String hoverHTML(final Object value, final ListGridRecord record, final int rowNum, final int colNum) {
+ if (record instanceof TreeNode) {
+ final TreeNode hoveredTreeNode = (TreeNode) record;
String info = hoveredTreeNode.getAttribute("info");
if (info == null) {
info = hoveredTreeNode.getName();
}
return info;
}
- else {
- return "";// should not happen
- }
+
+ return "";// should not happen
}
});
- treeGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() {
+ this.treeGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() {
@Override
- public void onRecordDoubleClick(RecordDoubleClickEvent event) {
+ public void onRecordDoubleClick(final RecordDoubleClickEvent event) {
doubleClickedOnTree(event);
}
});
- addMember(treeGrid);
+ addMember(this.treeGrid);
- if (showButton) {
+ if (data.isShowButton())
addMember(createPlusButton());
- }
triggerTreeBuilding();
}
+ public void setFilter(final DatacageFilter filter) {
+ assert (filter != null);
+
+ this.filter = filter;
+
+ if (this.dcTree != null)
+ updateTree(this.dcTree);
+ }
+
/** Disable input, show spinning wheel of joy. */
- public void lockUI() {
- lockScreen = ScreenLock.lockUI(this, lockScreen);
+ private void lockUI() {
+ this.lockScreen = ScreenLock.lockUI(this, this.lockScreen);
}
/** Enable input, remove grey, remove spinning wheel of joy. */
- public void unlockUI() {
- ScreenLock.unlockUI(this, lockScreen);
+ protected final void unlockUI() {
+ ScreenLock.unlockUI(this, this.lockScreen);
}
/**
- * @param handler Handler to be added (notified on add-action).
+ * Sets whether more than one item can be selected.
+ *
+ * @param multi
+ * if true, allow mutliple selections.
*/
- public DatacageWidget(Artifact artifact, User user, String outs,
- DatacageHandler handler) {
- this(artifact, user, outs);
- this.addDatacageHandler(handler);
- }
-
-
- public DatacageWidget(
- Artifact artifact,
- User user,
- String outs,
- DatacageHandler handler,
- String parameters
- ) {
- this(artifact, user, outs, handler);
- this.parameters = parameters;
- }
-
-
- /**
- * Sets whether more than one item can be selected.
- * @param multi if true, allow mutliple selections.
- */
- public void setIsMutliSelectable(boolean multi) {
+ public void setIsMutliSelectable(final boolean multi) {
if (multi) {
- treeGrid.setSelectionType(SelectionStyle.MULTIPLE);
- }
- else {
- treeGrid.setSelectionType(SelectionStyle.SINGLE);
+ this.treeGrid.setSelectionType(SelectionStyle.MULTIPLE);
+ } else {
+ this.treeGrid.setSelectionType(SelectionStyle.SINGLE);
}
}
-
/**
- * @param handler Handler to be added (notified on add-action).
+ * @param handler
+ * Handler to be added (notified on add-action).
*/
- public void addDatacageHandler(DatacageHandler handler) {
- if (!handlers.contains(handler)) {
- handlers.add(handler);
- }
- }
-
-
- /**
- * @param h Handler to be added (notified on Double click on node).
- */
- public void addDatacageDoubleClickHandler(DatacageDoubleClickHandler h) {
- if (!doubleHandlers.contains(h)) {
- doubleHandlers.add(h);
+ public void addDatacageHandler(final DatacageHandler handler) {
+ if (!this.handlers.contains(handler)) {
+ this.handlers.add(handler);
}
}
+ /**
+ * @param h
+ * Handler to be added (notified on Double click on node).
+ */
+ public void addDatacageDoubleClickHandler(final DatacageDoubleClickHandler h) {
+ if (!this.doubleHandlers.contains(h)) {
+ this.doubleHandlers.add(h);
+ }
+ }
/**
- * @param handler Handler to remove from list.
+ * @param handler
+ * Handler to remove from list.
*/
- public void removeDatacageHandler(DatacageHandler handler) {
- handlers.remove(handler);
+ public void removeDatacageHandler(final DatacageHandler handler) {
+ this.handlers.remove(handler);
}
-
- public ToLoad getToLoad() {
- return toLoad;
- }
-
-
public ToLoad getSelection() {
// Reset content of toLoads.
- toLoad = new ToLoad();
+ this.toLoad = new ToLoad();
- if (treeGrid == null) {
- return toLoad;
+ if (this.treeGrid == null) {
+ return this.toLoad;
}
- ListGridRecord [] selection = treeGrid.getSelectedRecords();
+ final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
if (selection != null) {
- for (ListGridRecord record: selection) {
+ for (final ListGridRecord record : selection) {
if (record instanceof TreeNode) {
- collectToLoads((TreeNode)record);
+ collectToLoads((TreeNode) record);
}
}
}
- return toLoad;
+ return this.toLoad;
}
-
public List getPlainSelection() {
- ListGridRecord [] selection = treeGrid.getSelectedRecords();
- List nodes = new ArrayList();
+ final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
+ final List nodes = new ArrayList();
if (selection != null) {
- for (ListGridRecord record: selection) {
+ for (final ListGridRecord record : selection) {
if (record instanceof TreeNode) {
- nodes.add((TreeNode)record);
+ nodes.add((TreeNode) record);
}
}
}
return nodes;
}
-
/**
* Returns the titles of selected items (if any).
*/
public String[] getSelectionTitles() {
- if (treeGrid == null) {
+ if (this.treeGrid == null) {
return new String[] {};
}
- ListGridRecord [] selection = treeGrid.getSelectedRecords();
+ final ListGridRecord[] selection = this.treeGrid.getSelectedRecords();
if (selection == null) {
return new String[] {};
}
- List titleList = new ArrayList();
- for (ListGridRecord record: selection) {
+ final List titleList = new ArrayList();
+ for (final ListGridRecord record : selection) {
if (record instanceof TreeNode) {
- titleList.add(((TreeNode)record).getAttribute("name"));
+ titleList.add(((TreeNode) record).getAttribute("name"));
}
}
return titleList.toArray(new String[titleList.size()]);
}
-
/**
* Callback for add-button.
* Fires to load for every selected element and handler.
*/
- public void plusClicked() {
+ protected final void plusClicked() {
if (!getSelection().isEmpty()) {
fireToLoad();
}
}
-
- protected Button createPlusButton() {
- Button plusBtn = new Button(messages.datacageAdd());
+ private Button createPlusButton() {
+ final Button plusBtn = new Button(this.messages.datacageAdd());
plusBtn.addClickHandler(new ClickHandler() {
@Override
- public void onClick(ClickEvent event) {
+ public void onClick(final ClickEvent event) {
plusClicked();
}
});
return plusBtn;
}
-
- protected void fireToLoad() {
- for (DatacageHandler handler: handlers) {
- handler.toLoad(toLoad);
+ private void fireToLoad() {
+ for (final DatacageHandler handler : this.handlers) {
+ handler.toLoad(this.toLoad);
}
}
-
/** Notify DatacageDoubleClickHandlers that a doubleclick happened. */
- protected void fireOnDoubleClick() {
- for (DatacageDoubleClickHandler handler: doubleHandlers) {
- handler.onDoubleClick(toLoad);
+ private void fireOnDoubleClick() {
+ for (final DatacageDoubleClickHandler handler : this.doubleHandlers) {
+ handler.onDoubleClick(this.toLoad);
}
}
-
- protected void doubleClickedOnTree(RecordDoubleClickEvent event) {
- TreeNode node = (TreeNode)event.getRecord();
+ protected final void doubleClickedOnTree(final RecordDoubleClickEvent event) {
+ final TreeNode node = (TreeNode) event.getRecord();
collectToLoads(node);
fireOnDoubleClick();
}
-
/**
* Adds to toLoad, from info in node.
* Afterwards, add all children of node to stack to parse (next time
* collectToLoads is called).
*/
- protected void collectToLoads(TreeNode node) {
- Stack stack = new Stack();
+ private void collectToLoads(TreeNode node) {
+ final Stack stack = new Stack();
stack.push(node);
while (!stack.isEmpty()) {
node = stack.pop();
- String factory = node.getAttribute("factory");
+ final String factory = node.getAttribute("factory");
if (factory != null) { // we need at least a factory
- String artifact = node.getAttribute("artifact-id");
- String out = node.getAttribute("out");
- String name = node.getAttribute("facet");
- String ids = node.getAttribute("ids");
- String displayname = node.getAttribute("name");
- String targetOut = node.getAttribute("target_out");
+ final String artifact = node.getAttribute("artifact-id");
+ final String out = node.getAttribute("out");
+ final String name = node.getAttribute("facet");
+ final String ids = node.getAttribute("ids");
+ final String displayname = node.getAttribute("name");
+ final String targetOut = node.getAttribute("target_out");
String debugAttributeValues = "";
- for (String attr: node.getAttributes()) {
- debugAttributeValues += ("[" + attr +": "
- + node.getAttributeAsString(attr) + "] ");
+ for (final String attr : node.getAttributes()) {
+ debugAttributeValues += ("[" + attr + ": " + node.getAttributeAsString(attr) + "] ");
}
- GWT.log("DatacageWidget.collectToLoad, attributes are "
- + debugAttributeValues);
+ GWT.log("DatacageWidget.collectToLoad, attributes are " + debugAttributeValues);
- toLoad.add(artifact,
- factory,
- out,
- name,
- ids,
- displayname,
- targetOut);
+ this.toLoad.add(artifact, factory, out, name, ids, displayname, targetOut);
}
- TreeNode [] children = tree.getChildren(node);
+ final TreeNode[] children = this.tree.getChildren(node);
if (children != null) {
- for (TreeNode child: children) {
+ for (final TreeNode child : children) {
stack.push(child);
}
}
}
}
-
/** Get meta-data and populate tree with it. */
- protected void triggerTreeBuilding() {
- Config config = Config.getInstance();
- String locale = config.getLocale();
-
- String artifactId = artifact.getUuid();
- String userId = (user != null) ? user.identifier() : null;
-
+ private void triggerTreeBuilding() {
lockUI();
- metaDataService.getMetaData(
- locale,
- artifactId,
- userId,
- outs,
- parameters,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("Could not load meta data.");
- SC.warn(caught.getMessage());
- unlockUI();
- }
+ final String locale = Config.getInstance().getLocale();
- @Override
- public void onSuccess(DataCageTree dcTree) {
- GWT.log("Successfully loaded meta data.");
- IdGenerator idGenerator = new IdGenerator();
- DataCageNode dcRoot = dcTree.getRoot();
- TreeNode root = buildRecursiveChildren(
- dcRoot, idGenerator);
- tree.setRoot(root);
+ final String artifactId = this.data.getArtifact().getUuid();
+ final User user = this.data.getUser();
+ final String userId = user != null ? user.identifier() : null;
+ final String outs = this.data.getOuts();
+ final String parameters = this.data.getParameters();
- TreeNode[] nodes = tree.getChildren(root);
- for (TreeNode node: nodes) {
- if (node.getAttribute("factory") == null &&
- !tree.hasChildren(node)) {
- node.setIsFolder(true);
- }
- }
+ this.metaDataService.getMetaData(locale, artifactId, userId, outs, parameters, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("Could not load meta data.");
+ SC.warn(caught.getMessage());
+ unlockUI();
+ }
- if (idGenerator.current() < MAX_OPEN) {
- tree.openAll();
- }
- treeGrid.setData(tree);
- unlockUI();
- }
- });
+ @Override
+ public void onSuccess(final DataCageTree dcData) {
+ GWT.log("Successfully loaded meta data.");
+
+ setDatacageData(dcData);
+ unlockUI();
+ }
+ });
+ }
+
+ protected final void setDatacageData(final DataCageTree dcTree) {
+
+ this.dcTree = dcTree;
+
+ if (this.tree != null)
+ this.tree.destroy();
+
+ updateTree(this.dcTree);
+ }
+
+ private void updateTree(final DataCageTree data) {
+
+ this.tree = new Tree();
+ this.tree.setModelType(TreeModelType.CHILDREN);
+ this.tree.setNameProperty("name");
+ this.tree.setIdField("id");
+ this.tree.setChildrenProperty("children-nodes");
+ this.tree.setShowRoot(false);
+
+ final IdGenerator idGenerator = new IdGenerator();
+ final DataCageNode dcRoot = data.getRoot();
+ final TreeNode root = buildRecursiveChildren(dcRoot, idGenerator);
+ if (root != null) {
+ this.tree.setRoot(root);
+
+ // FIXME: why is this necessary? an it only happens for the first level...
+ final TreeNode[] nodes = this.tree.getChildren(root);
+ for (final TreeNode node : nodes) {
+ if (node.getAttribute("factory") == null && !this.tree.hasChildren(node))
+ node.setIsFolder(true);
+ }
+ }
+
+ if (idGenerator.current() < MAX_OPEN)
+ this.tree.openAll();
+
+ this.treeGrid.setData(this.tree);
}
private static final class IdGenerator {
@@ -479,11 +420,11 @@
}
public int next() {
- return current++;
+ return this.current++;
}
public int current() {
- return current;
+ return this.current;
}
} // class IdGenerator
@@ -492,48 +433,58 @@
return s;
}
- s = s.substring(2, s.length()-1);
+ s = s.substring(2, s.length() - 1);
try {
- return messages.getString(s);
+ return this.messages.getString(s);
}
- catch (MissingResourceException mre) {
+ catch (final MissingResourceException mre) {
GWT.log("cannot find i18n for + '" + s + "'");
return s;
}
}
- protected TreeNode buildRecursiveChildren(
- DataCageNode node,
- IdGenerator idGenerator
- ) {
- TreeNode tn = new TreeNode();
+ private TreeNode buildRecursiveChildren(final DataCageNode node, final IdGenerator idGenerator) {
+
+ if (!this.filter.accept(node))
+ return null;
+
+ final List children = node.getChildren();
+
+ final Collection tns = new ArrayList();
+
+ if (children != null && !children.isEmpty()) {
+
+ for (final DataCageNode child : children) {
+
+ final TreeNode childNode = buildRecursiveChildren(child, idGenerator);
+ if (childNode != null)
+ tns.add(childNode);
+ }
+
+ /* if we should have children, but all got filtered, hide this node as well */
+ if (tns.isEmpty())
+ return null;
+ }
+
+ final TreeNode tn = new TreeNode();
tn.setAttribute("id", idGenerator.next());
- List children = node.getChildren();
-
- if (children != null) {
- TreeNode [] tns = new TreeNode[children.size()];
- for (int i = 0; i < tns.length; ++i) {
- DataCageNode child = children.get(i);
- tns[i] = buildRecursiveChildren(child, idGenerator);
- }
- tn.setAttribute("children-nodes", tns);
- }
+ if (!tns.isEmpty())
+ tn.setAttribute("children-nodes", tns.toArray(new TreeNode[tns.size()]));
tn.setAttribute("name", i18n(node.getDescription()));
tn.setAttribute("facet", node.getName());
- AttrList attrs = node.getAttributes();
+ final AttrList attrs = node.getAttributes();
if (attrs != null) {
for (int i = 0, N = attrs.size(); i < N; ++i) {
- String key = attrs.getKey(i);
- String value = attrs.getValue(i);
+ final String key = attrs.getKey(i);
+ final String value = attrs.getValue(i);
tn.setAttribute(key, value);
}
}
return tn;
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidgetData.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWidgetData.java Wed Jul 04 12:00:51 2018 +0200
@@ -0,0 +1,78 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
+ * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.client.client.ui;
+
+import org.dive4elements.river.client.shared.model.Artifact;
+import org.dive4elements.river.client.shared.model.User;
+
+/**
+ * Holds all data that configures the {@link DatacageWidget}
+ *
+ * @author Gernot Belger
+ */
+public class DatacageWidgetData {
+
+ private final Artifact artifact;
+ private final User user;
+ private final String outs;
+ private final String parameters;
+ private final boolean showButton;
+ private final String columnLabel;
+
+ public DatacageWidgetData(final Artifact artifact, final User user) {
+ this(artifact, user, null);
+ }
+
+ public DatacageWidgetData(final Artifact artifact, final User user, final String outs) {
+ this(artifact, user, outs, true);
+ }
+
+ public DatacageWidgetData(final Artifact artifact, final User user, final String outs, final boolean showButton) {
+ this(artifact, user, outs, null, showButton);
+ }
+
+ public DatacageWidgetData(final Artifact artifact, final User user, final String outs, final String parameters, final boolean showButton) {
+ this(artifact, user, outs, parameters, showButton, null);
+ }
+
+ public DatacageWidgetData(final Artifact artifact, final User user, final String outs, final String parameters, final boolean showButton,
+ final String columnLabel) {
+ this.artifact = artifact;
+ this.user = user;
+ this.outs = outs;
+ this.parameters = parameters;
+ this.showButton = showButton;
+ this.columnLabel = columnLabel;
+ }
+
+ public Artifact getArtifact() {
+ return this.artifact;
+ }
+
+ public User getUser() {
+ return this.user;
+ }
+
+ public String getOuts() {
+ return this.outs;
+ }
+
+ public String getParameters() {
+ return this.parameters;
+ }
+
+ public boolean isShowButton() {
+ return this.showButton;
+ }
+
+ public String getColumnLabel() {
+ return this.columnLabel;
+ }
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWindow.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWindow.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DatacageWindow.java Wed Jul 04 12:00:51 2018 +0200
@@ -76,12 +76,9 @@
setWidth(400);
setHeight(500);
- DatacageWidget dw = new DatacageWidget(
- artifact,
- user,
- outs,
- "load-system:true",
- true);
+ final DatacageWidgetData data = new DatacageWidgetData( artifact, user, outs, "load-system:true", true );
+
+ DatacageWidget dw = new DatacageWidget( data );
dw.addDatacageHandler(this);
dw.addDatacageDoubleClickHandler(this);
@@ -192,6 +189,7 @@
factory,
locale,
new AsyncCallback() {
+ @Override
public void onFailure(Throwable caught) {
decreateInProgress();
GWT.log("Create-artifact failed: "
@@ -199,6 +197,7 @@
SC.warn(caught.getMessage());
}
+ @Override
public void onSuccess(Artifact artifact) {
decreateInProgress();
GWT.log("Created new artifact: " + artifact.getUuid());
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DefaultDatacageTwinPanelInfo.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DefaultDatacageTwinPanelInfo.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DefaultDatacageTwinPanelInfo.java Wed Jul 04 12:00:51 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
* Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
*
* This file is Free Software under the GNU AGPL (>=v3)
@@ -13,38 +13,45 @@
import org.dive4elements.river.client.shared.model.Recommendation;
/**
- * This info implementation overwrites the real factory of the recommendation with a fixed value.
+ * This info implementation overwrites the real factory of the recommendation with a fixed value.
* Evil, but this is how it is done in the current code.
- *
+ *
* @author Gernot Belger
*/
public final class DefaultDatacageTwinPanelInfo implements IDatacageTwinPanelInfo {
- private final String factory;
- private final String outs;
+ private final String factory;
+ private final String outs;
+ private final String columnLabel;
- public DefaultDatacageTwinPanelInfo(final String factory, final String outs) {
- this.factory = factory;
- this.outs = outs;
- }
-
- @Override
- public String getFactory(final String originalFactory) {
- return this.factory;
- }
-
- @Override
- public String getDataStringFactory(final Recommendation recommendation) {
- return this.factory;
- }
+ public DefaultDatacageTwinPanelInfo(final String columnLabel, final String factory, final String outs) {
+ this.columnLabel = columnLabel;
+ this.factory = factory;
+ this.outs = outs;
+ }
@Override
- public void adjustRecommendation(final Recommendation recommendation) {
+ public String getFactory(final String originalFactory) {
+ return this.factory;
+ }
+
+ @Override
+ public String getDataStringFactory(final Recommendation recommendation) {
+ return this.factory;
+ }
+
+ @Override
+ public void adjustRecommendation(final Recommendation recommendation) {
recommendation.setFactory(this.factory);
}
- @Override
- public String getOuts() {
- return this.outs;
- }
+ @Override
+ public String getColumnLabel() {
+ return this.columnLabel;
+ }
+
+ @Override
+ public String getOuts() {
+ return this.outs;
+ }
}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DemDatacagePanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DemDatacagePanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DemDatacagePanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -8,6 +8,9 @@
package org.dive4elements.river.client.client.ui;
+import java.util.ArrayList;
+import java.util.List;
+
import org.dive4elements.river.client.shared.model.Data;
import org.dive4elements.river.client.shared.model.DataItem;
import org.dive4elements.river.client.shared.model.DefaultData;
@@ -16,75 +19,43 @@
import org.dive4elements.river.client.shared.model.ToLoad;
import org.dive4elements.river.client.shared.model.User;
-import java.util.ArrayList;
-import java.util.List;
-
-
public class DemDatacagePanel extends DatacagePanel {
private static final long serialVersionUID = -2301633938080411687L;
- public static final String OUT = "floodmap_dem_panel";
- public static final String PARAMETERS = "dem:true";
-
-
- public DemDatacagePanel() {
- super();
- }
-
-
- public DemDatacagePanel(User user) {
- super(user);
- }
-
+ private static final String OUT = "floodmap_dem_panel";
- @Override
- protected void createWidget() {
- super.createWidget();
- widget.setIsMutliSelectable(false);
- }
-
+ private static final String PARAMETERS = "dem:true";
- @Override
- public String getOuts() {
- return OUT;
+ public DemDatacagePanel(final User user) {
+ super(user, OUT, PARAMETERS, false);
}
-
- @Override
- public String getParameters() {
- return PARAMETERS;
- }
-
-
@Override
public List validate() {
- List errors = new ArrayList();
+ final List errors = new ArrayList();
- Recommendation r = getSelectedRecommendation();
- if (r == null) {
+ final Recommendation r = getSelectedRecommendation();
+ if (r == null)
errors.add(MSG.requireDGM());
- }
return errors;
}
-
@Override
protected Data[] getData() {
- Recommendation r = getSelectedRecommendation();
+ final Recommendation r = getSelectedRecommendation();
- DataItem item = new DefaultDataItem(dataName, dataName, r.getIDs());
- return new Data[] { new DefaultData(
- dataName, null, null, new DataItem[] { item }) };
+ final String dataName = getMyDataName();
+
+ final DataItem item = new DefaultDataItem(dataName, dataName, r.getIDs());
+ return new Data[] { new DefaultData(dataName, null, null, new DataItem[] { item }) };
}
-
protected Recommendation getSelectedRecommendation() {
- ToLoad toLoad = widget.getSelection();
- List recoms = toLoad.toRecommendations();
+ final ToLoad toLoad = getSelection();
+ final List recoms = toLoad.toRecommendations();
return recoms != null && recoms.size() >= 1 ? recoms.get(0) : null;
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/HWSDatacagePanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/HWSDatacagePanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/HWSDatacagePanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -8,13 +8,8 @@
package org.dive4elements.river.client.client.ui;
-import com.google.gwt.core.client.GWT;
-
-import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.Label;
-
-import com.smartgwt.client.widgets.layout.HLayout;
-import com.smartgwt.client.widgets.layout.VLayout;
+import java.util.ArrayList;
+import java.util.List;
import org.dive4elements.river.client.shared.model.Data;
import org.dive4elements.river.client.shared.model.DataItem;
@@ -23,70 +18,48 @@
import org.dive4elements.river.client.shared.model.DefaultDataItem;
import org.dive4elements.river.client.shared.model.User;
-import java.util.ArrayList;
-import java.util.List;
-
+import com.google.gwt.core.client.GWT;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
-public class HWSDatacagePanel
-extends DatacagePanel
-{
- public static final String OUT = "floodmap_hws_panel";
- public static final String PARAMETERS = "hws:true;load-system:true";
-
+public class HWSDatacagePanel extends DatacagePanel {
- public HWSDatacagePanel() {
- super();
- }
+ private static final long serialVersionUID = 1L;
+ private static final String OUT = "floodmap_hws_panel";
- public HWSDatacagePanel(User user) {
- super(user);
+ private static final String PARAMETERS = "hws:true;load-system:true";
+
+ public HWSDatacagePanel(final User user) {
+ super(user, OUT, PARAMETERS, true);
}
-
- @Override
- protected void createWidget() {
- super.createWidget();
- widget.setIsMutliSelectable(true);
- }
-
-
- @Override
- public String getOuts() {
- return OUT;
- }
-
-
- @Override
- public String getParameters() {
- return PARAMETERS;
- }
-
-
@Override
public List validate() {
- List errors = new ArrayList();
+ final List errors = new ArrayList();
return errors;
}
@Override
- public Canvas createOld(DataList dataList) {
+ public Canvas createOld(final DataList dataList) {
GWT.log("old datacage##########################################");
- HLayout layout = new HLayout();
- VLayout vLayout = new VLayout();
+ final HLayout layout = new HLayout();
+ final VLayout vLayout = new VLayout();
layout.setWidth("400px");
- Label label = new Label(dataList.getLabel());
+ final Label label = new Label(dataList.getLabel());
label.setWidth("200px");
- int size = dataList.size();
+ final int size = dataList.size();
for (int i = 0; i < size; i++) {
- Data data = dataList.get(i);
- DataItem[] items = data.getItems();
+ final Data data = dataList.get(i);
+ final DataItem[] items = data.getItems();
- for (DataItem item: items) {
- HLayout hLayout = new HLayout();
+ for (final DataItem item : items) {
+ final HLayout hLayout = new HLayout();
hLayout.addMember(label);
hLayout.addMember(new Label(item.getLabel()));
@@ -96,7 +69,7 @@
}
}
- Canvas back = getBackButton(dataList.getState());
+ final Canvas back = getBackButton(dataList.getState());
layout.addMember(label);
layout.addMember(vLayout);
@@ -105,19 +78,17 @@
return layout;
}
-
@Override
protected Data[] getData() {
- String[] selection = this.widget.getSelectionTitles();
+ final String[] selection = getSelectionTitles();
String result = "";
boolean first = true;
if (selection != null) {
- for (String record: selection) {
+ for (final String record : selection) {
if (first) {
result += record;
first = false;
- }
- else {
+ } else {
result += ";" + record;
}
}
@@ -125,13 +96,10 @@
if (result.length() == 0) {
result = MSG.notselected();
}
- Data[] data = new Data[1];
- DataItem item = new DefaultDataItem(
- "uesk.hws", "uesk.hws", result);
- data[0] = new DefaultData(
- "uesk.hws", null, null, new DataItem[] {item});
+ final Data[] data = new Data[1];
+ final DataItem item = new DefaultDataItem("uesk.hws", "uesk.hws", result);
+ data[0] = new DefaultData("uesk.hws", null, null, new DataItem[] { item });
return data;
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/NilDatacageTwinPanelInfo.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/NilDatacageTwinPanelInfo.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/NilDatacageTwinPanelInfo.java Wed Jul 04 12:00:51 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
* Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
*
* This file is Free Software under the GNU AGPL (>=v3)
@@ -14,35 +14,42 @@
/**
* An info implementation that does NOT tweak any factories.
- *
+ *
* @author Gernot Belger
*/
public final class NilDatacageTwinPanelInfo implements IDatacageTwinPanelInfo {
- private final String outs;
+ private final String outs;
+ private final String columnLabel;
- public NilDatacageTwinPanelInfo(final String outs) {
- this.outs = outs;
- }
-
- @Override
- public String getFactory(final String originalFactory) {
- return originalFactory;
- }
-
-
- @Override
- public String getDataStringFactory(final Recommendation recommendation) {
- return recommendation.getFactory();
- }
+ public NilDatacageTwinPanelInfo(final String columnLabel, final String outs) {
+ this.columnLabel = columnLabel;
+ this.outs = outs;
+ }
@Override
- public void adjustRecommendation(final Recommendation recommendation) {
+ public String getFactory(final String originalFactory) {
+ return originalFactory;
+ }
+
+
+ @Override
+ public String getDataStringFactory(final Recommendation recommendation) {
+ return recommendation.getFactory();
+ }
+
+ @Override
+ public void adjustRecommendation(final Recommendation recommendation) {
/* does nothing */
}
- @Override
- public String getOuts() {
- return this.outs;
- }
+ @Override
+ public String getOuts() {
+ return this.outs;
+ }
+
+ @Override
+ public String getColumnLabel() {
+ return this.columnLabel;
+ }
}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WaterlevelRecommendationInfo.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WaterlevelRecommendationInfo.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WaterlevelRecommendationInfo.java Wed Jul 04 12:00:51 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * Software engineering by
+ * Björnsen Beratende Ingenieure GmbH
* Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
*
* This file is Free Software under the GNU AGPL (>=v3)
@@ -16,42 +16,42 @@
/**
* Factored out code from the old WaterlevelTwinPanel; contains some evil hacks about the involved artifact factories. See original comments below...
- *
+ *
* @author Gernot Belger
*/
public final class WaterlevelRecommendationInfo implements IDatacageTwinPanelInfo {
- private final String outs;
-
+ private final String outs;
+
/**
* @param tweakFactory See evil hack below
*/
- public WaterlevelRecommendationInfo(final String outs) {
- this.outs = outs;
- }
-
- @Override
- public String getFactory(final String originalFactory) {
- // FIXME: why are the factory here and the one used in createDataString different?
- // Probably also because of the 'throw all this code away comment'
- return "waterlevel";
- }
-
- @Override
- public String getDataStringFactory(final Recommendation recommendation) {
- return "staticwkms";
- }
-
+ public WaterlevelRecommendationInfo(final String outs) {
+ this.outs = outs;
+ }
+
@Override
- public void adjustRecommendation(final Recommendation recommendation) {
-
+ public String getFactory(final String originalFactory) {
+ // FIXME: why are the factory here and the one used in createDataString different?
+ // Probably also because of the 'throw all this code away comment'
+ return "waterlevel";
+ }
+
+ @Override
+ public String getDataStringFactory(final Recommendation recommendation) {
+ return "staticwkms";
+ }
+
+ @Override
+ public void adjustRecommendation(final Recommendation recommendation) {
+
// XXX: THIS IS AN EVIL HACK TO MAKE W-DIFFERENCES WORK AGAIN!
// TODO: Throw all this code away and do it with server side recommendations!
recommendation.setTargetOut("w_differences");
if (recommendation.getIDs() != null) {
GWT.log("Setting staticwkms factory for rec with ID "
- + recommendation.getIDs());
+ + recommendation.getIDs());
recommendation.setFactory("staticwkms");
}
/*
@@ -61,15 +61,20 @@
GWT.log("Setting waterlevel factory for a winfo rec.");
recommendation.setFactory("waterlevel");
}
- */
+ */
else {
- GWT.log("Leave rec. id " + recommendation.getIDs() + ", factory "
- + recommendation.getFactory() + " untouched.");
+ GWT.log("Leave rec. id " + recommendation.getIDs() + ", factory "
+ + recommendation.getFactory() + " untouched.");
}
}
- @Override
- public String getOuts() {
- return this.outs;
- }
+ @Override
+ public String getOuts() {
+ return this.outs;
+ }
+
+ @Override
+ public String getColumnLabel() {
+ return null;
+ }
}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -8,15 +8,12 @@
package org.dive4elements.river.client.client.ui;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.events.ClickEvent;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.dive4elements.river.client.client.Config;
import org.dive4elements.river.client.client.FLYS;
-import org.dive4elements.river.client.client.FLYSConstants;
import org.dive4elements.river.client.client.event.StepForwardEvent;
import org.dive4elements.river.client.client.services.LoadArtifactService;
import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync;
@@ -32,67 +29,40 @@
import org.dive4elements.river.client.shared.model.ToLoad;
import org.dive4elements.river.client.shared.model.User;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.events.ClickEvent;
public class WspDatacagePanel extends DatacagePanel {
private static final long serialVersionUID = 2494432743877141135L;
- public static final String WATERLEVEL_OUTS = "waterlevels_panel";
-
- public static final FLYSConstants MSG = GWT.create(FLYSConstants.class);
-
-
- protected LoadArtifactServiceAsync loadService =
- GWT.create(LoadArtifactService.class);
-
- protected Recommendation recommendation;
- protected Artifact artifact;
-
-
- public WspDatacagePanel() {
- super();
- }
-
+ private static final String WATERLEVEL_OUTS = "waterlevels_panel";
- public WspDatacagePanel(User user) {
- super(user);
- }
-
+ private final LoadArtifactServiceAsync loadService = GWT.create(LoadArtifactService.class);
- @Override
- public String getOuts() {
- return WATERLEVEL_OUTS;
+ public WspDatacagePanel(final User user) {
+ super(user, WATERLEVEL_OUTS, null, false);
}
-
- @Override
- protected void createWidget() {
- super.createWidget();
- widget.setIsMutliSelectable(false);
- }
-
-
/**
* We need to override this method (defined in AbstractUIProvider) because
* we have to create a new Artifact specified by the Datacage selection via
* Async request.
*
- * @param e The ClickEvent.
+ * @param e
+ * The ClickEvent.
*/
@Override
- public void onClick(ClickEvent e) {
- List errors = validate();
+ public void onClick(final ClickEvent e) {
+ final List errors = validate();
if (errors == null || errors.isEmpty()) {
// 1) Fetch selected recommendation.
- Config config = Config.getInstance();
- final String locale = config.getLocale();
- final Collection c = this.collection;
- final Recommendation r = getSelectedRecommendation();
-
+ final Config config = Config.getInstance();
+ final String locale = config.getLocale();
+ final Collection c = this.collection;
+ final Recommendation r = getSelectedRecommendation();
if (r == null) {
SC.warn(MSG.warning_no_wsp_selected());
@@ -101,38 +71,31 @@
// TODO: This could eventually be handled server-side.
// 2) Create, load Artifact and fire event.
- loadService.load(
- c, r, r.getFactory(), locale,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("WspDatacagePanel", caught);
- SC.warn(FLYS.getExceptionString(MSG, caught));
- }
+ this.loadService.load(c, r, r.getFactory(), locale, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("WspDatacagePanel", caught);
+ SC.warn(FLYS.getExceptionString(MSG, caught));
+ }
- @Override
- public void onSuccess(Artifact newArtifact) {
- GWT.log("Created new artifact.");
- fireStepForwardEvent(new StepForwardEvent(
- getData(r, newArtifact)));
- }
+ @Override
+ public void onSuccess(final Artifact newArtifact) {
+ GWT.log("Created new artifact.");
+ fireStepForwardEvent(new StepForwardEvent(getData(r, newArtifact)));
}
- );
- }
- else {
+ });
+ } else {
showErrors(errors);
}
}
-
protected Recommendation getSelectedRecommendation() {
- ToLoad toLoad = widget.getSelection();
- List recoms = toLoad.toRecommendations();
+ final ToLoad toLoad = getSelection();
+ final List recoms = toLoad.toRecommendations();
return recoms.size() > 0 ? recoms.get(0) : null;
}
-
/**
* Nothing is done in this method. It returns null, because we serve the
* Data another way!
@@ -145,35 +108,32 @@
return null;
}
-
/** Returns a Data Array with one default item. */
- protected Data[] getData(Recommendation r, Artifact newArtifact) {
- String uuid = newArtifact.getUuid();
+ protected final Data[] getData(final Recommendation r, final Artifact newArtifact) {
+ final String uuid = newArtifact.getUuid();
r.setMasterArtifact(uuid);
- String value = createDataString(uuid, r);
+ final String value = createDataString(uuid, r);
- DataItem item = new DefaultDataItem(dataName, dataName, value);
- return new Data[] { new DefaultData(
- dataName, null, null, new DataItem[] { item }) };
+ final String dataName = getMyDataName();
+
+ final DataItem item = new DefaultDataItem(dataName, dataName, value);
+ return new Data[] { new DefaultData(dataName, null, null, new DataItem[] { item }) };
}
-
- protected String createDataString(
- String artifact,
- Recommendation recommendation
- ) {
- Facet f = null;
+ private String createDataString(final String artifactId, final Recommendation recommendation) {
// The filter will only be available or previous calculation artifacts.
- Filter filter = recommendation.getFilter();
+ final Filter filter = recommendation.getFilter();
if (filter != null) {
- Map> outs = filter.getOuts();
- Set>> entries = outs.entrySet();
+ Facet f = null;
- for (Map.Entry> entry: entries) {
- List fs = entry.getValue();
+ final Map> outs = filter.getOuts();
+ final Set>> entries = outs.entrySet();
+
+ for (final Map.Entry> entry : entries) {
+ final List fs = entry.getValue();
f = fs.get(0);
if (f != null) {
@@ -181,13 +141,9 @@
}
}
- return "[" + artifact + ";" + f.getName() + ";"
- + f.getIndex() + "]";
+ return "[" + artifactId + ";" + f.getName() + ";" + f.getIndex() + "]";
}
- else {
- return "[" + artifact + ";"
- + recommendation.getFactory() + ";" + 0 + "]";
- }
+
+ return "[" + artifactId + ";" + recommendation.getFactory() + ";" + 0 + "]";
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/minfo/BedHeightsDatacagePanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -12,6 +12,7 @@
import org.dive4elements.river.client.client.ui.AbstractPairRecommendationPanel;
import org.dive4elements.river.client.client.ui.DatacageWidget;
+import org.dive4elements.river.client.client.ui.DatacageWidgetData;
import org.dive4elements.river.client.client.ui.DefaultDatacageTwinPanelInfo;
import org.dive4elements.river.client.client.ui.RecommendationPairRecord;
import org.dive4elements.river.client.client.ui.WaterlevelTwinPanelValidator;
@@ -29,35 +30,40 @@
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tree.TreeNode;
-public class BedHeightsDatacagePanel
-extends AbstractPairRecommendationPanel {
+public class BedHeightsDatacagePanel extends AbstractPairRecommendationPanel {
- public BedHeightsDatacagePanel(User user) {
- // FIXME: This will lead to a bad error message in English (i.e. contains something about waterlevels), for M-Info/Bed-Differences calculation
- // BUT: this is the behavior of 3.2.1 (because of sloppy derivation), so we do not change it now
- super(user, new WaterlevelTwinPanelValidator(), new DefaultDatacageTwinPanelInfo("bedheight", null), new DefaultDatacageTwinPanelInfo("bedheight", null) );
+ private static final DefaultDatacageTwinPanelInfo INFO = new DefaultDatacageTwinPanelInfo(null, "bedheight", null);
+
+ private static final long serialVersionUID = 1L;
+
+ public BedHeightsDatacagePanel(final User user) {
+ // FIXME: This will lead to a bad error message in English (i.e. contains something about waterlevels), for
+ // M-Info/Bed-Differences calculation
+ // BUT: this is the behavior of 3.2.1 (because of sloppy derivation), so we do not change it now
+ super(user, new WaterlevelTwinPanelValidator(), INFO, INFO);
}
@Override
protected Canvas createChooserWidgets(final Canvas widget, final DataList dataList, final User user, final ListGrid differencesList) {
GWT.log("createData()");
- Canvas submit = getNextButton();
+ final Canvas submit = getNextButton();
- final DatacageWidget datacage = new DatacageWidget(
- this.artifact, user, "minfo_diff_panel", "load-system:true", false);
+ final DatacageWidgetData data = new DatacageWidgetData(this.artifact, user, "minfo_diff_panel", "load-system:true", false);
- Button plusBtn = new Button(msg().datacage_add_pair());
+ final DatacageWidget datacage = new DatacageWidget(data);
+
+ final Button plusBtn = new Button(msg().datacage_add_pair());
plusBtn.setAutoFit(true);
plusBtn.addClickHandler(new ClickHandler() {
@Override
- public void onClick(ClickEvent event) {
+ public void onClick(final ClickEvent event) {
plusClicked(datacage, differencesList);
}
});
- VLayout layout = new VLayout();
- VLayout helperLayout = new VLayout();
+ final VLayout layout = new VLayout();
+ final VLayout helperLayout = new VLayout();
helperLayout.addMember(datacage);
helperLayout.addMember(plusBtn);
@@ -72,50 +78,36 @@
/**
* Callback for add-button.
* Fires to load for every selected element and handler.
- * @param differencesList
+ *
+ * @param differencesList
*/
- protected final static void plusClicked( final DatacageWidget datacage, ListGrid differencesList ) {
- List selection = datacage.getPlainSelection();
+ protected final static void plusClicked(final DatacageWidget datacage, final ListGrid differencesList) {
+ final List selection = datacage.getPlainSelection();
if (selection == null || selection.isEmpty()) {
SC.say(msg().warning());
return;
}
- for (TreeNode node : selection) {
- ToLoad toLoad1 = new ToLoad();
- ToLoad toLoad2 = new ToLoad();
-
- String factory = node.getAttribute("factory");
- if (factory != null) { // we need at least a factory
- String artifact = node.getAttribute("artifact-id");
- String out = node.getAttribute("out");
- String name = node.getAttribute("facet");
- String ids = node.getAttribute("ids");
- String info = node.getAttribute("info");
- String targetOut = node.getAttribute("target_out");
+ for (final TreeNode node : selection) {
+ final ToLoad toLoad1 = new ToLoad();
+ final ToLoad toLoad2 = new ToLoad();
- String[] splitIds = ids.split("#");
- String[] splitInfo = info.split("#");
- toLoad1.add(artifact,
- factory,
- out,
- name,
- splitIds[0],
- splitInfo[0],
- targetOut);
- toLoad2.add(artifact,
- factory,
- out,
- name,
- splitIds[1],
- splitInfo[1],
- targetOut);
+ final String factory = node.getAttribute("factory");
+ if (factory != null) { // we need at least a factory
+ final String artifact = node.getAttribute("artifact-id");
+ final String out = node.getAttribute("out");
+ final String name = node.getAttribute("facet");
+ final String ids = node.getAttribute("ids");
+ final String info = node.getAttribute("info");
+ final String targetOut = node.getAttribute("target_out");
+
+ final String[] splitIds = ids.split("#");
+ final String[] splitInfo = info.split("#");
+ toLoad1.add(artifact, factory, out, name, splitIds[0], splitInfo[0], targetOut);
+ toLoad2.add(artifact, factory, out, name, splitIds[1], splitInfo[1], targetOut);
}
- differencesList.addData(new RecommendationPairRecord(
- toLoad1.toRecommendations().get(0),
- toLoad2.toRecommendations().get(0)));
+ differencesList.addData(new RecommendationPairRecord(toLoad1.toRecommendations().get(0), toLoad2.toRecommendations().get(0)));
}
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FlowDepthMinMaxTwinPanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FlowDepthMinMaxTwinPanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FlowDepthMinMaxTwinPanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -18,8 +18,15 @@
* @author Gernot Belger
*/
public final class FlowDepthMinMaxTwinPanel extends DatacageTwinPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final DefaultDatacageTwinPanelInfo LEFT_INFO = new DefaultDatacageTwinPanelInfo(MSG.sinfo_columnlabel_soundings(), "bedheight",
+ "sinfo_flowdepthminmax_heights");
+
+ private static final NilDatacageTwinPanelInfo RIGHT_INFO = new NilDatacageTwinPanelInfo(MSG.sinfo_columnlabel_waterlevels(), "sinfo_flowdepth_waterlevels");
+
public FlowDepthMinMaxTwinPanel(final User user) {
- super(user, new FlowDepthTwinPanelValidator(), new NilDatacageTwinPanelInfo("sinfo_flowdepth_waterlevels"),
- new DefaultDatacageTwinPanelInfo("bedheight", "sinfo_flowdepthminmax_heights"), 9999, "");
+ super(user, new FlowDepthTwinPanelValidator(), LEFT_INFO, RIGHT_INFO, 9999, "");
}
}
\ No newline at end of file
diff -r 8642a76f22be -r e3c2ae1887e8 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FlowDepthTwinPanel.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FlowDepthTwinPanel.java Wed Jul 04 10:46:37 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/FlowDepthTwinPanel.java Wed Jul 04 12:00:51 2018 +0200
@@ -18,8 +18,15 @@
* @author Gernot Belger
*/
public final class FlowDepthTwinPanel extends DatacageTwinPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final DefaultDatacageTwinPanelInfo LEFT_INFO = new DefaultDatacageTwinPanelInfo(MSG.sinfo_columnlabel_soundings(), "bedheight",
+ "sinfo_flowdepth_minfo_heights");
+
+ private static final NilDatacageTwinPanelInfo RIGHT_INFO = new NilDatacageTwinPanelInfo(MSG.sinfo_columnlabel_waterlevels(), "sinfo_flowdepth_waterlevels");
+
public FlowDepthTwinPanel(final User user, final int maxCount, final String msgMaxCount) {
- super(user, new FlowDepthTwinPanelValidator(), new NilDatacageTwinPanelInfo("sinfo_flowdepth_waterlevels"),
- new DefaultDatacageTwinPanelInfo("bedheight", "sinfo_flowdepth_minfo_heights"), maxCount, msgMaxCount);
+ super(user, new FlowDepthTwinPanelValidator(), LEFT_INFO, RIGHT_INFO, maxCount, msgMaxCount);
}
}
\ No newline at end of file