From 307d8ea2b87622681e9b65f95df72afc49dd1ea1 Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Tue, 4 Jan 2022 13:07:05 -0800 Subject: [PATCH] Remove JAXB, now supporting any version of JAVA --- pom.xml | 5 - wise-webapp/pom.xml | 47 -- .../wisemapping/exporter/ExportException.java | 28 - .../com/wisemapping/exporter/Exporter.java | 29 - .../exporter/FreemindExporter.java | 375 ----------- .../exporter/VerticalPositionComparator.java | 26 - .../wisemapping/importer/ImportFormat.java | 23 - .../com/wisemapping/importer/Importer.java | 28 - .../importer/ImporterException.java | 35 - .../wisemapping/importer/ImporterFactory.java | 55 -- .../importer/JaxbCDATAMarshaller.java | 156 ----- .../wisemapping/importer/VersionNumber.java | 122 ---- .../importer/freemind/FreemindConstant.java | 35 - .../freemind/FreemindIconConverter.java | 121 ---- .../importer/freemind/FreemindImporter.java | 616 ------------------ .../wisemapping/rest/MindmapController.java | 25 - .../rest/view/ImportTransformationView.java | 88 --- .../java/com/wisemapping/util/JAXBUtils.java | 84 --- .../test/export/ExportFreemindTest.java | 74 --- .../importer/FreeMindImportExportTest.java | 99 --- .../test/importer/VersionComparisonTest.java | 29 - 21 files changed, 2100 deletions(-) delete mode 100755 wise-webapp/src/main/java/com/wisemapping/exporter/ExportException.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/exporter/Exporter.java delete mode 100644 wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java delete mode 100644 wise-webapp/src/main/java/com/wisemapping/exporter/VerticalPositionComparator.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/importer/ImportFormat.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/importer/Importer.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/importer/ImporterException.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/importer/ImporterFactory.java delete mode 100644 wise-webapp/src/main/java/com/wisemapping/importer/JaxbCDATAMarshaller.java delete mode 100644 wise-webapp/src/main/java/com/wisemapping/importer/VersionNumber.java delete mode 100644 wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindConstant.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindIconConverter.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindImporter.java delete mode 100644 wise-webapp/src/main/java/com/wisemapping/rest/view/ImportTransformationView.java delete mode 100755 wise-webapp/src/main/java/com/wisemapping/util/JAXBUtils.java delete mode 100644 wise-webapp/src/test/java/com/wisemapping/test/export/ExportFreemindTest.java delete mode 100644 wise-webapp/src/test/java/com/wisemapping/test/importer/FreeMindImportExportTest.java delete mode 100644 wise-webapp/src/test/java/com/wisemapping/test/importer/VersionComparisonTest.java diff --git a/pom.xml b/pom.xml index 246b193a..f67ac945 100644 --- a/pom.xml +++ b/pom.xml @@ -79,11 +79,6 @@ maven-dependency-plugin 2.10 - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - 0.14.0 - net.alchim31.maven yuicompressor-maven-plugin diff --git a/wise-webapp/pom.xml b/wise-webapp/pom.xml index 54abb35a..8ad3d37c 100644 --- a/wise-webapp/pom.xml +++ b/wise-webapp/pom.xml @@ -258,11 +258,6 @@ 2.10.0 compile - - javax.xml.bind - jaxb-api - 2.3.1 - org.jsoup @@ -512,48 +507,6 @@ - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - mindmap-generate - - generate - - - src/main/resources/ - - mindmap.xsd - - src/main/resources/ - - mindmap.xjb - - com.wisemapping.jaxb.wisemap - ${project.build.directory}/generated-sources/xjc1 - - - - freemind-generate - - generate - - - src/main/resources/ - - freemind_0.9.0.xsd - - src/main/resources/ - - freemind_0.9.0.xjb - - com.wisemapping.jaxb.freemind - ${project.build.directory}/generated-sources/xjc2 - - - - org.apache.maven.plugins maven-failsafe-plugin diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/ExportException.java b/wise-webapp/src/main/java/com/wisemapping/exporter/ExportException.java deleted file mode 100755 index 9ae466da..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/ExportException.java +++ /dev/null @@ -1,28 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.exporter; - -public class ExportException - extends Exception -{ - public ExportException(Throwable e) - { - super(e); - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/Exporter.java b/wise-webapp/src/main/java/com/wisemapping/exporter/Exporter.java deleted file mode 100755 index 86c9a5c9..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/Exporter.java +++ /dev/null @@ -1,29 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.exporter; - -import com.wisemapping.model.Mindmap; -import org.jetbrains.annotations.NotNull; - -import java.io.OutputStream; - -public interface Exporter { - void export(@NotNull byte[] xml, @NotNull OutputStream outputStream) throws ExportException; - void export(Mindmap map, OutputStream outputStream) throws ExportException; -} diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java b/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java deleted file mode 100644 index 9e23298e..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java +++ /dev/null @@ -1,375 +0,0 @@ -/* -* Copyright [2011] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.exporter; - - -import com.wisemapping.importer.VersionNumber; -import com.wisemapping.importer.freemind.FreemindConstant; -import com.wisemapping.importer.freemind.FreemindIconConverter; -import com.wisemapping.jaxb.freemind.*; -import com.wisemapping.jaxb.wisemap.Icon; -import com.wisemapping.jaxb.wisemap.Note; -import com.wisemapping.jaxb.wisemap.RelationshipType; -import com.wisemapping.jaxb.wisemap.TopicType; -import com.wisemapping.model.Mindmap; -import com.wisemapping.model.ShapeStyle; -import com.wisemapping.util.JAXBUtils; -import org.apache.commons.lang.StringEscapeUtils; -import org.jetbrains.annotations.NotNull; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import javax.xml.bind.JAXBException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - -public class FreemindExporter - implements Exporter { - - - private com.wisemapping.jaxb.freemind.ObjectFactory objectFactory; - private Map nodesMap = null; - private VersionNumber version = FreemindConstant.SUPPORTED_FREEMIND_VERSION; - - public void export(Mindmap map, OutputStream outputStream) throws ExportException { - export(map.getUnzipXml(), outputStream); - } - - public void export(@NotNull byte[] xml, @NotNull OutputStream outputStream) throws ExportException { - - objectFactory = new com.wisemapping.jaxb.freemind.ObjectFactory(); - nodesMap = new HashMap<>(); - final com.wisemapping.jaxb.wisemap.Map mindmapMap; - - try { - final ByteArrayInputStream stream = new ByteArrayInputStream(xml); - mindmapMap = (com.wisemapping.jaxb.wisemap.Map) JAXBUtils.getMapObject(stream, "com.wisemapping.jaxb.wisemap"); - - final com.wisemapping.jaxb.freemind.Map freemindMap = objectFactory.createMap(); - freemindMap.setVersion(this.getVersionNumber()); - - final List topics = mindmapMap.getTopic(); - - // Isolated Topic does not exist in Freemind only take the center topic - TopicType centerTopic = null; - if (topics.size() > 1) { - for (TopicType topic : topics) { - if (topic.isCentral() != null && topic.isCentral()) { - centerTopic = topic; - break; - } - } - } else { - centerTopic = topics.get(0); - } - - final Node main = objectFactory.createNode(); - freemindMap.setNode(main); - if (centerTopic != null) { - nodesMap.put(centerTopic.getId(), main); - setTopicPropertiesToNode(main, centerTopic, true); - addNodeFromTopic(centerTopic, main); - } - - final List relationships = mindmapMap.getRelationship(); - for (RelationshipType relationship : relationships) { - // FIXME:invert srcNode and dstNode to correct a bug in the wise mind map representation - Node srcNode = nodesMap.get(relationship.getDestTopicId()); - Node dstNode = nodesMap.get(relationship.getSrcTopicId()); - - - // Workaround for nodes without relationship associated ... - if (srcNode != null && dstNode != null) { - - Arrowlink arrowlink = objectFactory.createArrowlink(); - - arrowlink.setDESTINATION(dstNode.getID()); - if (relationship.isEndArrow() != null && relationship.isEndArrow()) - arrowlink.setENDARROW("Default"); - - if (relationship.isStartArrow() != null && relationship.isStartArrow()) - arrowlink.setSTARTARROW("Default"); - - List cloudOrEdge = srcNode.getArrowlinkOrCloudOrEdge(); - cloudOrEdge.add(arrowlink); - } - } - - JAXBUtils.saveMap(freemindMap, outputStream); - } catch (JAXBException | SAXException | IOException | ParserConfigurationException e) { - throw new ExportException(e); - } - } - - private void addNodeFromTopic(@NotNull final TopicType mainTopic, @NotNull final Node destNode) throws IOException, SAXException, ParserConfigurationException { - final List currentTopic = mainTopic.getTopic(); - - Collections.sort(currentTopic, new VerticalPositionComparator()); - for (TopicType topicType : currentTopic) { - final Node newNode = objectFactory.createNode(); - nodesMap.put(topicType.getId(), newNode); - - setTopicPropertiesToNode(newNode, topicType, false); - destNode.getArrowlinkOrCloudOrEdge().add(newNode); - - addNodeFromTopic(topicType, newNode); - - final String position = topicType.getPosition(); - if (position != null) { - String xPos = position.split(",")[0]; - int x = Integer.valueOf(xPos); - newNode.setPOSITION((x < 0 ? FreemindConstant.POSITION_LEFT : FreemindConstant.POSITION_RIGHT)); - } else { - newNode.setPOSITION(FreemindConstant.POSITION_LEFT); - } - } - } - - private void setTopicPropertiesToNode(@NotNull com.wisemapping.jaxb.freemind.Node freemindNode, @NotNull com.wisemapping.jaxb.wisemap.TopicType mindmapTopic, boolean isRoot) throws IOException, SAXException, ParserConfigurationException { - freemindNode.setID("ID_" + mindmapTopic.getId()); - - String text = mindmapTopic.getTextAttr(); - if (text == null || text.isEmpty()) { - text = mindmapTopic.getText(); - } - - // Formated text have a different representation .... - if (text != null) { - if (!text.contains("\n")) { - freemindNode.setTEXT(text); - } else { - final Richcontent richcontent = buildRichContent(text, "NODE"); - freemindNode.getArrowlinkOrCloudOrEdge().add(richcontent); - } - } - - String wiseShape = mindmapTopic.getShape(); - if (wiseShape != null && !ShapeStyle.LINE.equals(ShapeStyle.fromValue(wiseShape))) { - freemindNode.setBACKGROUNDCOLOR(this.rgbToHex(mindmapTopic.getBgColor())); - } - final String shape = mindmapTopic.getShape(); - if (shape != null && !shape.isEmpty()) { - if (isRoot && !ShapeStyle.ROUNDED_RECTANGLE.getStyle().endsWith(shape) || !isRoot && !ShapeStyle.LINE.getStyle().endsWith(shape)) { - - String style = shape; - if (ShapeStyle.ROUNDED_RECTANGLE.getStyle().equals(shape) || ShapeStyle.ELLIPSE.getStyle().equals(shape)) { - style = "bubble"; - } - freemindNode.setSTYLE(style); - } - } else if (!isRoot) { - String style = "fork"; - freemindNode.setSTYLE(style); - } - - addIconNode(freemindNode, mindmapTopic); - addLinkNode(freemindNode, mindmapTopic); - addFontNode(freemindNode, mindmapTopic); - addEdgeNode(freemindNode, mindmapTopic); - addNote(freemindNode, mindmapTopic); - - Boolean shrink = mindmapTopic.isShrink(); - if (shrink != null && shrink) - freemindNode.setFOLDED(String.valueOf(shrink)); - - } - - private Richcontent buildRichContent(final String text, final String type) throws ParserConfigurationException, SAXException, IOException { - final Richcontent richcontent = objectFactory.createRichcontent(); - richcontent.setTYPE(type); - - final StringBuilder htmlContent = new StringBuilder(""); - for (String line : text.split("\n")) { - line = StringEscapeUtils.escapeXml(line); - htmlContent.append("

").append(line.trim()).append("

"); - } - htmlContent.append(""); - - DocumentBuilder db = getInstanceBuilder(); - byte[] bytes = htmlContent.toString().getBytes(StandardCharsets.UTF_8); - Document document = db.parse(new ByteArrayInputStream(bytes), "UTF-8"); - richcontent.setHtml(document.getDocumentElement()); - return richcontent; - } - - private DocumentBuilder getInstanceBuilder() throws ParserConfigurationException { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - return dbf.newDocumentBuilder(); - } - - private void addNote(com.wisemapping.jaxb.freemind.Node fnode, com.wisemapping.jaxb.wisemap.TopicType mindmapTopic) throws IOException, SAXException, ParserConfigurationException { - final Note note = mindmapTopic.getNote(); - if (note != null) { - final String noteStr = note.getValue() != null ? note.getValue() : note.getTextAttr(); - if (noteStr != null) { - final Richcontent richcontent = buildRichContent(noteStr, "NOTE"); - fnode.getArrowlinkOrCloudOrEdge().add(richcontent); - } - } - } - - private void addLinkNode(com.wisemapping.jaxb.freemind.Node freemindNode, com.wisemapping.jaxb.wisemap.TopicType mindmapTopic) { - if (mindmapTopic.getLink() != null) { - final String url = mindmapTopic.getLink().getUrl(); - freemindNode.setLINK(url); - } - } - - private void addIconNode(com.wisemapping.jaxb.freemind.Node freemindNode, com.wisemapping.jaxb.wisemap.TopicType mindmapTopic) { - if (mindmapTopic.getIcon() != null) { - final List iconsList = mindmapTopic.getIcon(); - for (Icon icon : iconsList) { - final String id = icon.getId(); - final String freemindIconId = FreemindIconConverter.toFreemindId(id); - if (freemindIconId != null) { - - com.wisemapping.jaxb.freemind.Icon freemindIcon = new com.wisemapping.jaxb.freemind.Icon(); - freemindIcon.setBUILTIN(freemindIconId); - freemindNode.getArrowlinkOrCloudOrEdge().add(freemindIcon); - } - } - } - } - - private void addEdgeNode(com.wisemapping.jaxb.freemind.Node freemindNode, com.wisemapping.jaxb.wisemap.TopicType mindmapTopic) { - if (mindmapTopic.getBrColor() != null) { - final Edge edgeNode = objectFactory.createEdge(); - edgeNode.setCOLOR(this.rgbToHex(mindmapTopic.getBrColor())); - freemindNode.getArrowlinkOrCloudOrEdge().add(edgeNode); - } - } - - /* - * 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(); - if (fontStyle != null && fontStyle.length() != 0) { - final Font font = objectFactory.createFont(); - final String[] part = fontStyle.split(";", 6); - int countParts = part.length; - boolean fontNodeNeeded = false; - - if (!fontStyle.endsWith(FreemindConstant.EMPTY_FONT_STYLE)) { - int idx = 0; - - // Font name - if (idx < countParts && part[idx].length() != 0) { - font.setNAME(part[idx]); - fontNodeNeeded = true; - } - idx++; - - // Font size - if (idx < countParts && part[idx].length() != 0) { - final String size = part[idx]; - if (size != null && !size.isEmpty()) { - int wiseSize = Integer.parseInt(size); - Integer freeSize = wiseToFreeFontSize.get(wiseSize); - if(freeSize!=null){ - font.setSIZE(BigInteger.valueOf(freeSize)); - fontNodeNeeded = true; - } - } - } - idx++; - - // Font Color - if (idx < countParts && part[idx].length() != 0) { - freemindNode.setCOLOR(this.rgbToHex(part[idx])); - } - idx++; - - // Font Styles - if (idx < countParts && part[idx].length() != 0) { - font.setBOLD(Boolean.TRUE.toString()); - fontNodeNeeded = true; - } - idx++; - - if (idx < countParts && part[idx].length() != 0) { - font.setITALIC(Boolean.TRUE.toString()); - fontNodeNeeded = true; - } - - if (fontNodeNeeded) { - // font size should be set if freemind node has font properties note - if (font.getSIZE() == null) { - font.setSIZE(BigInteger.valueOf(wiseToFreeFontSize.get(8))); - } - freemindNode.getArrowlinkOrCloudOrEdge().add(font); - } - } - } - } - - // Freemind size goes from 10 to 28 - // WiseMapping: - // 6 Small - // 8 Normal - // 10 Large - // 15 Huge - static private final Map wiseToFreeFontSize = new HashMap(); - - static { - wiseToFreeFontSize.put(6, 10); - wiseToFreeFontSize.put(8, 12); - wiseToFreeFontSize.put(10, 18); - wiseToFreeFontSize.put(15, 24); - } - - private String rgbToHex(String color) { - String result = color; - if (color != null) { - boolean isRGB = Pattern.matches("^rgb\\([0-9]{1,3}, [0-9]{1,3}, [0-9]{1,3}\\)$", color); - if (isRGB) { - String[] rgb = color.substring(4, color.length() - 1).split(","); - Integer r = Integer.valueOf(rgb[0].trim()); - Integer g = Integer.valueOf(rgb[1].trim()); - Integer b = Integer.valueOf(rgb[2].trim()); - result = String.format("#%02x%02x%02x", r, g, b); - } - } - return result; - } - - public VersionNumber getVersion() { - return version; - } - - public void setVersion(VersionNumber version) { - this.version = version; - } - - public String getVersionNumber() { - return this.getVersion().getVersion(); - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/VerticalPositionComparator.java b/wise-webapp/src/main/java/com/wisemapping/exporter/VerticalPositionComparator.java deleted file mode 100644 index dfda0adc..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/VerticalPositionComparator.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.wisemapping.exporter; - -import com.wisemapping.jaxb.wisemap.TopicType; - -import java.util.Comparator; - -public class VerticalPositionComparator implements Comparator { - - @Override - public int compare(TopicType o1, TopicType o2) { - final String myPosition = o1.getPosition(); - final String otherPosition = o2.getPosition(); - int result; - if (otherPosition == null) { - result = -1; - } else if (myPosition == null) { - result = 1; - } else { - int myPositionY = Integer.parseInt(myPosition.split(",")[1]); - int otherPositionY = Integer.parseInt(otherPosition.split(",")[1]); - result = myPositionY - otherPositionY; - } - return result; - } - -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/ImportFormat.java b/wise-webapp/src/main/java/com/wisemapping/importer/ImportFormat.java deleted file mode 100755 index 2602c6da..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/ImportFormat.java +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer; - -public enum ImportFormat { - FREEMIND() -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/Importer.java b/wise-webapp/src/main/java/com/wisemapping/importer/Importer.java deleted file mode 100755 index 89ffbf2e..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/Importer.java +++ /dev/null @@ -1,28 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer; - -import com.wisemapping.model.Mindmap; -import org.jetbrains.annotations.NotNull; - -import java.io.InputStream; - -public interface Importer { - Mindmap importMap(@NotNull String mapName, @NotNull String description, @NotNull InputStream input) throws ImporterException; -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/ImporterException.java b/wise-webapp/src/main/java/com/wisemapping/importer/ImporterException.java deleted file mode 100755 index d352ae92..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/ImporterException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer; - -import org.jetbrains.annotations.NotNull; - - -public class ImporterException - extends Exception -{ - public ImporterException(@NotNull String str) - { - super(str); - } - public ImporterException(@NotNull Throwable exc) - { - super(exc); - } -} \ No newline at end of file diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/ImporterFactory.java b/wise-webapp/src/main/java/com/wisemapping/importer/ImporterFactory.java deleted file mode 100755 index a6e92469..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/ImporterFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer; - -import com.wisemapping.importer.freemind.FreemindImporter; -import org.jetbrains.annotations.NotNull; - -public class ImporterFactory -{ - - private static ImporterFactory instance = null; - - private ImporterFactory() {} - - public static ImporterFactory getInstance() - { - if (instance == null) - { - instance = new ImporterFactory(); - } - return instance; - } - - public Importer getImporter(@NotNull ImportFormat format) - throws ImporterException - { - Importer importer; - switch (format) - { - case FREEMIND: - importer = new FreemindImporter(); - break; - default: - throw new ImporterException("Invalid format type:" + format); - } - - return importer; - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/JaxbCDATAMarshaller.java b/wise-webapp/src/main/java/com/wisemapping/importer/JaxbCDATAMarshaller.java deleted file mode 100644 index 2be55d78..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/JaxbCDATAMarshaller.java +++ /dev/null @@ -1,156 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer; - -import org.apache.xml.serialize.OutputFormat; -import org.apache.xml.serialize.XMLSerializer; -import org.jetbrains.annotations.NotNull; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -import java.io.OutputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -@SuppressWarnings("deprecation") -public class JaxbCDATAMarshaller { - - public static XMLSerializer createMindmapXMLSerializer(@NotNull OutputStream out) { - // configure an OutputFormat to handle CDATA - OutputFormat of = new OutputFormat(); - - // specify which of your elements you want to be handled as CDATA. - // The use of the '^' between the namespaceURI and the localname - // seems to be an implementation detail of the xerces code. - // When processing xml that doesn't use namespaces, simply omit the - // namespace prefix as shown in the third CDataElement below. - of.setCDataElements( - new String[]{"^text","^note"}); // - - // set any other options you'd like -// of.setPreserveSpace(true); - of.setIndenting(true); - of.setEncoding("UTF-8"); - - // create the serializer - XMLSerializer result = new XMLSerializer(of) { - @Override - public void startElement(String s, String s1, String s2, Attributes attributes) throws SAXException { - super.startElement(s, s1, s2, new SortedAttributesDecorator(attributes)); - } - }; - result.setOutputByteStream(out); - - return result; - } - - private static class SortedAttributesDecorator implements Attributes { - - final Map sortedToUnsorted = new HashMap(); - final Map unsortedToSorted = new HashMap(); - - private final Attributes delegated; - - SortedAttributesDecorator(final Attributes delegated) { - this.delegated = delegated; - int length = this.getLength(); - - // Sort by local part ... - final Map sortedMap = new TreeMap(); - for (int i = 0; i < length; i++) { - final String localName = delegated.getLocalName(i); - sortedMap.put(localName, i); - } - - Set keySet = sortedMap.keySet(); - int sortedIndex = 0; - for (String key : keySet) { - final Integer unsortedIndex = sortedMap.get(key); - sortedToUnsorted.put(sortedIndex, unsortedIndex); - unsortedToSorted.put(unsortedIndex, sortedIndex); - sortedIndex++; - } - } - - @Override - public int getLength() { - return delegated.getLength(); - } - - @Override - public String getURI(int index) { - return delegated.getURI(sortedToUnsorted.get(index)); - } - - @Override - public String getLocalName(int index) { - return delegated.getLocalName(sortedToUnsorted.get(index)); - } - - @Override - public String getQName(int index) { - return delegated.getQName(sortedToUnsorted.get(index)); - } - - @Override - public String getType(int index) { - return delegated.getType(sortedToUnsorted.get(index)); - } - - @Override - public String getValue(int index) { - return delegated.getValue(sortedToUnsorted.get(index)); - } - - @Override - public int getIndex(String uri, String localName) { - int unsorted = delegated.getIndex(uri, localName); - return unsortedToSorted.get(unsorted); - } - - @Override - public int getIndex(String qName) { - int unsorted = delegated.getIndex(qName); - return unsortedToSorted.get(unsorted); - } - - @Override - public String getType(String uri, String localName) { - return delegated.getType(uri, localName); - } - - @Override - public String getType(String qName) { - return delegated.getType(qName); - } - - @Override - public String getValue(String uri, String localName) { - return delegated.getValue(uri, localName); - } - - @Override - public String getValue(String qName) { - return delegated.getValue(qName); - } - } - -} \ No newline at end of file diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/VersionNumber.java b/wise-webapp/src/main/java/com/wisemapping/importer/VersionNumber.java deleted file mode 100644 index 41807f0e..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/VersionNumber.java +++ /dev/null @@ -1,122 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer; - -import org.jetbrains.annotations.NotNull; - -import java.util.NoSuchElementException; -import java.util.StringTokenizer; - -public class VersionNumber - implements Comparable { - - protected String version_d; - - //~ Constructors ......................................................................................... - - public VersionNumber(final String version) { - version_d = version; - } - - //~ Methods .............................................................................................. - - /** - * Answers whether the receiver is greater then the given version number. - * - * @param versionNumber the version number to compare to - * @return true if the receiver has a greater version number, false otherwise - */ - public boolean isGreaterThan(final VersionNumber versionNumber) { - return this.compareTo(versionNumber) > 0; - } - - /** - * Answers whether the receiver is smaller then the given version number. - * - * @param versionNumber the version number to compare to - * @return true if the receiver has a smaller version number, false otherwise - */ - public boolean isSmallerThan(final VersionNumber versionNumber) { - return this.compareTo(versionNumber) < 0; - } - - public String getVersion() { - return version_d; - } - - - public int compareTo(@NotNull final VersionNumber otherObject) { - if (this.equals(otherObject)) { - return 0; - } - - final StringTokenizer ownTokenizer = this.getTokenizer(); - final StringTokenizer otherTokenizer = otherObject.getTokenizer(); - - while (ownTokenizer.hasMoreTokens()) { - final int ownNumber; - final int otherNumber; - - try { - ownNumber = Integer.parseInt(ownTokenizer.nextToken()); - otherNumber = Integer.parseInt(otherTokenizer.nextToken()); - } catch (NoSuchElementException nseex) { - // only possible if we have more tokens than the other version - - // if we get to this point then we are always greater - return 1; - } - - if (ownNumber > otherNumber) { - return 1; - } else if (ownNumber < otherNumber) { - return -1; - } - } - - // if other version still has tokens then it is greater than me! - otherTokenizer.nextToken(); - return -1; - } - - - public boolean equals(final Object o) { - if (this == o) { - return true; - } - - if (!(o instanceof VersionNumber)) { - return false; - } - - final VersionNumber versionNumber = (VersionNumber) o; - - return !(version_d != null ? !version_d.equals(versionNumber.version_d) - : versionNumber.version_d != null); - - } - - public int hashCode() { - return (version_d != null ? version_d.hashCode() : 0); - } - - @NotNull - private StringTokenizer getTokenizer() { - return new StringTokenizer(this.getVersion(), "."); - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindConstant.java b/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindConstant.java deleted file mode 100644 index e329f72c..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindConstant.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.wisemapping.importer.freemind; - -import com.wisemapping.importer.VersionNumber; - -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; - -public interface FreemindConstant { - - String LAST_SUPPORTED_FREEMIND_VERSION = "1.0.1"; - VersionNumber SUPPORTED_FREEMIND_VERSION = new VersionNumber(LAST_SUPPORTED_FREEMIND_VERSION); - String CODE_VERSION = "tango"; - - int SECOND_LEVEL_TOPIC_HEIGHT = 25; - int ROOT_LEVEL_TOPIC_HEIGHT = SECOND_LEVEL_TOPIC_HEIGHT; - int CENTRAL_TO_TOPIC_DISTANCE = 200; - int TOPIC_TO_TOPIC_DISTANCE = 90; - - int FONT_SIZE_HUGE = 15; - int FONT_SIZE_LARGE = 10; - int FONT_SIZE_NORMAL = 8; - int FONT_SIZE_SMALL = 6; - - String NODE_TYPE = "NODE"; - String BOLD = "bold"; - String ITALIC = "italic"; - String EMPTY_FONT_STYLE = ";;;;;"; - String EMPTY_NOTE = ""; - - String POSITION_LEFT = "left"; - String POSITION_RIGHT = "right"; - - Charset UTF_8_CHARSET = StandardCharsets.UTF_8; - -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindIconConverter.java b/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindIconConverter.java deleted file mode 100755 index ef3255b7..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindIconConverter.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer.freemind; - -import com.wisemapping.model.IconFamily; -import com.wisemapping.model.MindmapIcon; -import com.wisemapping.model.MindmapIcons; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -final public class FreemindIconConverter { - - - private final static Map freeIdToIcon = new TreeMap(); - private final static Map iconToFreeId = new TreeMap(); - - private FreemindIconConverter() { - } - - @Nullable - public static String toWiseId(@NotNull String iconId) { - final MindmapIcon result = freeIdToIcon.get(iconId); - return result != null ? result.getId() : null; - } - - @Nullable - public static String toFreemindId(@NotNull String iconId) { - String result = iconToFreeId.get(MindmapIcons.findById(iconId)); - return result != null ? result : iconId; - } - - - static { - - // By default, do a default mapping of all. The overwrite. - IconFamily[] families = IconFamily.values(); - for (IconFamily family : families) { - final List images = MindmapIcons.getIconByFamily(family); - for (MindmapIcon mindmapIcon : images) { - iconToFreeId.put(mindmapIcon, mindmapIcon.getName()); - } - } - - // Now overwrite that are different ... - final List bulletsImages = MindmapIcons.getIconByFamily(IconFamily.BULLET); - for (int i = 0; i < bulletsImages.size(); i++) { - final MindmapIcon icon = bulletsImages.get(i); - iconToFreeId.put(icon, "full-" + i); - } - - // Generic mapping ... - iconToFreeId.put(MindmapIcons.BULB_LIGHT_ON, "idea"); - iconToFreeId.put(MindmapIcons.TICK_TICK, "button_ok"); - iconToFreeId.put(MindmapIcons.TICK_CROSS, "button_cancel"); - - // Map arrow icons ... - iconToFreeId.put(MindmapIcons.ARROW_RIGHT, "back"); - iconToFreeId.put(MindmapIcons.ARROW_LEFT, "forward"); - iconToFreeId.put(MindmapIcons.ONOFF_DELETE, "closed"); - - // Map smile icons ... - iconToFreeId.put(MindmapIcons.FACE_PLAIN, "smiley-neutral"); - iconToFreeId.put(MindmapIcons.FACE_SMILE, "ksmiletris"); - iconToFreeId.put(MindmapIcons.FACE_SURPRISE, "smiley-oh"); - iconToFreeId.put(MindmapIcons.FACE_SAD, "smiley_bad"); - - // Objects mappings - iconToFreeId.put(MindmapIcons.OBJECT_KEY, "password"); - iconToFreeId.put(MindmapIcons.OBJECT_PHONE, "kaddressbook"); - iconToFreeId.put(MindmapIcons.OBJECT_STAR, "bookmark"); - iconToFreeId.put(MindmapIcons.OBJECT_MAGNIFIER, "xmag"); - iconToFreeId.put(MindmapIcons.OBJECT_CLIP, "attach"); - iconToFreeId.put(MindmapIcons.OBJECT_MUSIC, "knotify"); - iconToFreeId.put(MindmapIcons.OBJECT_HOUSE, "gohome"); - iconToFreeId.put(MindmapIcons.ONOFF_STATUS_ONLINE, "licq"); - - // Sign mapping ... - iconToFreeId.put(MindmapIcons.SIGN_WARNING, "messagebox_warning"); - iconToFreeId.put(MindmapIcons.SIGN_STOP, "stop-sign"); - - - // Mail mappings - iconToFreeId.put(MindmapIcons.MAIL_ENVELOP, "Mail"); - iconToFreeId.put(MindmapIcons.MAIL_MAILBOX, "korn"); - - // Maps Flag familly Icons ... - final List flagImages = MindmapIcons.getIconByFamily(IconFamily.FLAG); - for (MindmapIcon flagImage : flagImages) { - iconToFreeId.put(flagImage, "flag-" + flagImage.getName()); - } - - - final Set mindmapIcons = iconToFreeId.keySet(); - for (MindmapIcon mindmapIcon : mindmapIcons) { - freeIdToIcon.put(iconToFreeId.get(mindmapIcon), mindmapIcon); - } - - - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindImporter.java b/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindImporter.java deleted file mode 100755 index 10ce06d3..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindImporter.java +++ /dev/null @@ -1,616 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.importer.freemind; - -import com.wisemapping.importer.Importer; -import com.wisemapping.importer.ImporterException; -import com.wisemapping.importer.VersionNumber; -import com.wisemapping.jaxb.freemind.*; -import com.wisemapping.jaxb.wisemap.Link; -import com.wisemapping.jaxb.wisemap.RelationshipType; -import com.wisemapping.jaxb.wisemap.TopicType; -import com.wisemapping.model.Mindmap; -import com.wisemapping.model.ShapeStyle; -import com.wisemapping.util.JAXBUtils; -import org.apache.log4j.Logger; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.w3c.dom.Element; - -import javax.xml.bind.JAXBException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.StringWriter; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public class FreemindImporter - implements Importer { - final private Logger logger = Logger.getLogger(FreemindImporter.class); - - private com.wisemapping.jaxb.wisemap.ObjectFactory mindmapObjectFactory; - private java.util.Map nodesMap = null; - private List relationships = null; - - private int currentId; - - public static void main(String[] argv) { - - - // Now, calculate the order it belongs to ... - // 3 = -100 0 - // 1 = -50 1 - // 0 = 0 2 - // 2 = 50 3 - // 4 = 100 4 - - int total = 2; - int center = (total - 1) / 2; - - - for (int i = 0; i < total; i++) { - - int result = i - center + ((total % 2 == 0) ? 0 : 1); - if (result > 0) { - result = (result - 1) * 2; - } else { - result = (result * -2) + 1; - } - - System.out.println(i + "->" + result); - } - - } - - public Mindmap importMap(@NotNull String mapName, @NotNull String description, @NotNull InputStream input) throws ImporterException { - - final Mindmap result = new Mindmap(); - nodesMap = new HashMap(); - relationships = new ArrayList(); - mindmapObjectFactory = new com.wisemapping.jaxb.wisemap.ObjectFactory(); - - try { - String wiseXml; - final Map freemindMap = (Map) JAXBUtils.getMapObject(input, "com.wisemapping.jaxb.freemind"); - - final String version = freemindMap.getVersion(); - if (version == null || version.startsWith("freeplane")) { - throw new ImporterException("You seems to be be trying to import a Freeplane map. FreePlane is not supported format."); - } else { - final VersionNumber mapVersion = new VersionNumber(version); - if (mapVersion.isGreaterThan(FreemindConstant.SUPPORTED_FREEMIND_VERSION)) { - throw new ImporterException("FreeMind version " + mapVersion.getVersion() + " is not supported."); - } - } - - - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - final com.wisemapping.jaxb.wisemap.Map mindmapMap = mindmapObjectFactory.createMap(); - mindmapMap.setVersion(FreemindConstant.CODE_VERSION); - currentId = 0; - - final Node freeNode = freemindMap.getNode(); - final TopicType wiseTopic = mindmapObjectFactory.createTopicType(); - wiseTopic.setId(String.valueOf(currentId++)); - wiseTopic.setCentral(true); - wiseTopic.setPosition("0,0"); - - convertNodeProperties(freeNode, wiseTopic); - - wiseTopic.setShape(ShapeStyle.ROUNDED_RECTANGLE.getStyle()); - mindmapMap.getTopic().add(wiseTopic); - mindmapMap.setName(mapName); - - nodesMap.put(freeNode.getID(), wiseTopic); - - convertChildNodes(freeNode, wiseTopic, 1); - addRelationships(mindmapMap); - - JAXBUtils.saveMap(mindmapMap, baos); - wiseXml = baos.toString(FreemindConstant.UTF_8_CHARSET); - result.setXmlStr(wiseXml); - result.setTitle(mapName); - result.setDescription(description); - - } catch (JAXBException | TransformerException e) { - logger.debug(e); - throw new ImporterException(e); - } - return result; - } - - private void addRelationships(@NotNull com.wisemapping.jaxb.wisemap.Map mindmapMap) { - List mapRelationships = mindmapMap.getRelationship(); - for (RelationshipType relationship : relationships) { - relationship.setId(String.valueOf(currentId++)); - - fixRelationshipControlPoints(relationship); - - //Fix dest ID - String destId = relationship.getDestTopicId(); - TopicType destTopic = nodesMap.get(destId); - relationship.setDestTopicId(destTopic.getId()); - //Fix src ID - String srcId = relationship.getSrcTopicId(); - TopicType srcTopic = nodesMap.get(srcId); - relationship.setSrcTopicId(srcTopic.getId()); - - mapRelationships.add(relationship); - } - } - - private void fixRelationshipControlPoints(@NotNull RelationshipType rel) { - //Both relationship node's ids should be freemind ones at this point. - TopicType srcTopic = nodesMap.get(rel.getSrcTopicId()); - TopicType destTopicType = nodesMap.get(rel.getDestTopicId()); - - //Fix x coord - final String srcCtrlPoint = rel.getSrcCtrlPoint(); - if (srcCtrlPoint != null) { - final Coord srcCtrlCoord = Coord.parse(srcCtrlPoint); - - if (Coord.parse(srcTopic.getPosition()).isOnLeftSide()) { - int x = srcCtrlCoord.x * -1; - rel.setSrcCtrlPoint(x + "," + srcCtrlCoord.y); - - //Fix coord - if (srcTopic.getOrder() != null && srcTopic.getOrder() % 2 != 0) { //Odd order. - int y = srcCtrlCoord.y * -1; - rel.setSrcCtrlPoint(srcCtrlCoord.x + "," + y); - } - } - } - final String destCtrlPoint = rel.getDestCtrlPoint(); - if (destCtrlPoint != null) { - final Coord destCtrlCoord = Coord.parse(destCtrlPoint); - - - if (Coord.parse(destTopicType.getPosition()).isOnLeftSide()) { - int x = destCtrlCoord.x * -1; - rel.setDestCtrlPoint(x + "," + destCtrlCoord.y); - } - - - if (destTopicType.getOrder() != null && destTopicType.getOrder() % 2 != 0) { //Odd order. - int y = destCtrlCoord.y * -1; - rel.setDestCtrlPoint(destCtrlCoord.x + "," + y); - } - } - } - - private void convertChildNodes(@NotNull Node freeParent, @NotNull TopicType wiseParent, final int depth) throws TransformerException { - final List freeChilden = freeParent.getArrowlinkOrCloudOrEdge(); - TopicType currentWiseTopic = wiseParent; - - int order = 0; - int firstLevelRightOrder = 0; - int firstLevelLeftOrder = 1; - for (Object element : freeChilden) { - - if (element instanceof Node) { - final Node freeChild = (Node) element; - final TopicType wiseChild = mindmapObjectFactory.createTopicType(); - - // Set an incremental id ... - wiseChild.setId(String.valueOf(currentId++)); - - // Lets use freemind id temporarily. This will be fixed when adding relationship to the map. - nodesMap.put(freeChild.getID(), wiseChild); - - // Set node order ... - int norder; - if (depth != 1) { - norder = order++; - } else { - if (freeChild.getPOSITION() != null && freeChild.getPOSITION().equals(FreemindConstant.POSITION_LEFT)) { - norder = firstLevelLeftOrder; - firstLevelLeftOrder = firstLevelLeftOrder + 2; - } else { - norder = firstLevelRightOrder; - firstLevelRightOrder = firstLevelRightOrder + 2; - } - } - wiseChild.setOrder(norder); - - // Convert node position - int childrenCountSameSide = getChildrenCountSameSide(freeChilden, freeChild); - final String position = convertPosition(wiseParent, freeChild, depth, norder, childrenCountSameSide); - wiseChild.setPosition(position); - - // Convert the rest of the node properties ... - convertNodeProperties(freeChild, wiseChild); - - convertChildNodes(freeChild, wiseChild, depth + 1); - - if (!wiseChild.equals(wiseParent)) { - wiseParent.getTopic().add(wiseChild); - } - currentWiseTopic = wiseChild; - - } else if (element instanceof Font) { - final Font font = (Font) element; - final String fontStyle = generateFontStyle(freeParent, font); - if (fontStyle != null) { - currentWiseTopic.setFontStyle(fontStyle); - } - } else if (element instanceof Edge) { - final Edge edge = (Edge) element; - currentWiseTopic.setBrColor(edge.getCOLOR()); - } else if (element instanceof Icon) { - final Icon freemindIcon = (Icon) element; - - String iconId = freemindIcon.getBUILTIN(); - final String wiseIconId = FreemindIconConverter.toWiseId(iconId); - if (wiseIconId != null) { - final com.wisemapping.jaxb.wisemap.Icon mindmapIcon = new com.wisemapping.jaxb.wisemap.Icon(); - mindmapIcon.setId(wiseIconId); - currentWiseTopic.getIcon().add(mindmapIcon); - } - - } else if (element instanceof Hook) { - final Hook hook = (Hook) element; - final com.wisemapping.jaxb.wisemap.Note mindmapNote = new com.wisemapping.jaxb.wisemap.Note(); - String textNote = hook.getText(); - if (textNote == null) // It is not a note is a BlinkingNodeHook or AutomaticLayout Hook - { - textNote = FreemindConstant.EMPTY_NOTE; - mindmapNote.setValue(textNote); - currentWiseTopic.setNote(mindmapNote); - } - } else if (element instanceof Richcontent) { - final Richcontent content = (Richcontent) element; - final String type = content.getTYPE(); - - if (type.equals(FreemindConstant.NODE_TYPE)) { - String text = html2text(content); - currentWiseTopic.setText(text); - } else { - String text = html2text(content); - final com.wisemapping.jaxb.wisemap.Note mindmapNote = new com.wisemapping.jaxb.wisemap.Note(); - text = text != null ? text : FreemindConstant.EMPTY_NOTE; - mindmapNote.setValue(text); - currentWiseTopic.setNote(mindmapNote); - - } - } else if (element instanceof Arrowlink) { - final Arrowlink arrow = (Arrowlink) element; - RelationshipType relt = mindmapObjectFactory.createRelationshipType(); - String destId = arrow.getDESTINATION(); - // FIXME: invert srcTopic and dstTopic to correct a bug in the wise mind map representation - relt.setSrcTopicId(destId); - relt.setDestTopicId(freeParent.getID()); - final String endinclination = arrow.getENDINCLINATION(); - if (endinclination != null) { - String[] inclination = endinclination.split(";"); - relt.setDestCtrlPoint(inclination[0] + "," + inclination[1]); - } - final String startinclination = arrow.getSTARTINCLINATION(); - if (startinclination != null) { - String[] inclination = startinclination.split(";"); - relt.setSrcCtrlPoint(inclination[0] + "," + inclination[1]); - } - - final String endarrow = arrow.getENDARROW(); - if (endarrow != null) { - relt.setEndArrow(!endarrow.equalsIgnoreCase("none")); - } - - final String startarrow = arrow.getSTARTARROW(); - if (startarrow != null) { - relt.setStartArrow(!startarrow.equalsIgnoreCase("none")); - } - relt.setLineType("3"); - relationships.add(relt); - } - } - } - - private int getChildrenCountSameSide(@NotNull List freeChildren, Node freeChild) { - int result = 0; - String childSide = freeChild.getPOSITION(); - if (childSide == null) { - childSide = FreemindConstant.POSITION_RIGHT; - } - - // Count all the nodes of the same side ... - for (Object child : freeChildren) { - if (child instanceof Node) { - Node node = (Node) child; - - String side = node.getPOSITION(); - if (side == null) { - side = FreemindConstant.POSITION_RIGHT; - } - if (childSide.equals(side)) { - result++; - } - } - } - return result; - } - - /** - * Position is (x,y). - * x values greater than 0 are right axis - * x values lower than 0 are left axis - */ - private - @NotNull - String convertPosition(@NotNull TopicType wiseParent, @NotNull Node freeChild, final int depth, int order, int childrenCount) { - - // Which side must be the node be positioned ? - - // Calculate X ... - - // Problem on setting X position: - // Text Size is not taken into account ... - int x = FreemindConstant.CENTRAL_TO_TOPIC_DISTANCE + ((depth - 1) * FreemindConstant.TOPIC_TO_TOPIC_DISTANCE); - if (depth == 1) { - - final String side = freeChild.getPOSITION(); - x = x * (side != null && FreemindConstant.POSITION_LEFT.equals(side) ? -1 : 1); - } else { - final Coord coord = Coord.parse(wiseParent.getPosition()); - x = x * (coord.isOnLeftSide() ? -1 : 1); - } - - - // Calculate y ... - int y; - if (depth == 1) { - - // pair order numbers represent nodes at the right - // odd order numbers represent nodes at the left - if (order % 2 == 0) { - int multiplier = ((order + 1) - childrenCount) * 2; - y = multiplier * FreemindConstant.ROOT_LEVEL_TOPIC_HEIGHT; - } else { - int multiplier = (order - childrenCount) * 2; - y = multiplier * FreemindConstant.ROOT_LEVEL_TOPIC_HEIGHT; - } - } else { - - // Problem: What happen if the node is more tall than what is defined here. - Coord coord = Coord.parse(wiseParent.getPosition()); - int parentY = coord.y; - y = parentY - ((childrenCount / 2) * FreemindConstant.SECOND_LEVEL_TOPIC_HEIGHT - (order * FreemindConstant.SECOND_LEVEL_TOPIC_HEIGHT)); - - - } - return x + "," + y; - - - } - - /** - * Position is (x,y). - * x values greater than 0 are right axis - * x values lower than 0 are left axis - */ -// private -// @NotNull -// String convertPosition(@NotNull TopicType wiseParent, @NotNull Node freeChild, final int depth, int order) { -// -// // Which side must be the node be positioned ? -// String result = freeChild.getWcoords(); -// if (result == null) { -// BigInteger vgap = freeChild.getVSHIFT(); -// BigInteger hgap = freeChild.getHGAP(); -// -// if (hgap == null) { -// hgap = BigInteger.valueOf(0L); -// } -// -// if (vgap == null) { -// vgap = BigInteger.valueOf(HALF_ROOT_TOPICS_SEPARATION * order); -// } -// -// -// final String[] position = wiseParent.getPosition().split(","); -// BigInteger fix = BigInteger.valueOf(1L); -// if ((freeChild.getPOSITION() != null && POSITION_LEFT.equals(freeChild.getPOSITION().toLowerCase())) -// || freeChild.getPOSITION() == null && isOnLeftSide(wiseParent)) { -// fix = BigInteger.valueOf(-1L); -// -// } -// -// BigInteger firstLevelDistance = BigInteger.valueOf(0L); -// BigInteger defaultXDistance = BigInteger.valueOf(200L); -// if (depth == 1) { -// firstLevelDistance = BigInteger.valueOf(200L); -// defaultXDistance = BigInteger.valueOf(0L); -// } -// -// BigInteger x = BigInteger.valueOf(Integer.valueOf(position[0])).add(hgap.multiply(fix).add(firstLevelDistance.multiply(fix)).add(defaultXDistance.multiply(fix))); -// BigInteger y = BigInteger.valueOf(Integer.valueOf(position[1])).add(vgap); -// result = x.toString() + "," + y.toString(); -// } -// return result; -// } - @NotNull - private String html2text(@NotNull Richcontent content) throws TransformerException { - final Element html = (Element) content.getHtml(); - - // Convert any to HTML piece ... - TransformerFactory transFactory = TransformerFactory.newInstance(); - Transformer transformer = transFactory.newTransformer(); - StringWriter buffer = new StringWriter(); - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - transformer.transform(new DOMSource(html), new StreamResult(buffer)); - - // Keep return lines in place ... - final Document document = Jsoup.parse(buffer.toString()); - document.select("br").append("\\n"); - document.select("p").prepend("\\n"); - document.select("div").prepend("\\n"); - return document.text().replaceAll("\\\\n", "\n").trim(); - - } - - - private void convertNodeProperties(@NotNull com.wisemapping.jaxb.freemind.Node freeNode, @NotNull com.wisemapping.jaxb.wisemap.TopicType wiseTopic) { - final String text = freeNode.getTEXT(); - wiseTopic.setText(text); - - // Background color ... - final String bgcolor = freeNode.getBACKGROUNDCOLOR(); - wiseTopic.setBgColor(bgcolor); - - - final String shape = getShapeFormFromNode(freeNode); - wiseTopic.setShape(shape); - - // Check for styles ... - final String fontStyle = generateFontStyle(freeNode, null); - if (fontStyle != null) { - wiseTopic.setFontStyle(fontStyle); - } - - // Is there any link ? - final String url = freeNode.getLINK(); - if (url != null) { - final Link link = new Link(); - link.setUrl(url); - wiseTopic.setLink(link); - } - - final Boolean folded = Boolean.valueOf(freeNode.getFOLDED()); - wiseTopic.setShrink(folded); - } - - - @Nullable - private String generateFontStyle(@NotNull Node node, @Nullable Font font) { - /* - * MindmapFont format : fontName ; size ; color ; bold; italic; - * eg: Verdana;10;#ffffff;bold;italic; - * - */ - - // Font name ... - final StringBuilder fontStyle = new StringBuilder(); - if (font != null) { - fontStyle.append(fixFontName(font)); - } - fontStyle.append(";"); - - // Freemind size goes from 10 to 28 - // WiseMapping: - // 6 Small - // 8 Normal - // 10 Large - // 15 Huge - if (font != null) { - final int fontSize = ((font.getSIZE() == null || font.getSIZE().intValue() < 8) ? BigInteger.valueOf(FreemindConstant.FONT_SIZE_NORMAL) : font.getSIZE()).intValue(); - int wiseFontSize = FreemindConstant.FONT_SIZE_SMALL; - if (fontSize >= 24) { - wiseFontSize = FreemindConstant.FONT_SIZE_HUGE; - } else if (fontSize >= 16) { - wiseFontSize = FreemindConstant.FONT_SIZE_LARGE; - } else if (fontSize >= 12) { - wiseFontSize = FreemindConstant.FONT_SIZE_NORMAL; - } - fontStyle.append(wiseFontSize); - - } - fontStyle.append(";"); - - // Color ... - final String color = node.getCOLOR(); - if (color != null && !color.equals("")) { - fontStyle.append(color); - } - fontStyle.append(";"); - - // Bold ... - if (font != null) { - boolean hasBold = Boolean.parseBoolean(font.getBOLD()); - fontStyle.append(hasBold ? FreemindConstant.BOLD : ""); - } - fontStyle.append(";"); - - // Italic ... - if (font != null) { - boolean hasItalic = Boolean.parseBoolean(font.getITALIC()); - fontStyle.append(hasItalic ? FreemindConstant.ITALIC : ""); - } - fontStyle.append(";"); - - final String result = fontStyle.toString(); - return result.equals(FreemindConstant.EMPTY_FONT_STYLE) ? null : result; - } - - private - @NotNull - String fixFontName(@NotNull Font font) { - String result = com.wisemapping.model.Font.ARIAL.getFontName(); // Default Font - if (com.wisemapping.model.Font.isValidFont(font.getNAME())) { - result = font.getNAME(); - } - return result; - } - - private - @NotNull - String getShapeFormFromNode(@NotNull Node node) { - String result = node.getSTYLE(); - // In freemind a node without style is a line - if ("bubble".equals(result)) { - result = ShapeStyle.ROUNDED_RECTANGLE.getStyle(); - } else { - if (node.getBACKGROUNDCOLOR() != null) { - // This the node has background color defined. It's better to change the default shape. - result = ShapeStyle.RECTANGLE.getStyle(); - } else { - result = ShapeStyle.LINE.getStyle(); - } - } - return result; - } - - static private class Coord { - private final int y; - private final int x; - - private Coord(@NotNull String pos) { - final String[] split = pos.split(","); - x = Integer.parseInt(split[0]); - y = Integer.parseInt(split[1]); - } - - public static Coord parse(@NotNull String position) { - return new Coord(position); - } - - private boolean isOnLeftSide() { - return x < 0; - } - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java index 8d80c961..01c61714 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java @@ -19,10 +19,6 @@ package com.wisemapping.rest; import com.wisemapping.exceptions.*; -import com.wisemapping.importer.ImportFormat; -import com.wisemapping.importer.Importer; -import com.wisemapping.importer.ImporterException; -import com.wisemapping.importer.ImporterFactory; import com.wisemapping.model.*; import com.wisemapping.rest.model.*; import com.wisemapping.security.Utils; @@ -549,27 +545,6 @@ public class MindmapController extends BaseController { response.setHeader("ResourceId", Integer.toString(delegated.getId())); } - @RequestMapping(method = RequestMethod.POST, value = "/maps", consumes = {"application/freemind"}) - @ResponseStatus(value = HttpStatus.CREATED) - public void createMapFromFreemind(@RequestBody byte[] freemindXml, @RequestParam(required = true) String title, @RequestParam(required = false) String description, @NotNull HttpServletResponse response) throws IOException, WiseMappingException { - - // Convert map ... - final Mindmap mindMap; - try { - final Importer importer = ImporterFactory.getInstance().getImporter(ImportFormat.FREEMIND); - final ByteArrayInputStream stream = new ByteArrayInputStream(freemindXml); - mindMap = importer.importMap(title, "", stream); - } catch (ImporterException e) { - // @Todo: This should be an illegal argument exception. Review the all the other cases. - throw buildValidationException("xml", "The selected file does not seems to be a valid Freemind or WiseMapping file. Contact support in case the problem persists."); - } catch (Throwable e) { - throw new ImportUnexpectedException(e, freemindXml); - } - - // Save new map ... - createMap(new RestMindmap(mindMap, null), response, title, description); - } - @RequestMapping(method = RequestMethod.POST, value = "/maps/{id}", consumes = {"application/xml", "application/json"},produces = {"application/xml", "application/json","text/plain"}) @ResponseStatus(value = HttpStatus.CREATED) public void createDuplicate(@RequestBody RestMindmapInfo restMindmap, @PathVariable int id, @NotNull HttpServletResponse response) throws IOException, WiseMappingException { 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 deleted file mode 100644 index e5d95bc0..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/rest/view/ImportTransformationView.java +++ /dev/null @@ -1,88 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.rest.view; - -import com.wisemapping.importer.ImportFormat; -import com.wisemapping.importer.Importer; -import com.wisemapping.importer.ImporterException; -import com.wisemapping.importer.ImporterFactory; -import com.wisemapping.model.Mindmap; -import org.jetbrains.annotations.NotNull; -import org.springframework.web.servlet.view.AbstractView; - -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.util.Map; - -public class ImportTransformationView extends AbstractView { - - private final String contentType; - private final Importer importer; - - public ImportTransformationView(@NotNull final String contentType) throws ImporterException { - ImporterFactory exporterFactory = ImporterFactory.getInstance(); - importer = exporterFactory.getImporter(ImportFormat.FREEMIND); - this.contentType = contentType; - } - - @Override - protected void renderMergedOutputModel(@NotNull Map viewMap, @NotNull HttpServletRequest request, @NotNull final HttpServletResponse response) throws Exception { - final String content = (String) viewMap.get("content"); - final String filename = (String) viewMap.get("filename"); - - // Convert to map ... - final InputStream is = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); - final Mindmap mindMap = importer.importMap("filename", "filename", is); - - // Set file name...:http://stackoverflow.com/questions/5325322/java-servlet-download-filename-special-characters/13359949#13359949 - final String fileName = (filename != null ? filename : "map") + "." + "xwise"; - 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/util/JAXBUtils.java b/wise-webapp/src/main/java/com/wisemapping/util/JAXBUtils.java deleted file mode 100755 index caa2d2b9..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/util/JAXBUtils.java +++ /dev/null @@ -1,84 +0,0 @@ -/* -* Copyright [2015] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.util; - -import com.wisemapping.importer.JaxbCDATAMarshaller; -import org.apache.xml.serialize.XMLSerializer; -import org.jetbrains.annotations.NotNull; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.Map; - -public class JAXBUtils { - - private final static Map context = new HashMap(); - - public static Object getMapObject(@NotNull InputStream is, @NotNull final String pakage) throws JAXBException { - - final JAXBContext context = getInstance(pakage); - final Unmarshaller unmarshaller = context.createUnmarshaller(); - final Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8); - return unmarshaller.unmarshal(reader); - } - - private static JAXBContext getInstance(@NotNull String pakage) throws JAXBException { - - JAXBContext result = context.get(pakage); - if (result == null) { - synchronized (context) { - result = JAXBContext.newInstance(pakage); - context.put(pakage, result); - } - } - return result; - - } - - public static void saveMap(@NotNull com.wisemapping.jaxb.wisemap.Map obj, @NotNull OutputStream out) throws JAXBException { - - final JAXBContext context = getInstance("com.wisemapping.jaxb.wisemap"); - final Marshaller marshaller = context.createMarshaller(); - - // get an Apache XMLSerializer configured to generate CDATA - XMLSerializer serializer = JaxbCDATAMarshaller.createMindmapXMLSerializer(out); - - try { - // marshal using the Apache XMLSerializer - marshaller.marshal(obj, serializer.asContentHandler()); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - public static void saveMap(@NotNull com.wisemapping.jaxb.freemind.Map map, @NotNull OutputStream out) throws JAXBException { - - final JAXBContext context = getInstance("com.wisemapping.jaxb.freemind"); - final Marshaller marshaller = context.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - marshaller.setProperty(Marshaller.JAXB_ENCODING, "ASCII"); - marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); - marshaller.marshal(map, out); - } -} diff --git a/wise-webapp/src/test/java/com/wisemapping/test/export/ExportFreemindTest.java b/wise-webapp/src/test/java/com/wisemapping/test/export/ExportFreemindTest.java deleted file mode 100644 index 83f21e71..00000000 --- a/wise-webapp/src/test/java/com/wisemapping/test/export/ExportFreemindTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.wisemapping.test.export; - -import com.wisemapping.exporter.ExportException; -import com.wisemapping.exporter.FreemindExporter; -import com.wisemapping.importer.ImporterException; -import com.wisemapping.model.Mindmap; -import org.apache.commons.io.FileUtils; -import org.jetbrains.annotations.NotNull; -import org.testng.Assert; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import java.io.*; - -@Test -public class ExportFreemindTest { - private static final String DATA_DIR_PATH = "src/test/resources/data/export/"; - private static final String ENC_UTF_8 = "UTF-8"; - private static final String ENC_LATIN1 = "iso-8859-1"; - - - @Test(dataProvider = "Data-Provider-Function") - public void exportImportExportTest(@NotNull final File wisemap, @NotNull final File recFile) throws ImporterException, IOException, ExportException { - - final Mindmap mindmap = load(wisemap); - - final FreemindExporter freemindExporter = new FreemindExporter(); - if (recFile.exists()) { - // Compare rec and file ... - final String recContent = FileUtils.readFileToString(recFile, ENC_UTF_8); - - // Export mile content ... - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - freemindExporter.export(mindmap, bos); - final String exportContent = bos.toString(ENC_LATIN1); - - Assert.assertEquals(exportContent, recContent); - - } else { - final OutputStream fos = new FileOutputStream(recFile); - freemindExporter.export(mindmap, fos); - fos.close(); - } - } - - private Mindmap load(@NotNull File wisemap) throws IOException { - final byte[] recContent = FileUtils.readFileToByteArray(wisemap); - final Mindmap result = new Mindmap(); - result.setUnzipXml(recContent); - return result; - } - - //This function will provide the parameter data - @DataProvider(name = "Data-Provider-Function") - public Object[][] parameterIntTestProvider() { - - final File dataDir = new File(DATA_DIR_PATH); - final File[] freeMindFiles = dataDir.listFiles(new FilenameFilter() { - - public boolean accept(File dir, String name) { - return name.endsWith(".wxml"); - } - }); - - final Object[][] result = new Object[freeMindFiles.length][2]; - for (int i = 0; i < freeMindFiles.length; i++) { - File freeMindFile = freeMindFiles[i]; - final String name = freeMindFile.getName(); - result[i] = new Object[]{freeMindFile, new File(DATA_DIR_PATH, name.substring(0, name.lastIndexOf(".")) + ".mm")}; - } - - return result; - } -} diff --git a/wise-webapp/src/test/java/com/wisemapping/test/importer/FreeMindImportExportTest.java b/wise-webapp/src/test/java/com/wisemapping/test/importer/FreeMindImportExportTest.java deleted file mode 100644 index 5945d4f0..00000000 --- a/wise-webapp/src/test/java/com/wisemapping/test/importer/FreeMindImportExportTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.wisemapping.test.importer; - -import com.wisemapping.exporter.ExportException; -import com.wisemapping.exporter.FreemindExporter; -import com.wisemapping.importer.ImportFormat; -import com.wisemapping.importer.Importer; -import com.wisemapping.importer.ImporterException; -import com.wisemapping.importer.ImporterFactory; -import com.wisemapping.model.Mindmap; -import org.apache.commons.io.FileUtils; -import org.jetbrains.annotations.NotNull; -import org.testng.Assert; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import java.io.*; -import java.nio.charset.StandardCharsets; - -@Test -public class FreeMindImportExportTest { - private static final String DATA_DIR_PATH = "src/test/resources/data/freemind/"; - private static final String UTF_8 = "UTF-8"; - final private Importer importer; - final private FreemindExporter exporter; - - public FreeMindImportExportTest() throws ImporterException { - ImporterFactory exporterFactory = ImporterFactory.getInstance(); - importer = exporterFactory.getImporter(ImportFormat.FREEMIND); - exporter = new FreemindExporter(); - } - - - @Test(dataProvider = "Data-Provider-Function") - public void exportImportTest(@NotNull final File freeMindFile, @NotNull final File wiseFile, @NotNull final File freeRecFile) throws ImporterException, IOException, ExportException { - final FileInputStream fileInputStream = new FileInputStream(freeMindFile.getAbsolutePath()); - final Mindmap mindMap = importer.importMap("basic", "basic", fileInputStream); - - - // Compare mindmap output ... - if (wiseFile.exists()) { - // Compare rec and file ... - // Load rec file co - final String recContent = FileUtils.readFileToString(wiseFile, UTF_8); - - // Export mile content ... - Assert.assertEquals(mindMap.getXmlStr(), recContent); - - } else { - final FileOutputStream fos = new FileOutputStream(wiseFile); - fos.write(mindMap.getXmlStr().getBytes(StandardCharsets.UTF_8)); - fos.close(); - } - - // Compare freemind output ... - if (freeRecFile.exists()) { - // Compare rec and file ... - // Load rec file co - final String recContent = FileUtils.readFileToString(freeRecFile, UTF_8); - - // Export content ... - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - exporter.export(mindMap, bos); - - Assert.assertEquals(bos.toString(StandardCharsets.UTF_8), recContent); - - } else { - final FileOutputStream fos = new FileOutputStream(freeRecFile); - exporter.export(mindMap, fos); - fos.close(); - } - } - - //This function will provide the parameter data - @DataProvider(name = "Data-Provider-Function") - public Object[][] parameterIntTestProvider() { - - final String testNameToRun = System.getProperty("wise.test.name"); - - final File dataDir = new File(DATA_DIR_PATH); - final File[] freeMindFiles = dataDir.listFiles(new FilenameFilter() { - - public boolean accept(File dir, String name) { - return name.endsWith(".mm") && (testNameToRun == null || name.startsWith(testNameToRun)); - } - }); - - final Object[][] result = new Object[freeMindFiles.length][2]; - for (int i = 0; i < freeMindFiles.length; i++) { - File freeMindFile = freeMindFiles[i]; - final String name = freeMindFile.getName(); - String testName = name.substring(0, name.lastIndexOf(".")); - result[i] = new Object[]{freeMindFile, new File(DATA_DIR_PATH, testName + ".wxml"), new File(DATA_DIR_PATH, testName + ".mmr")}; - } - - return result; - } - - -} diff --git a/wise-webapp/src/test/java/com/wisemapping/test/importer/VersionComparisonTest.java b/wise-webapp/src/test/java/com/wisemapping/test/importer/VersionComparisonTest.java deleted file mode 100644 index 8a9b89d8..00000000 --- a/wise-webapp/src/test/java/com/wisemapping/test/importer/VersionComparisonTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.wisemapping.test.importer; - -import com.wisemapping.importer.ImporterException; -import com.wisemapping.importer.VersionNumber; -import org.testng.Assert; -import org.testng.annotations.Test; - -@Test -public class VersionComparisonTest { - - @Test - public void compareVersionTest() throws ImporterException { - - final VersionNumber greatest = new VersionNumber("1.0.1"); - final VersionNumber smaller = new VersionNumber("0.9.0"); - final VersionNumber intermediate = new VersionNumber("1.0.0"); - - Assert.assertTrue(smaller.isSmallerThan(intermediate)); - Assert.assertFalse(greatest.isSmallerThan(intermediate)); - - Assert.assertTrue(greatest.isGreaterThan(smaller)); - Assert.assertFalse(intermediate.isGreaterThan(greatest)); - - Assert.assertTrue(intermediate.equals(intermediate)); - Assert.assertFalse(greatest.equals(smaller)); - - } - -}