Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapToolbar.java @ 4215:c179cd02177d
Logout the current user
Add code to the logout button to remove the current user from the session and to
redirect the browser window to the login page.
Part of flys/issue916 (Logout: "Abmelden" Knopf mit Funktion belegen)
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Tue, 23 Oct 2012 09:59:16 +0200 |
parents | 0be65bc65cee |
children | c9dcce9448f2 |
line wrap: on
line source
package de.intevation.flys.client.client.ui.map; import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.SelectionType; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.ImgButton; 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.layout.HLayout; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.ui.ImgLink; import de.intevation.flys.client.client.ui.Toolbar; import de.intevation.flys.client.client.utils.EnableDisableCmd; import de.intevation.flys.client.shared.model.Collection; import org.gwtopenmaps.openlayers.client.Bounds; import org.gwtopenmaps.openlayers.client.Map; import org.gwtopenmaps.openlayers.client.control.DragPan; import org.gwtopenmaps.openlayers.client.control.SelectFeature; import org.gwtopenmaps.openlayers.client.control.SelectFeatureOptions; import org.gwtopenmaps.openlayers.client.control.ZoomBox; import org.gwtopenmaps.openlayers.client.event.MapZoomListener; import org.gwtopenmaps.openlayers.client.feature.VectorFeature; import org.gwtopenmaps.openlayers.client.layer.Vector; import org.gwtopenmaps.openlayers.client.util.Attributes; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class MapToolbar extends Toolbar implements MapZoomListener { protected FLYSConstants MSG = GWT.create(FLYSConstants.class); protected FloodMap floodMap; protected DragPan pan; protected ZoomBox zoomBox; protected SelectFeature selectFeature; protected GetFeatureInfo getFeatureInfo; protected Button manageThemesButton; protected Button datacageButton; protected ImgButton addWMSButton; protected ImgButton zoomToMaxButton; protected ImgButton zoomBoxButton; protected ImgButton zoomOutButton; protected ImgButton panButton; protected ImgButton selectButton; protected ImgButton infoButton; protected ImgButton removeButton; protected ImgButton elevationButton; protected ImgLink printMapLink; protected Label epsgLabel; protected DrawControl drawControl; protected MeasureControl measureControl; protected Canvas position; public MapToolbar(MapOutputTab mapTab, FloodMap floodMap) { this(mapTab, floodMap, true); } public MapToolbar(FloodMap floodMap, boolean digitize) { this(null, floodMap, digitize); } public MapToolbar( MapOutputTab mapTab, FloodMap floodMap, boolean digitize) { super(mapTab); setWidth100(); setHeight(38); setMembersMargin(10); setPadding(5); setBorder("1px solid black"); this.floodMap = floodMap; zoomToMaxButton = createMaxExtentControl(); zoomBoxButton = createZoomBoxControl(); zoomOutButton = createZoomOutControl(); panButton = createPanControl(); drawControl = createDrawControl(); selectButton = createSelectFeatureControl(); infoButton = createGetFeatureInfo(); measureControl = createMeasureControl(); position = createMousePosition(); removeButton = createRemoveFeatureControl(); elevationButton = createElevationControl(); epsgLabel = createEPSGLabel(); if (mapTab != null) { manageThemesButton = createManageThemesControl(); addMember(manageThemesButton); datacageButton = createDatacageControl(); addMember(datacageButton); addWMSButton = createWMSControl(); addMember(addWMSButton); printMapLink = createPrintMapLink(); addMember(printMapLink); } addMember(zoomToMaxButton); addMember(zoomBoxButton); addMember(zoomOutButton); addMember(panButton); if (digitize) { addMember(drawControl); addMember(selectButton); addMember(removeButton); addMember(elevationButton); } if (infoButton != null) { addMember(infoButton); } addMember(measureControl); addMember(createRightPanel()); } protected HLayout createRightPanel() { HLayout right = new HLayout(); right.setAlign(Alignment.RIGHT); right.addMember(epsgLabel); right.addMember(position); return right; } protected Map getMap() { return floodMap.getMap(); } protected void activatePan(boolean activate) { if (activate) { panButton.select(); pan.activate(); } else { panButton.deselect(); pan.deactivate(); } } protected void activateZoomBox(boolean activate) { if (activate) { zoomBoxButton.select(); zoomBox.activate(); } else { zoomBoxButton.deselect(); zoomBox.deactivate(); } } public void activateDrawFeature(boolean activate) { drawControl.activate(activate); } protected void activateSelectFeature(boolean activate) { if (activate) { selectButton.select(); selectFeature.activate(); } else { selectButton.deselect(); selectFeature.deactivate(); } } protected void activateMeasureControl(boolean activate) { measureControl.activate(activate); } protected void activateGetFeatureInfo(boolean activate) { if (infoButton == null) { return; } if (activate) { infoButton.select(); } else { infoButton.deselect(); } getFeatureInfo.activate(activate); } protected ImgButton createButton(String img, ClickHandler handler) { ImgButton btn = new ImgButton(); String baseUrl = GWT.getHostPageBaseURL(); btn.setSrc(baseUrl + img); btn.setWidth(20); btn.setHeight(20); btn.setShowDown(false); btn.setShowRollOver(false); btn.setShowRollOverIcon(false); btn.setShowDisabled(false); btn.setShowDisabledIcon(true); btn.setShowDownIcon(false); btn.setShowFocusedIcon(false); if (handler != null) { btn.addClickHandler(handler); } return btn; } protected ImgButton createToggleButton( String img, final EnableDisableCmd cmd ) { final ImgButton btn = new ImgButton(); String baseUrl = GWT.getHostPageBaseURL(); btn.setSrc(baseUrl + img); btn.setActionType(SelectionType.CHECKBOX); btn.setSize(20); btn.setShowRollOver(false); btn.setShowRollOverIcon(false); btn.setSelected(false); btn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent e) { if (btn.isSelected()) { cmd.enable(); } else { cmd.disable(); } } }); return btn; } protected ImgLink createPrintMapLink() { String baseUrl = GWT.getHostPageBaseURL(); getMap().addMapZoomListener(this); return new ImgLink( baseUrl + MSG.downloadPDF(), getPrintUrl(), 20, 20, true); } protected ImgButton createMaxExtentControl() { ImgButton zoomToMax = createButton(MSG.zoom_all(), new ClickHandler() { @Override public void onClick(ClickEvent event) { floodMap.getMap().zoomToMaxExtent(); } }); zoomToMax.setTooltip(MSG.zoomMaxExtent()); return zoomToMax; } protected ImgButton createZoomBoxControl() { zoomBox = new ZoomBox(); EnableDisableCmd cmd = new EnableDisableCmd() { @Override public void enable() { activatePan(false); activateDrawFeature(false); activateSelectFeature(false); activateMeasureControl(false); activateGetFeatureInfo(false); activateZoomBox(true); } @Override public void disable() { activateZoomBox(false); } }; ImgButton button = createToggleButton(MSG.zoom_in(), cmd); button.setTooltip(MSG.zoomIn()); Map map = getMap(); map.addControl(zoomBox); return button; } protected ImgButton createZoomOutControl() { ImgButton zoomOut = createButton(MSG.zoom_out(), new ClickHandler() { @Override public void onClick(ClickEvent event) { Map map = floodMap.getMap(); int level = map.getZoom(); if (level > 1) { map.zoomTo(level-1); } } }); zoomOut.setTooltip(MSG.zoomOut()); return zoomOut; } protected ImgButton createPanControl() { pan = new DragPan(); getMap().addControl(pan); EnableDisableCmd cmd = new EnableDisableCmd() { @Override public void enable() { activateZoomBox(false); activateDrawFeature(false); activateSelectFeature(false); activateMeasureControl(false); activateGetFeatureInfo(false); activatePan(true); } @Override public void disable() { activatePan(false); } }; final ImgButton button = createToggleButton(MSG.pan(), cmd); button.setTooltip(MSG.moveMap()); return button; } protected DrawControl createDrawControl() { EnableDisableCmd cmd = new EnableDisableCmd() { @Override public void enable() { activateZoomBox(false); activatePan(false); activateDrawFeature(true); activateSelectFeature(false); activateMeasureControl(false); } @Override public void disable() { activateDrawFeature(false); } }; return new DrawControl(getMap(), floodMap.getBarrierLayer(), cmd); } protected ImgButton createSelectFeatureControl() { SelectFeatureOptions opts = new SelectFeatureOptions(); opts.setBox(true); // VectorFeatures selected by the SelectFeature control are manually // marked with the string "mark.delete". The control to remove selected // features makes use of this string to determine if the feature should // be deleted (is marked) or not. Actually, we would like to use the // OpenLayers native mechanism to select features, but for some reason // this doesn't work here. After a feature has been selected, the layer // still has no selected features. opts.onSelect(new SelectFeature.SelectFeatureListener() { @Override public void onFeatureSelected(VectorFeature feature) { floodMap.selectFeature(feature); } }); opts.onUnSelect(new SelectFeature.UnselectFeatureListener() { @Override public void onFeatureUnselected(VectorFeature feature) { floodMap.disableFeature(feature); } }); selectFeature = new SelectFeature(floodMap.getBarrierLayer(), opts); getMap().addControl(selectFeature); EnableDisableCmd cmd = new EnableDisableCmd() { @Override public void enable() { activateDrawFeature(false); activatePan(false); activateZoomBox(false); activateSelectFeature(true); activateMeasureControl(false); } @Override public void disable() { activateSelectFeature(false); floodMap.disableFeatures(); } }; ImgButton button = createToggleButton(MSG.selectFeature(), cmd); button.setTooltip(MSG.selectObject()); return button; } protected ImgButton createRemoveFeatureControl() { ImgButton remove = createButton(MSG.removeFeature(),new ClickHandler() { @Override public void onClick(ClickEvent event) { Vector barriers = floodMap.getBarrierLayer(); VectorFeature[] features = barriers.getFeatures(); if (features == null || features.length == 0) { return; } for (int i = features.length-1; i >= 0; i--) { VectorFeature feature = features[i]; Attributes attr = feature.getAttributes(); int del = attr.getAttributeAsInt(FloodMap.MARK_SELECTED); if (del == 1) { barriers.removeFeature(feature); feature.destroy(); } } } }); remove.setTooltip(MSG.removeObject()); return remove; } protected ImgButton createElevationControl() { ImgButton btn = createButton(MSG.adjustElevation(), new ClickHandler() { @Override public void onClick(ClickEvent evt) { Vector barriers = floodMap.getBarrierLayer(); VectorFeature[] features = barriers.getFeatures(); VectorFeature feature = null; if (features == null || features.length == 0) { SC.warn(MSG.error_no_feature_selected()); return; } boolean multipleFeatures = false; for (VectorFeature f: features) { Attributes attr = f.getAttributes(); if (attr.getAttributeAsInt(FloodMap.MARK_SELECTED) == 1) { if (feature == null) { feature = f; } else { multipleFeatures = true; } } } if (feature == null) { SC.warn(MSG.error_no_feature_selected()); return; } new ElevationWindow(floodMap, feature).show(); if (multipleFeatures) { SC.warn(MSG.warning_use_first_feature()); } } }); btn.setTooltip(MSG.adjustElevationTooltip()); return btn; } protected Canvas createMousePosition() { return new MapPositionPanel(floodMap.getMapWidget()); } protected MeasureControl createMeasureControl() { EnableDisableCmd cmd = new EnableDisableCmd() { @Override public void enable() { activateDrawFeature(false); activatePan(false); activateZoomBox(false); activateSelectFeature(false); activateGetFeatureInfo(false); } @Override public void disable() { // do nothing } }; return new MeasureControl(floodMap, cmd); } protected Button createDatacageControl() { Button btn = new Button(MSG.databasket()); btn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent evt) { openDatacageWindow((MapOutputTab) getOutputTab()); } }); return btn; } protected ImgButton createGetFeatureInfo() { MapOutputTab ot = (MapOutputTab) getOutputTab(); if (ot == null) { return null; } //ThemeList tl = ot.getCollection().getThemeList("floodmap"); getFeatureInfo = new GetFeatureInfo( getMap(), ot.getThemePanel(), "gml"); EnableDisableCmd cmd = new EnableDisableCmd() { @Override public void enable() { activateDrawFeature(false); activatePan(false); activateZoomBox(false); activateSelectFeature(false); activateMeasureControl(false); activateGetFeatureInfo(true); } @Override public void disable() { activateGetFeatureInfo(false); } }; ImgButton button = createToggleButton(MSG.getFeatureInfo(), cmd); button.setTooltip(MSG.getFeatureInfoTooltip()); return button; } protected Button createManageThemesControl() { Button btn = new Button(MSG.manageThemes()); btn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { ((MapOutputTab)getOutputTab()).toogleThemePanel(); } }); return btn; } protected ImgButton createWMSControl() { final String srs = floodMap.getRiverProjection(); ImgButton add = createButton(MSG.addWMS(), new ClickHandler() { @Override public void onClick(ClickEvent event) { MapOutputTab ot = (MapOutputTab) getOutputTab(); new ExternalWMSWindow(ot, srs).start(); } }); add.setTooltip(MSG.addWMSTooltip()); return add; } protected Label createEPSGLabel() { Label epsgLabel = new Label(floodMap.getRiverProjection()); epsgLabel.setAlign(Alignment.RIGHT); epsgLabel.setWidth(75); return epsgLabel; } @Override public void onMapZoom(MapZoomListener.MapZoomEvent e) { printMapLink.setSource(getPrintUrl()); } public String getPrintUrl() { MapOutputTab ot = (MapOutputTab)getOutputTab(); Collection collection = ot.getCollection(); String uuid = collection.identifier(); String mapType = collection.getOutputModes().containsKey("floodmap") ? "floodmap" : "map"; String url = GWT.getModuleBaseURL() + "map-print?"; Map map = getMap(); Bounds bounds = map.getExtent(); if (bounds != null) { try { double minX = bounds.getLowerLeftX(); double maxX = bounds.getUpperRightX(); double minY = bounds.getLowerLeftY(); double maxY = bounds.getUpperRightY(); url += "minx=" + minX + "&"; url += "maxx=" + maxX + "&"; url += "miny=" + minY + "&"; url += "maxy=" + maxY + "&"; } catch (Exception e) { // XXX: Ignore it. bounds.getXXX() throw // exceptions when bound is invalid. :-/ } } url += "uuid=" + uuid + "&maptype=" + mapType; return url; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :