Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java @ 4573:b87073a05f9d
flys-client: Patch to render combobox options as clickable links.
The way of passing data arguments to the links and further to
the Artifact feeding service is somewhat hacked and should be
refactored (later...).
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Tue, 27 Nov 2012 12:50:10 +0100 |
parents | fac54b8470d4 |
children | 32a4651eef93 |
line wrap: on
line source
package de.intevation.flys.client.client.ui; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Encoding; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.VisibilityChangedEvent; import com.smartgwt.client.widgets.events.VisibilityChangedHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.UploadItem; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; import de.intevation.flys.client.client.Config; import de.intevation.flys.client.client.services.MapInfoService; import de.intevation.flys.client.client.services.MapInfoServiceAsync; import de.intevation.flys.client.client.ui.map.FloodMap; import de.intevation.flys.client.client.ui.map.MapPanel; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; import de.intevation.flys.client.shared.model.MapInfo; import java.util.LinkedHashMap; import java.util.List; import org.gwtopenmaps.openlayers.client.Map; import org.gwtopenmaps.openlayers.client.feature.VectorFeature; import org.gwtopenmaps.openlayers.client.format.GeoJSON; import org.gwtopenmaps.openlayers.client.layer.WMS; import org.gwtopenmaps.openlayers.client.layer.WMSOptions; import org.gwtopenmaps.openlayers.client.layer.WMSParams; public class DigitizePanel extends SelectProvider implements TabSelectedHandler, VisibilityChangedHandler { private static final long serialVersionUID = 3529775660871273314L; protected MapInfoServiceAsync mapInfo = GWT.create(MapInfoService.class); protected FloodMap floodMap; protected MapPanel mapPanel; public static final String UESK_BARRIERS = "uesk.barriers"; public DigitizePanel() { } @Override public Canvas create(DataList list) { List<Data> data = list.getAll(); helperContainer.addVisibilityChangedHandler(this); Data barriers = null; for (int i = data.size()-1; i >= 0; i--) { Data d = data.get(i); if (d.getLabel().equals(UESK_BARRIERS)) { barriers = d; data.remove(d); } } DataList clone = (DataList) list.clone(); List<Data> all = clone.getAll(); all.remove(UESK_BARRIERS); Canvas selectBox = super.create(clone); final Config cfg = Config.getInstance(); final String locale = cfg.getLocale(); DataItem[] obj = barriers.getItems(); final String[] geojson = new String[1]; for (DataItem item: obj) { if (item.getLabel().equals(UESK_BARRIERS)) { geojson[0] = item.getStringValue(); break; } } String river = getDataValue("state.winfo.river", "river"); mapInfo.getMapInfo(locale, river, new AsyncCallback<MapInfo>() { @Override public void onFailure(Throwable caught) { String msg = caught.getMessage(); GWT.log("Error while fetching MapInfo: " + msg); SC.warn(MSG.getString(msg)); } @Override public void onSuccess(MapInfo info) { createMapWidget(info, geojson[0]); } }); return selectBox; } /** * This method creates the content of the widget. * * @param data The {@link DataList} object. * * @return a combobox. */ @Override protected Canvas createWidget(DataList data) { GWT.log("DigitizePanel - createWidget()"); VLayout layout = new VLayout(); layout.setAlign(VerticalAlignment.TOP); layout.setHeight(25); LinkedHashMap<String, String> initial = new LinkedHashMap<String, String>(); form = new DynamicForm(); int size = data.size(); for (int i = 0; i < size; i++) { Data d = data.get(i); Label label = new Label(d.getDescription()); label.setValign(VerticalAlignment.TOP); label.setHeight(20); label.setWidth(400); SelectItem combobox = new SelectItem(d.getLabel()); combobox.setWidth(250); LinkedHashMap<String, String> it = new LinkedHashMap<String, String>(); boolean defaultSet = false; boolean first = true; DataItem def = d.getDefault(); String defValue = def != null ? def.getStringValue() : null; if (defValue != null && defValue.length() > 0) { initial.put(d.getLabel(), def.getStringValue()); defaultSet = true; } // I was here. for (DataItem item: d.getItems()) { if (!defaultSet && first) { initial.put(d.getLabel(), item.getStringValue()); first = false; } it.put(item.getStringValue(), item.getLabel()); } label.setWidth(50); combobox.setValueMap(it); combobox.setShowTitle(false); form.setItems(combobox); HTMLPane frame = new HTMLPane(); frame.setWidth("1px"); frame.setHeight("1px"); frame.setContents("<iframe id='uploadTarget' name='uploadTarget'></iframe>"); final DynamicForm uploadForm = new DynamicForm(); uploadForm.setAction("flys/fileupload?uuid=" + artifact.getUuid()); uploadForm.setTarget("uploadTarget"); uploadForm.setEncoding(Encoding.MULTIPART); Label uploadLabel = new Label(MSG.shape_file_upload()); uploadLabel.setHeight(20); UploadItem uploadItem = new UploadItem(); uploadItem.setShowTitle(false); uploadForm.setFields(uploadItem); Button submit = new Button(MSG.upload_file()); submit.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent e) { uploadForm.submitForm(); } }); layout.addMember(frame); layout.addMember(label); layout.addMember(form); layout.addMember(uploadLabel); layout.addMember(uploadForm); layout.addMember(submit); } form.setValues(initial); layout.setAlign(VerticalAlignment.TOP); return layout; } @Override protected Data[] getData() { Data[] data = super.getData(); Data[] total = new Data[2]; if (floodMap != null) { DataItem item = new DefaultDataItem( UESK_BARRIERS, UESK_BARRIERS, floodMap.getFeaturesAsGeoJSON()); total[0] = data[0]; total[1] = new DefaultData( UESK_BARRIERS, null, null, new DataItem[] { item }); } else { // Happens when OpenLayers is missing GWT.log("floodMap is null -> OpenLayers missing?"); } return total; } public void createMapWidget(MapInfo mapInfo, String geojson) { mapPanel = new MapPanel(mapInfo, true); floodMap = mapPanel.getFloodMap(); Map map = floodMap.getMap(); helperContainer.addMember(mapPanel); parameterList.registerCollectionViewTabHandler(this); WMS axis = getLayer( mapInfo.getWmsUrl(), "FLYS-Map", // FIXME: Make layer name configurable mapInfo.getProjection(), false); WMS back = getLayer( mapInfo.getBackgroundWmsUrl(), mapInfo.getBackgroundWmsLayers(), mapInfo.getProjection(), false); map.addLayer(back); map.addLayer(axis); if (geojson != null && geojson.length() > 0) { VectorFeature[] features = new GeoJSON().read(geojson); floodMap.getBarrierLayer().addFeatures(features); } map.zoomToMaxExtent(); } protected WMS getLayer(String url, String layers, String proj, boolean x) { WMSParams params = new WMSParams(); params.setLayers(layers); params.setFormat("image/png"); params.setIsTransparent(!x); WMSOptions opts = new WMSOptions(); opts.setProjection(proj); opts.setSingleTile(true); opts.setRatio(1); opts.setBuffer(0); WMS wms = new WMS(layers, url, params, opts); wms.setIsVisible(true); wms.setIsBaseLayer(x); return wms; } @Override public void onTabSelected(TabSelectedEvent tse) { if (tse.getTabNum () != 0) { floodMap.hideBarrierLayer(); } else { floodMap.showBarrierLayer(); } } @Override public void onVisibilityChanged(VisibilityChangedEvent vce) { if (!vce.getIsVisible()) { floodMap.hideBarrierLayer(); mapPanel.getMapToolbar().activateDrawFeature(false); } else { floodMap.showBarrierLayer(); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :