# HG changeset patch # User Ingo Weinzierl # Date 1318872807 0 # Node ID 51d4b51a51ed9ba54343da3cfb5241f048cd4a10 # Parent 0d3d3860beb5e3088c1588b8bd3f2c635c74d28e Added icons to export chart as PNG, PDF and SVG to the ChartToolbar. flys-client/trunk@2998 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/ChangeLog --- a/flys-client/ChangeLog Mon Oct 17 17:28:24 2011 +0000 +++ b/flys-client/ChangeLog Mon Oct 17 17:33:27 2011 +0000 @@ -1,3 +1,24 @@ +2011-10-17 Ingo Weinzierl + + * src/main/java/de/intevation/flys/client/server/ChartOutputServiceImpl.java: + Added support for chart exports. If the Http parameter "export=true" is + set, the header of the Http request is modified to trigger a download. + Currently, PNG, SVG and PDF export is supported. + + * src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java: + Added a method that returns the URL for a chart export. + + * src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java: + Added download icons for png, pdf and svg. + + * src/main/java/de/intevation/flys/client/client/FLYSImages.java: Added + images for png/pdf/svg downloads. + + * src/main/java/de/intevation/flys/client/client/images/downloadPNG.png, + src/main/java/de/intevation/flys/client/client/images/downloadPDF.png, + src/main/java/de/intevation/flys/client/client/images/downloadSVG.png: + New. Icons for png/pdf/svg export of charts. + 2011-10-17 Ingo Weinzierl * src/main/java/de/intevation/flys/client/client/ui/ImgLink.java: New. diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/client/FLYSImages.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSImages.java Mon Oct 17 17:28:24 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSImages.java Mon Oct 17 17:33:27 2011 +0000 @@ -28,4 +28,13 @@ @Source("images/loading.gif") ImageResource loading(); + + @Source("images/downloadPNG.png") + ImageResource downloadPNG(); + + @Source("images/downloadPDF.png") + ImageResource downloadPDF(); + + @Source("images/downloadSVG.png") + ImageResource downloadSVG(); } diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/client/images/downloadPDF.png Binary file flys-client/src/main/java/de/intevation/flys/client/client/images/downloadPDF.png has changed diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/client/images/downloadPNG.png Binary file flys-client/src/main/java/de/intevation/flys/client/client/images/downloadPNG.png has changed diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/client/images/downloadSVG.png Binary file flys-client/src/main/java/de/intevation/flys/client/client/images/downloadSVG.png has changed diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java Mon Oct 17 17:28:24 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java Mon Oct 17 17:33:27 2011 +0000 @@ -593,6 +593,15 @@ } + public String getExportUrl(int width, int height, String format) { + String url = getImgUrl(width, height); + url += "&format=" + format; + url += "&export=true"; + + return url; + } + + public Map getChartAttributes() { Map attr = new HashMap(); diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java Mon Oct 17 17:28:24 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java Mon Oct 17 17:33:27 2011 +0000 @@ -3,6 +3,7 @@ import com.google.gwt.core.client.GWT; 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.layout.HLayout; @@ -15,8 +16,10 @@ import de.intevation.flys.client.shared.model.User; import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.client.FLYSImages; import de.intevation.flys.client.client.ui.CollectionView; import de.intevation.flys.client.client.ui.DatacageWindow; +import de.intevation.flys.client.client.ui.ImgLink; /** @@ -26,6 +29,8 @@ protected static FLYSConstants MSG = GWT.create(FLYSConstants.class); + protected static FLYSImages IMG = GWT.create(FLYSImages.class); + public static final int PANEL_HEIGHT = 30; @@ -37,6 +42,12 @@ protected Button datacage; + protected Canvas downloadPNG; + + protected Canvas downloadPDF; + + protected Canvas downloadSVG; + protected MousePositionPanel position; protected ZoomboxControl zoombox; @@ -73,6 +84,26 @@ }); String baseUrl = GWT.getHostPageBaseURL(); + + String url = "http://www.heise.de"; + downloadPNG = new ImgLink( + IMG.downloadPNG().getURL(), + chartTab.getExportUrl(1280, 1024, "png"), + 20, + 20); + + downloadPDF = new ImgLink( + IMG.downloadPDF().getURL(), + chartTab.getExportUrl(1280, 1024, "pdf"), + 20, + 20); + + downloadSVG = new ImgLink( + IMG.downloadSVG().getURL(), + chartTab.getExportUrl(1280, 1024, "svg"), + 20, + 20); + zoomToMaxExtent.setSrc(baseUrl + MSG.zoom_all()); zoomToMaxExtent.setWidth(20); zoomToMaxExtent.setHeight(20); @@ -163,6 +194,9 @@ position.setWidth("200px"); addMember(datacage); + addMember(downloadPNG); + addMember(downloadPDF); + addMember(downloadSVG); addMember(zoomToMaxExtent); addMember(historyBack); addMember(zoomOut); diff -r 0d3d3860beb5 -r 51d4b51a51ed flys-client/src/main/java/de/intevation/flys/client/server/ChartOutputServiceImpl.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/ChartOutputServiceImpl.java Mon Oct 17 17:28:24 2011 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/ChartOutputServiceImpl.java Mon Oct 17 17:33:27 2011 +0000 @@ -38,6 +38,8 @@ String type = req.getParameter("type"); String locale = req.getParameter("locale"); + prepareHeader(req, resp); + Document request = ClientProtocolUtils.newOutCollectionDocument( uuid, type, type, ChartServiceHelper.getChartAttributes(prepareChartAttributes(req))); @@ -70,8 +72,60 @@ attr.put("maxx", req.getParameter("maxx")); attr.put("miny", req.getParameter("miny")); attr.put("maxy", req.getParameter("maxy")); + attr.put("format", req.getParameter("format")); return attr; } + + + protected void prepareHeader( + HttpServletRequest req, + HttpServletResponse resp + ) { + String export = req.getParameter("export"); + + if (export != null && export.equals("true")) { + String format = req.getParameter("format"); + + if (format == null || format.length() == 0) { + format = "png"; + } + + String fn = "chart_export" + getFileExtension(format); + + resp.setHeader("Content-Disposition", "attachment;filename=" + fn); + resp.setHeader("Content-Type", getMimeType(format)); + } + } + + + protected String getFileExtension(String format) { + if (format.equals("png")) { + return ".png"; + } + else if (format.equals("pdf")) { + return ".pdf"; + } + else if (format.equals("svg")) { + return ".svg"; + } + + return ".png"; + } + + + protected String getMimeType(String format) { + if (format.equals("png")) { + return "image/png"; + } + else if (format.equals("pdf")) { + return "application/pdf"; + } + else if (format.equals("svg")) { + return "svg+xml"; + } + + return "image/png"; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :