From 9ab0637690861b404ea7b66c5da32879a2194421 Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Sun, 24 Feb 2013 17:33:04 -0300 Subject: [PATCH] Fix scape name with spaces. --- .../exporter/FreemindExporter.java | 1 - .../rest/TransformerController.java | 5 ++-- .../rest/view/ImportTransformationView.java | 22 ++++++++++++++++-- .../wisemapping/rest/view/TransformView.java | 23 +++++++++++++++++-- 4 files changed, 43 insertions(+), 8 deletions(-) diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java b/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java index 58a9f4e5..5808ba09 100755 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java +++ b/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java @@ -267,7 +267,6 @@ public class FreemindExporter /* * MindmapFont format : fontName ; size ; color ; bold; italic; * eg: Verdana;10;#ffffff;bold;italic; - * */ private void addFontNode(@NotNull com.wisemapping.jaxb.freemind.Node freemindNode, com.wisemapping.jaxb.wisemap.TopicType mindmapTopic) { final String fontStyle = mindmapTopic.getFontStyle(); diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java b/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java index fb3865e7..e868781b 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/TransformerController.java @@ -131,9 +131,8 @@ public class TransformerController extends BaseController { throw new IllegalArgumentException("Unsupported export format"); } - // IE does not support spaces in the name... As usual ... - if(filename!=null){ - result.getModelMap().put("filename", filename.replaceAll(" ","_")); + if (filename != null) { + result.getModelMap().put("filename", filename); } return result; } diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/view/ImportTransformationView.java b/wise-webapp/src/main/java/com/wisemapping/rest/view/ImportTransformationView.java index 20dfc4a6..e5ff71e2 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/view/ImportTransformationView.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/view/ImportTransformationView.java @@ -31,6 +31,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.util.Map; public class ImportTransformationView extends AbstractView { @@ -53,15 +54,32 @@ public class ImportTransformationView extends AbstractView { final InputStream is = new ByteArrayInputStream(content.getBytes("UTF-8")); final Mindmap mindMap = importer.importMap("filename", "filename", is); - // Set file name... + // Set file name...:http://stackoverflow.com/questions/5325322/java-servlet-download-filename-special-characters/13359949#13359949 final String fileName = (filename != null ? filename : "map") + "." + "xwise"; - response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + setContentDisposition(request, response, fileName); // Write the conversion content ... final ServletOutputStream outputStream = response.getOutputStream(); outputStream.print(mindMap.getXmlStr()); } + private void setContentDisposition(HttpServletRequest request, HttpServletResponse response, String fileName) { + final String userAgent = request.getHeader("user-agent"); + String disposition = fileName; + boolean isInternetExplorer = (userAgent.contains("MSIE")); + try { + byte[] fileNameBytes = fileName.getBytes((isInternetExplorer) ? ("windows-1250") : ("utf-8")); + String dispositionFileName = ""; + for (byte b : fileNameBytes) { + dispositionFileName += (char) (b & 0xff); + } + disposition = "attachment; filename=\"" + dispositionFileName + "\""; + } catch (UnsupportedEncodingException ence) { + // ... handle exception ... + } + response.setHeader("Content-disposition", disposition); + } + @Override public String getContentType() { return contentType; diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java b/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java index bc9171f0..f83a866c 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/view/TransformView.java @@ -33,6 +33,7 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.transform.stream.StreamResult; +import java.io.UnsupportedEncodingException; import java.util.Map; public class TransformView extends AbstractView { @@ -67,9 +68,9 @@ public class TransformView extends AbstractView { final String contentType = exportFormat.getContentType(); response.setContentType(contentType); - // Set file name... + // Set file name...:http://stackoverflow.com/questions/5325322/java-servlet-download-filename-special-characters/13359949#13359949 final String fileName = (filename != null ? filename : "map") + "." + exportFormat.getFileExtension(); - response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + setContentDisposition(request, response, fileName); // Change image link URL. final ServletContext servletContext = request.getSession().getServletContext(); @@ -93,6 +94,24 @@ public class TransformView extends AbstractView { } } + private void setContentDisposition(HttpServletRequest request, HttpServletResponse response, String fileName) { + final String userAgent = request.getHeader("user-agent"); + boolean isInternetExplorer = (userAgent.contains("MSIE")); + + String disposition = fileName; + try { + byte[] fileNameBytes = fileName.getBytes((isInternetExplorer) ? ("windows-1250") : ("utf-8")); + String dispositionFileName = ""; + for (byte b : fileNameBytes) { + dispositionFileName += (char) (b & 0xff); + } + disposition = "attachment; filename=\"" + dispositionFileName + "\""; + } catch (UnsupportedEncodingException ence) { + // ... handle exception ... + } + response.setHeader("Content-disposition", disposition); + } + @Override public String getContentType() { return contentType;