diff flys-client/src/main/java/org/dive4elements/river/client/client/ui/map/GetFeatureInfo.java @ 5834:f507086aa94b

Repaired internal references.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:31:32 +0200
parents flys-client/src/main/java/de/intevation/flys/client/client/ui/map/GetFeatureInfo.java@a4ff4167be1e
children 821a02bbfb4e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-client/src/main/java/org/dive4elements/river/client/client/ui/map/GetFeatureInfo.java	Thu Apr 25 12:31:32 2013 +0200
@@ -0,0 +1,125 @@
+package de.intevation.flys.client.client.ui.map;
+
+import java.util.List;
+
+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.grid.ListGridRecord;
+
+import org.gwtopenmaps.openlayers.client.Map;
+import org.gwtopenmaps.openlayers.client.LonLat;
+import org.gwtopenmaps.openlayers.client.Pixel;
+import org.gwtopenmaps.openlayers.client.event.MapClickListener;
+
+import de.intevation.flys.client.shared.model.FeatureInfo;
+
+import de.intevation.flys.client.client.FLYSConstants;
+import de.intevation.flys.client.client.services.GFIService;
+import de.intevation.flys.client.client.services.GFIServiceAsync;
+import de.intevation.flys.client.shared.model.FacetRecord;
+import de.intevation.flys.client.shared.model.Theme;
+import de.intevation.flys.client.shared.model.AttributedTheme;
+import de.intevation.flys.client.shared.model.FeatureInfoResponse;
+import de.intevation.flys.client.client.ui.ThemePanel;
+
+
+public class GetFeatureInfo implements MapClickListener {
+
+    protected GFIServiceAsync gfiService = GWT.create(GFIService.class);
+
+    protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
+
+    protected GetFeatureInfoWindow gfiWindow;
+
+    protected Map        map;
+    protected ThemePanel themePanel;
+    protected String     infoFormat;
+
+
+    /**
+     * @param map
+     * @param themes
+     * @param url
+     * @param infoFormat
+     */
+    public GetFeatureInfo(Map map, ThemePanel themePanel, String infoFormat) {
+        this.map        = map;
+        this.themePanel = themePanel;
+        this.infoFormat = infoFormat;
+    }
+
+
+    public void activate(boolean activate) {
+        if (activate) {
+            map.addMapClickListener(this);
+        }
+        else {
+            map.removeListener(this);
+        }
+    }
+
+
+    protected void newGetFeatureInfoWindow(List<FeatureInfo> features, String title) {
+        if (gfiWindow != null) {
+            gfiWindow.destroy();
+        }
+
+        gfiWindow = new GetFeatureInfoWindow(features, title);
+        gfiWindow.show();
+    }
+
+    protected void newGetFeatureInfoWindow(String response, String title) {
+        if (gfiWindow != null) {
+            gfiWindow.destroy();
+        }
+
+        gfiWindow = new GetFeatureInfoWindow(response, title);
+        gfiWindow.show();
+    }
+
+    @Override
+    public void onClick(MapClickListener.MapClickEvent e) {
+        LonLat lonlat = e.getLonLat();
+        Pixel  pixel  = map.getPixelFromLonLat(lonlat);
+
+        if (themePanel.getSelectedRecords().length == 0) {
+            SC.say(MSG.requireTheme());
+        }
+
+        for (ListGridRecord rec : themePanel.getSelectedRecords()) {
+            Theme act_theme = ((FacetRecord)rec).getTheme();
+            final AttributedTheme at = (AttributedTheme)act_theme;
+            gfiService.query(
+                act_theme,
+                infoFormat,
+                map.getExtent().toString(),
+                map.getProjection(),
+                (int) map.getSize().getHeight(),
+                (int) map.getSize().getWidth(),
+                pixel.x(), pixel.y(),
+                new AsyncCallback<FeatureInfoResponse>() {
+                    @Override
+                    public void onFailure(Throwable e) {
+                        SC.warn(MSG.getString(e.getMessage()));
+                    }
+
+                    @Override
+                    public void onSuccess(FeatureInfoResponse response) {
+                        List<FeatureInfo> features = response.getFeatures();
+                        if (features != null && !features.isEmpty()) {
+                            newGetFeatureInfoWindow(features, at.getAttr("description"));
+                        } else if (response.getFeatureInfoHTML() != null) {
+                            newGetFeatureInfoWindow(response.getFeatureInfoHTML(),
+                                at.getAttr("description"));
+                        } else {
+                            GWT.log("GetFeatureInfo returned neither a list of features nor a string");
+                        }
+                    }
+                }
+            );
+            break; // More intelligent handling when more then one is selected
+        }
+    }
+}

http://dive4elements.wald.intevation.org