ingo@833: package de.intevation.flys.client.client.ui; ingo@833: ingo@833: import com.google.gwt.core.client.GWT; ingo@833: import com.google.gwt.user.client.rpc.AsyncCallback; christian@5008: christian@4062: import com.smartgwt.client.types.Encoding; christian@4062: import com.smartgwt.client.types.VerticalAlignment; ingo@833: import com.smartgwt.client.util.SC; raimund@2494: import com.smartgwt.client.widgets.Button; christian@4062: import com.smartgwt.client.widgets.Canvas; christian@4062: import com.smartgwt.client.widgets.HTMLPane; raimund@2494: import com.smartgwt.client.widgets.Label; raimund@2494: import com.smartgwt.client.widgets.events.ClickEvent; raimund@2494: import com.smartgwt.client.widgets.events.ClickHandler; christian@4062: import com.smartgwt.client.widgets.events.VisibilityChangedEvent; raimund@1389: import com.smartgwt.client.widgets.events.VisibilityChangedHandler; raimund@2494: import com.smartgwt.client.widgets.form.DynamicForm; raimund@2494: import com.smartgwt.client.widgets.form.fields.SelectItem; christian@4062: import com.smartgwt.client.widgets.form.fields.UploadItem; christian@4062: import com.smartgwt.client.widgets.layout.VLayout; christian@4062: import com.smartgwt.client.widgets.tab.events.TabSelectedEvent; christian@4062: import com.smartgwt.client.widgets.tab.events.TabSelectedHandler; ingo@833: christian@4062: import de.intevation.flys.client.client.Config; christian@4801: import de.intevation.flys.client.client.FLYS; christian@4801: import de.intevation.flys.client.client.FLYSConstants; christian@4062: import de.intevation.flys.client.client.services.MapInfoService; christian@4062: import de.intevation.flys.client.client.services.MapInfoServiceAsync; christian@4062: import de.intevation.flys.client.client.ui.map.FloodMap; christian@4062: import de.intevation.flys.client.client.ui.map.MapPanel; 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: christian@4062: import java.util.LinkedHashMap; christian@4062: import java.util.List; christian@4062: christian@4062: import org.gwtopenmaps.openlayers.client.Map; christian@4062: import org.gwtopenmaps.openlayers.client.feature.VectorFeature; christian@4062: import org.gwtopenmaps.openlayers.client.format.GeoJSON; christian@4062: import org.gwtopenmaps.openlayers.client.layer.WMS; christian@4062: import org.gwtopenmaps.openlayers.client.layer.WMSOptions; christian@4062: import org.gwtopenmaps.openlayers.client.layer.WMSParams; ingo@833: ingo@833: raimund@915: public class DigitizePanel raimund@915: extends SelectProvider raimund@1389: implements TabSelectedHandler, VisibilityChangedHandler { ingo@833: christian@4131: private static final long serialVersionUID = 3529775660871273314L; christian@4131: ingo@833: protected MapInfoServiceAsync mapInfo = GWT.create(MapInfoService.class); ingo@833: ingo@833: protected FloodMap floodMap; ingo@833: raimund@1389: protected MapPanel mapPanel; ingo@833: ingo@833: public static final String UESK_BARRIERS = "uesk.barriers"; ingo@833: christian@4801: /** The message class that provides i18n strings. */ christian@4801: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); 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: raimund@1389: helperContainer.addVisibilityChangedHandler(this); raimund@1389: 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 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"); raimund@1425: mapInfo.getMapInfo(locale, river, new AsyncCallback() { christian@4062: @Override ingo@833: public void onFailure(Throwable caught) { ingo@833: String msg = caught.getMessage(); ingo@833: ingo@833: GWT.log("Error while fetching MapInfo: " + msg); christian@4801: SC.warn(FLYS.getExceptionString(MSG, caught)); ingo@833: } ingo@833: christian@4062: @Override 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: raimund@2494: /** raimund@2494: * This method creates the content of the widget. raimund@2494: * raimund@2494: * @param data The {@link DataList} object. raimund@2494: * raimund@2494: * @return a combobox. raimund@2494: */ christian@4062: @Override raimund@2494: protected Canvas createWidget(DataList data) { raimund@2494: GWT.log("DigitizePanel - createWidget()"); raimund@2494: raimund@2494: VLayout layout = new VLayout(); raimund@2494: layout.setAlign(VerticalAlignment.TOP); raimund@2494: layout.setHeight(25); raimund@2494: christian@4131: LinkedHashMap initial = new LinkedHashMap(); raimund@2494: raimund@2494: form = new DynamicForm(); raimund@2494: raimund@2494: int size = data.size(); raimund@2494: raimund@2494: for (int i = 0; i < size; i++) { raimund@2494: Data d = data.get(i); raimund@2494: raimund@2494: Label label = new Label(d.getDescription()); raimund@2494: label.setValign(VerticalAlignment.TOP); raimund@2494: label.setHeight(20); raimund@2494: label.setWidth(400); raimund@2494: raimund@2494: SelectItem combobox = new SelectItem(d.getLabel()); raimund@2494: combobox.setWidth(250); raimund@2494: raimund@2494: LinkedHashMap it = new LinkedHashMap(); raimund@2494: raimund@2494: boolean defaultSet = false; raimund@2494: boolean first = true; raimund@2494: raimund@2494: DataItem def = d.getDefault(); raimund@2494: String defValue = def != null ? def.getStringValue() : null; raimund@2494: raimund@2494: if (defValue != null && defValue.length() > 0) { raimund@2494: initial.put(d.getLabel(), def.getStringValue()); raimund@2494: defaultSet = true; raimund@2494: } raimund@2494: raimund@2494: for (DataItem item: d.getItems()) { raimund@2494: if (!defaultSet && first) { raimund@2494: initial.put(d.getLabel(), item.getStringValue()); raimund@2494: first = false; raimund@2494: } raimund@2494: raimund@2494: it.put(item.getStringValue(), item.getLabel()); raimund@2494: } raimund@2494: raimund@2494: label.setWidth(50); raimund@2494: combobox.setValueMap(it); raimund@2494: combobox.setShowTitle(false); raimund@2494: form.setItems(combobox); raimund@2494: christian@5008: HTMLPane uploadTargetFrame = new HTMLPane(); christian@5008: uploadTargetFrame.setWidth("200px"); christian@5008: uploadTargetFrame.setHeight("50px"); christian@5008: uploadTargetFrame.setContents( christian@5008: ""); christian@5008: uploadTargetFrame.setBorder("0px"); christian@5008: uploadTargetFrame.setScrollbarSize(0); raimund@2494: raimund@2494: final DynamicForm uploadForm = new DynamicForm(); raimund@2494: uploadForm.setAction("flys/fileupload?uuid=" + artifact.getUuid()); raimund@2494: uploadForm.setTarget("uploadTarget"); raimund@2494: uploadForm.setEncoding(Encoding.MULTIPART); raimund@2494: Label uploadLabel = new Label(MSG.shape_file_upload()); raimund@2494: uploadLabel.setHeight(20); raimund@2494: UploadItem uploadItem = new UploadItem(); raimund@2494: uploadItem.setShowTitle(false); raimund@2494: uploadForm.setFields(uploadItem); raimund@2494: Button submit = new Button(MSG.upload_file()); raimund@2494: submit.addClickHandler(new ClickHandler() { christian@4062: @Override raimund@2494: public void onClick(ClickEvent e) { raimund@2494: uploadForm.submitForm(); raimund@2494: } raimund@2494: }); christian@5008: raimund@2494: layout.addMember(label); raimund@2494: layout.addMember(form); raimund@2494: layout.addMember(uploadLabel); raimund@2494: layout.addMember(uploadForm); raimund@2494: layout.addMember(submit); christian@4574: layout.addMember(getNextButton()); christian@5008: christian@5008: layout.setMembersMargin(10); christian@5008: layout.addMember(uploadTargetFrame); raimund@2494: } raimund@2494: raimund@2494: form.setValues(initial); raimund@2494: raimund@2494: layout.setAlign(VerticalAlignment.TOP); raimund@2494: raimund@2494: return layout; raimund@2494: } raimund@2494: raimund@2494: ingo@833: @Override ingo@833: protected Data[] getData() { ingo@833: Data[] data = super.getData(); ingo@833: Data[] total = new Data[2]; ingo@833: christian@4062: if (floodMap != null) { christian@4062: DataItem item = new DefaultDataItem( christian@4062: UESK_BARRIERS, UESK_BARRIERS, floodMap.getFeaturesAsGeoJSON()); christian@4062: total[0] = data[0]; christian@4062: total[1] = new DefaultData( christian@4062: UESK_BARRIERS, null, null, new DataItem[] { item }); christian@4062: } christian@4062: else { christian@4062: // Happens when OpenLayers is missing christian@4062: GWT.log("floodMap is null -> OpenLayers missing?"); christian@4062: } ingo@833: ingo@833: return total; ingo@833: } ingo@833: ingo@833: ingo@833: public void createMapWidget(MapInfo mapInfo, String geojson) { raimund@1389: 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: raimund@915: parameterList.registerCollectionViewTabHandler(this); raimund@915: ingo@833: WMS axis = getLayer( christian@4632: mapInfo.getWmsUrl(), mapInfo.getWmsLayers(), ingo@833: mapInfo.getProjection(), false); ingo@833: WMS back = getLayer( ingo@833: mapInfo.getBackgroundWmsUrl(), mapInfo.getBackgroundWmsLayers(), ingo@833: mapInfo.getProjection(), false); ingo@833: christian@4553: map.addLayer(back); ingo@833: map.addLayer(axis); 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@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: christian@4062: @Override 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: } raimund@1389: christian@4062: @Override raimund@1389: public void onVisibilityChanged(VisibilityChangedEvent vce) { raimund@1389: if (!vce.getIsVisible()) { raimund@1389: floodMap.hideBarrierLayer(); raimund@1389: mapPanel.getMapToolbar().activateDrawFeature(false); raimund@1389: } raimund@1389: else { raimund@1389: floodMap.showBarrierLayer(); raimund@1389: } raimund@1389: } ingo@833: } ingo@833: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :