From be942c452f93b43079c048dda066073b41304d63 Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Mon, 4 Apr 2011 16:22:52 -0300 Subject: [PATCH] Minor refactor. SVG export should not depend on maps. --- .../controller/ExportController.java | 12 ++++--- ...{SvgExporter.java => ExporterFactory.java} | 29 ++++++++++++----- .../{freemind => }/FreemindExporter.java | 2 +- .../java/com/wisemapping/model/MindMap.java | 31 ------------------- .../wisemapping/test/export/ExportTest.java | 7 ++--- .../wisemapping/test/freemind/ExportTest.java | 2 +- .../test/freemind/ImportExportTest.java | 2 +- 7 files changed, 35 insertions(+), 50 deletions(-) rename wise-webapp/src/main/java/com/wisemapping/exporter/{SvgExporter.java => ExporterFactory.java} (88%) rename wise-webapp/src/main/java/com/wisemapping/exporter/{freemind => }/FreemindExporter.java (99%) diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java b/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java index 572a2cce..2394409a 100644 --- a/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java +++ b/wise-webapp/src/main/java/com/wisemapping/controller/ExportController.java @@ -19,6 +19,7 @@ package com.wisemapping.controller; import com.wisemapping.exporter.ExportFormat; +import com.wisemapping.exporter.ExporterFactory; import com.wisemapping.model.MindMap; import com.wisemapping.service.MindmapService; import com.wisemapping.view.MindMapBean; @@ -60,6 +61,11 @@ public class ExportController extends BaseMultiActionController { int mindmapId = Integer.parseInt(mapIdStr); final String mapSvg = request.getParameter(MAP_SVG_PARAMETER); + logger.debug("SVG Map to export:"+mapSvg); + if(mapSvg==null || mapSvg.isEmpty()) + { + throw new IllegalArgumentException("SVG map could not be null"); + } String formatStr = request.getParameter(EXPORT_FORMAT_PARAMETER); if (IMG_EXPORT_FORMAT.endsWith(formatStr)) { @@ -96,7 +102,7 @@ public class ExportController extends BaseMultiActionController { // Write content ... final ServletOutputStream outputStream = response.getOutputStream(); - mindMap.export(properties, outputStream, mapSvg); + ExporterFactory.export(properties, mindMap, outputStream, mapSvg); } catch (Throwable e) { @@ -141,9 +147,7 @@ public class ExportController extends BaseMultiActionController { final String mapIdStr = request.getParameter(MAP_ID_PARAMETER); final String mapSvg = request.getParameter(MAP_SVG_PARAMETER); - int mindmapId = Integer.parseInt(mapIdStr); final MindmapService service = getMindmapService(); - final MindMap mindMap = service.getMindmapById(mindmapId); //Image Format ExportFormat imageFormat = ExportFormat.PNG; @@ -160,7 +164,7 @@ public class ExportController extends BaseMultiActionController { // Write content ... final ServletOutputStream outputStream = response.getOutputStream(); - mindMap.export(imageProperties, outputStream, mapSvg); + ExporterFactory.export(imageProperties, null, outputStream, mapSvg); } catch (Throwable e) { diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/SvgExporter.java b/wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java similarity index 88% rename from wise-webapp/src/main/java/com/wisemapping/exporter/SvgExporter.java rename to wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java index 823e4d18..37269884 100644 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/SvgExporter.java +++ b/wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java @@ -18,7 +18,6 @@ package com.wisemapping.exporter; -import com.wisemapping.exporter.freemind.FreemindExporter; import com.wisemapping.model.MindMap; import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.TranscoderException; @@ -28,6 +27,8 @@ import org.apache.batik.transcoder.image.ImageTranscoder; import org.apache.batik.transcoder.image.JPEGTranscoder; import org.apache.batik.transcoder.image.PNGTranscoder; import org.apache.fop.svg.PDFTranscoder; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.w3c.dom.*; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -44,15 +45,15 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.*; -public class SvgExporter { +public class ExporterFactory { private static final String GROUP_NODE_NAME = "g"; private static final String RECT_NODE_NAME = "rect"; private static final String IMAGE_NODE_NAME = "image"; - private SvgExporter() { + private ExporterFactory() { } - public static void export(ExportProperties properties, MindMap map, OutputStream output, String mapSvg) throws TranscoderException, IOException, ParserConfigurationException, SAXException, XMLStreamException, TransformerException, JAXBException, ExportException { + public static void export(@NotNull ExportProperties properties, @Nullable MindMap map, @NotNull OutputStream output, @NotNull String mapSvg) throws TranscoderException, IOException, ParserConfigurationException, SAXException, XMLStreamException, TransformerException, JAXBException, ExportException { final ExportFormat format = properties.getFormat(); final String imgPath = properties.getBaseImgPath(); @@ -66,7 +67,7 @@ public class SvgExporter { transcoder.addTranscodingHint(ImageTranscoder.KEY_WIDTH, size.getWidth()); // Create the transcoder input. - char[] xml = map.generateSvgXml(mapSvg); + char[] xml = convertBrowserSvgToXmlSvg(mapSvg); xml = normalizeSvg(xml, imgPath); final CharArrayReader is = new CharArrayReader(xml); TranscoderInput input = new TranscoderInput(is); @@ -87,7 +88,7 @@ public class SvgExporter { transcoder.addTranscodingHint(ImageTranscoder.KEY_WIDTH, size.getWidth()); // Create the transcoder input. - final char[] xml = map.generateSvgXml(mapSvg); + final char[] xml = convertBrowserSvgToXmlSvg(mapSvg); char[] svgXml = normalizeSvg(xml, imgPath); final CharArrayReader is = new CharArrayReader(svgXml); TranscoderInput input = new TranscoderInput(is); @@ -102,7 +103,7 @@ public class SvgExporter { final Transcoder transcoder = new PDFTranscoder(); // Create the transcoder input. - final char[] xml = map.generateSvgXml(mapSvg); + final char[] xml = convertBrowserSvgToXmlSvg(mapSvg); char[] svgXml = normalizeSvg(xml, imgPath); final CharArrayReader is = new CharArrayReader(svgXml); TranscoderInput input = new TranscoderInput(is); @@ -113,7 +114,7 @@ public class SvgExporter { break; } case SVG: { - final char[] xml = map.generateSvgXml(mapSvg); + final char[] xml = convertBrowserSvgToXmlSvg(mapSvg); char[] svgXml = normalizeSvg(xml, imgPath); output.write(new String(svgXml).getBytes("UTF-8")); break; @@ -277,4 +278,16 @@ public class SvgExporter { final String transate = value.substring(initTranslate + 1, endTranslate); return transate.split(","); } + + @NotNull + static private char[] convertBrowserSvgToXmlSvg(@NotNull String mapSvg) + throws IOException, JAXBException { + String result = "\n" + mapSvg; + + // Add namespace... + result = result.replaceFirst("]+)>", ""); - - return result.toCharArray(); - } - public String getDescription() { return description; } @@ -245,10 +218,6 @@ public class MindMap { this.creationTime = creationTime; } - public void export(final ExportProperties properties, OutputStream output, String mapSvg) throws JAXBException, TranscoderException, TransformerException, IOException, ParserConfigurationException, ExportException, SAXException, XMLStreamException { - SvgExporter.export(properties, this, output, mapSvg); - } - public void setOwner(User owner) { this.owner = owner; } diff --git a/wise-webapp/src/test/java/com/wisemapping/test/export/ExportTest.java b/wise-webapp/src/test/java/com/wisemapping/test/export/ExportTest.java index 0a6993a7..0d074cd3 100644 --- a/wise-webapp/src/test/java/com/wisemapping/test/export/ExportTest.java +++ b/wise-webapp/src/test/java/com/wisemapping/test/export/ExportTest.java @@ -3,6 +3,7 @@ package com.wisemapping.test.export; import com.wisemapping.exporter.ExportException; import com.wisemapping.exporter.ExportFormat; import com.wisemapping.exporter.ExportProperties; +import com.wisemapping.exporter.ExporterFactory; import com.wisemapping.importer.ImporterException; import com.wisemapping.model.MindMap; @@ -45,12 +46,10 @@ public class ExportTest { properties.setBaseImagePath(baseUrl); // Write content ... - MindMap mindMap = new MindMap(); - if(pngFile.exists()){ // Export mile content ... final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - mindMap.export(properties, bos, svgXml); + ExporterFactory.export(imageProperties, null, bos, svgXml); // Load rec file co final FileInputStream fis = new FileInputStream(pngFile); @@ -82,7 +81,7 @@ public class ExportTest { } else{ OutputStream outputStream = new FileOutputStream(pngFile, false); - mindMap.export(properties, outputStream, svgXml); + ExporterFactory.export(imageProperties, null, outputStream, svgXml); outputStream.close(); } } diff --git a/wise-webapp/src/test/java/com/wisemapping/test/freemind/ExportTest.java b/wise-webapp/src/test/java/com/wisemapping/test/freemind/ExportTest.java index cca958e9..3b9d2bb5 100644 --- a/wise-webapp/src/test/java/com/wisemapping/test/freemind/ExportTest.java +++ b/wise-webapp/src/test/java/com/wisemapping/test/freemind/ExportTest.java @@ -1,7 +1,7 @@ package com.wisemapping.test.freemind; import com.wisemapping.exporter.ExportException; -import com.wisemapping.exporter.freemind.FreemindExporter; +import com.wisemapping.exporter.FreemindExporter; import com.wisemapping.importer.ImporterException; import com.wisemapping.model.MindMap; diff --git a/wise-webapp/src/test/java/com/wisemapping/test/freemind/ImportExportTest.java b/wise-webapp/src/test/java/com/wisemapping/test/freemind/ImportExportTest.java index 34cb5ed8..69d6af94 100644 --- a/wise-webapp/src/test/java/com/wisemapping/test/freemind/ImportExportTest.java +++ b/wise-webapp/src/test/java/com/wisemapping/test/freemind/ImportExportTest.java @@ -1,7 +1,7 @@ package com.wisemapping.test.freemind; import com.wisemapping.exporter.ExportException; -import com.wisemapping.exporter.freemind.FreemindExporter; +import com.wisemapping.exporter.FreemindExporter; import com.wisemapping.importer.ImportFormat; import com.wisemapping.importer.Importer; import com.wisemapping.importer.ImporterException;