ingo@833: package de.intevation.flys.client.client.ui; ingo@833: ingo@833: import java.util.List; ingo@833: ingo@833: import com.google.gwt.core.client.GWT; ingo@833: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@833: ingo@833: import com.smartgwt.client.util.SC; ingo@833: import com.smartgwt.client.widgets.Canvas; ingo@833: import com.smartgwt.client.widgets.events.ResizedEvent; ingo@833: import com.smartgwt.client.widgets.events.ResizedHandler; raimund@915: import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; raimund@915: import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; ingo@833: ingo@833: import org.gwtopenmaps.openlayers.client.Map; ingo@833: import org.gwtopenmaps.openlayers.client.feature.VectorFeature; ingo@833: import org.gwtopenmaps.openlayers.client.format.GeoJSON; ingo@833: import org.gwtopenmaps.openlayers.client.layer.WMS; ingo@833: import org.gwtopenmaps.openlayers.client.layer.WMSParams; ingo@833: import org.gwtopenmaps.openlayers.client.layer.WMSOptions; ingo@833: ingo@833: import de.intevation.flys.client.shared.model.Data; ingo@833: import de.intevation.flys.client.shared.model.DataItem; ingo@833: import de.intevation.flys.client.shared.model.DataList; ingo@833: import de.intevation.flys.client.shared.model.DefaultData; ingo@833: import de.intevation.flys.client.shared.model.DefaultDataItem; ingo@833: import de.intevation.flys.client.shared.model.MapInfo; ingo@833: ingo@833: import de.intevation.flys.client.client.Config; ingo@833: import de.intevation.flys.client.client.ui.map.FloodMap; ingo@833: import de.intevation.flys.client.client.ui.map.MapPanel; ingo@833: import de.intevation.flys.client.client.services.MapInfoService; ingo@833: import de.intevation.flys.client.client.services.MapInfoServiceAsync; ingo@833: ingo@833: raimund@915: public class DigitizePanel raimund@915: extends SelectProvider raimund@915: implements TabSelectedHandler { ingo@833: ingo@833: protected MapInfoServiceAsync mapInfo = GWT.create(MapInfoService.class); ingo@833: ingo@833: protected FloodMap floodMap; ingo@833: ingo@833: ingo@833: public static final String UESK_BARRIERS = "uesk.barriers"; ingo@833: ingo@833: ingo@833: public DigitizePanel() { ingo@833: } ingo@833: ingo@833: ingo@833: @Override ingo@833: public Canvas create(DataList list) { ingo@833: List data = list.getAll(); ingo@833: ingo@833: Data barriers = null; ingo@833: for (int i = data.size()-1; i >= 0; i--) { ingo@833: Data d = data.get(i); ingo@833: if (d.getLabel().equals(UESK_BARRIERS)) { ingo@833: barriers = d; ingo@833: data.remove(d); ingo@833: } ingo@833: } ingo@833: ingo@872: DataList clone = (DataList) list.clone(); ingo@872: List all = clone.getAll(); ingo@872: all.remove(UESK_BARRIERS); ingo@872: ingo@872: Canvas selectBox = super.create(clone); ingo@833: ingo@833: final Config cfg = Config.getInstance(); ingo@833: final String url = cfg.getServerUrl(); ingo@833: final String locale = cfg.getLocale(); ingo@833: ingo@833: DataItem[] obj = barriers.getItems(); ingo@833: ingo@833: final String[] geojson = new String[1]; ingo@833: for (DataItem item: obj) { ingo@833: if (item.getLabel().equals(UESK_BARRIERS)) { ingo@833: geojson[0] = item.getStringValue(); ingo@833: break; ingo@833: } ingo@833: } ingo@833: ingo@873: String river = getDataValue("state.winfo.river", "river"); ingo@873: mapInfo.getMapInfo(url, locale, river, new AsyncCallback() { ingo@833: public void onFailure(Throwable caught) { ingo@833: String msg = caught.getMessage(); ingo@833: ingo@833: GWT.log("Error while fetching MapInfo: " + msg); ingo@833: SC.warn(MSG.getString(msg)); ingo@833: } ingo@833: ingo@833: public void onSuccess(MapInfo info) { ingo@833: createMapWidget(info, geojson[0]); ingo@833: } ingo@833: }); ingo@833: ingo@833: return selectBox; ingo@833: } ingo@833: ingo@833: ingo@833: @Override ingo@833: protected Data[] getData() { ingo@833: Data[] data = super.getData(); ingo@833: Data[] total = new Data[2]; ingo@833: ingo@833: DataItem item = new DefaultDataItem( ingo@833: UESK_BARRIERS, UESK_BARRIERS, floodMap.getFeaturesAsGeoJSON()); ingo@833: ingo@833: total[0] = data[0]; ingo@833: total[1] = new DefaultData( ingo@833: UESK_BARRIERS, null, null, new DataItem[] { item }); ingo@833: ingo@833: return total; ingo@833: } ingo@833: ingo@833: ingo@833: public void createMapWidget(MapInfo mapInfo, String geojson) { ingo@833: final MapPanel mapPanel = new MapPanel(mapInfo, true); ingo@833: ingo@833: floodMap = mapPanel.getFloodMap(); ingo@833: Map map = floodMap.getMap(); ingo@833: ingo@833: helperContainer.addMember(mapPanel); ingo@833: helperContainer.addResizedHandler(new ResizedHandler() { ingo@833: public void onResized(ResizedEvent e) { ingo@833: Integer height = helperContainer.getHeight(); ingo@833: Integer width = helperContainer.getWidth(); ingo@833: ingo@833: height = height * 99 / 100; ingo@833: width = width * 99 / 100; ingo@833: ingo@833: String w = String.valueOf(width) + "px"; ingo@833: String h = String.valueOf(height) + "px"; ingo@833: ingo@833: mapPanel.getFloodMap().setSize(w, h); ingo@833: } ingo@833: }); ingo@833: raimund@915: parameterList.registerCollectionViewTabHandler(this); raimund@915: ingo@833: WMS axis = getLayer( ingo@833: mapInfo.getWmsUrl(), "riveraxis", ingo@833: mapInfo.getProjection(), false); ingo@833: WMS back = getLayer( ingo@833: mapInfo.getBackgroundWmsUrl(), mapInfo.getBackgroundWmsLayers(), ingo@833: mapInfo.getProjection(), false); ingo@833: ingo@833: map.addLayer(axis); ingo@833: map.addLayer(back); ingo@833: ingo@833: if (geojson != null && geojson.length() > 0) { ingo@833: VectorFeature[] features = new GeoJSON().read(geojson); ingo@833: floodMap.getBarrierLayer().addFeatures(features); ingo@833: } ingo@833: ingo@833: map.zoomToMaxExtent(); ingo@833: } ingo@833: ingo@833: ingo@833: protected WMS getLayer(String url, String layers, String proj, boolean x) { ingo@833: WMSParams params = new WMSParams(); ingo@833: params.setLayers(layers); ingo@833: params.setFormat("image/png"); ingo@833: params.setIsTransparent(!x); ingo@833: ingo@833: WMSOptions opts = new WMSOptions(); ingo@1302: opts.setTransitionEffect("null"); ingo@833: opts.setProjection(proj); ingo@833: opts.setSingleTile(true); ingo@833: opts.setRatio(1); ingo@1302: opts.setBuffer(0); ingo@833: ingo@833: WMS wms = new WMS(layers, url, params, opts); ingo@833: wms.setIsVisible(true); ingo@833: wms.setIsBaseLayer(x); ingo@833: ingo@833: return wms; ingo@833: } raimund@915: raimund@915: raimund@915: public void onTabSelected(TabSelectedEvent tse) { raimund@915: if (tse.getTabNum () != 0) { raimund@915: floodMap.hideBarrierLayer(); raimund@915: } raimund@915: else { raimund@915: floodMap.showBarrierLayer(); raimund@915: } raimund@915: } ingo@833: } ingo@833: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :