diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java@821a02bbfb4e
children 172338b1407f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WspDatacagePanel.java	Thu Apr 25 15:23:37 2013 +0200
@@ -0,0 +1,169 @@
+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 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;
+import org.dive4elements.river.client.shared.model.Artifact;
+import org.dive4elements.river.client.shared.model.Collection;
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataItem;
+import org.dive4elements.river.client.shared.model.DefaultData;
+import org.dive4elements.river.client.shared.model.DefaultDataItem;
+import org.dive4elements.river.client.shared.model.Recommendation;
+import org.dive4elements.river.client.shared.model.Recommendation.Facet;
+import org.dive4elements.river.client.shared.model.Recommendation.Filter;
+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;
+
+
+public class WspDatacagePanel extends DatacagePanel {
+
+    private static final long serialVersionUID = 2494432743877141135L;
+
+    public static final String WATERLEVEL_OUTS = "waterlevels";
+
+    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();
+    }
+
+
+    public WspDatacagePanel(User user) {
+        super(user);
+    }
+
+
+    @Override
+    public String getOuts() {
+        return WATERLEVEL_OUTS;
+    }
+
+
+    @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.
+     */
+    @Override
+    public void onClick(ClickEvent e) {
+        List<String> 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();
+
+
+            if (r == null) {
+                SC.warn(MSG.warning_no_wsp_selected());
+                return;
+            }
+
+            // 2) Create, load Artifact and fire event
+            loadService.load(
+                c, r, "winfo", locale,
+                new AsyncCallback<Artifact>() {
+                    @Override
+                    public void onFailure(Throwable caught) {
+                        GWT.log("WspDatacagePanel", caught);
+                        SC.warn(FLYS.getExceptionString(MSG, caught));
+                    }
+
+                    @Override
+                    public void onSuccess(Artifact artifact) {
+                        fireStepForwardEvent(new StepForwardEvent(
+                            getData(r, artifact)));
+                    }
+                }
+            );
+        }
+        else {
+            showErrors(errors);
+        }
+    }
+
+
+    protected Recommendation getSelectedRecommendation() {
+        ToLoad toLoad = widget.getSelection();
+        List<Recommendation> 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!
+     *
+     * @return always null!
+     */
+    @Override
+    protected Data[] getData() {
+        // do nothing here, the Data is fetched on another way in this panel.
+        return null;
+    }
+
+
+    protected Data[] getData(Recommendation r, Artifact newArtifact) {
+        String uuid = newArtifact.getUuid();
+        r.setMasterArtifact(uuid);
+
+        String value = createDataString(uuid, r.getFilter());
+
+        DataItem item = new DefaultDataItem(dataName, dataName, value);
+        return new Data[] { new DefaultData(
+            dataName, null, null, new DataItem[] { item }) };
+    }
+
+
+    protected String createDataString(String artifact, Filter filter) {
+        Facet f = null;
+
+        Map<String, List<Facet>>               outs = filter.getOuts();
+        Set<Map.Entry<String, List<Facet>>> entries = outs.entrySet();
+
+        for (Map.Entry<String, List<Facet>> entry: entries) {
+            List<Facet> fs = entry.getValue();
+
+            f = fs.get(0);
+            if (f != null) {
+                break;
+            }
+        }
+
+        return "[" + artifact + ";" + f.getName() + ";" + f.getIndex() + "]";
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org