Mercurial > dive4elements > river
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 + } + } +}