diff --git a/wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java b/wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java index bcbb5880..716dc2bf 100644 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java +++ b/wise-webapp/src/main/java/com/wisemapping/exporter/ExporterFactory.java @@ -18,6 +18,7 @@ package com.wisemapping.exporter; +import com.wisemapping.importer.VersionNumber; import org.apache.batik.parser.AWTTransformProducer; import org.apache.batik.parser.ParseException; import org.apache.batik.parser.TransformListParser; @@ -142,7 +143,7 @@ public class ExporterFactory { } case FREEMIND: { final FreemindExporter exporter = new FreemindExporter(); - exporter.setVersion(properties.getVersion()); + exporter.setVersion(new VersionNumber(properties.getVersion())); exporter.export(xml.getBytes(UTF_8_CHARSET_NAME), output); break; } 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 30850b4c..47003c98 100755 --- a/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java +++ b/wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java @@ -19,6 +19,8 @@ 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.wisemap.Note; import com.wisemapping.model.Mindmap; @@ -50,12 +52,10 @@ import java.util.Map; public class FreemindExporter implements Exporter { - private static final String POSITION_LEFT = "left"; - private static final String POSITION_RIGHT = "right"; + private com.wisemapping.jaxb.freemind.ObjectFactory objectFactory; - private static final String EMPTY_FONT_STYLE = ";;;;;"; private Map nodesMap = null; - private String version = "1.0.1"; + private VersionNumber version = FreemindConstant.SUPPORTED_FREEMIND_VERSION; public void export(Mindmap map, OutputStream outputStream) throws ExportException { export(map.getUnzipXml(), outputStream); @@ -72,7 +72,7 @@ public class FreemindExporter 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.getVersion()); + freemindMap.setVersion(this.getVersionNumber()); final List topics = mindmapMap.getTopic(); @@ -152,9 +152,9 @@ public class FreemindExporter if (position != null) { String xPos = position.split(",")[0]; int x = Integer.valueOf(xPos); - newNode.setPOSITION((x < 0 ? POSITION_LEFT : POSITION_RIGHT)); + newNode.setPOSITION((x < 0 ? FreemindConstant.POSITION_LEFT : FreemindConstant.POSITION_RIGHT)); } else { - newNode.setPOSITION(POSITION_LEFT); + newNode.setPOSITION(FreemindConstant.POSITION_LEFT); } } } @@ -279,7 +279,7 @@ public class FreemindExporter int countParts = part.length; boolean updated = false; - if (!fontStyle.endsWith(EMPTY_FONT_STYLE)) { + if (!fontStyle.endsWith(FreemindConstant.EMPTY_FONT_STYLE)) { int idx = 0; // Font name @@ -345,11 +345,15 @@ public class FreemindExporter } - public String getVersion() { + public VersionNumber getVersion() { return version; } - public void setVersion(String 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/importer/freemind/FreemindConstant.java b/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindConstant.java new file mode 100644 index 00000000..7c8f7d35 --- /dev/null +++ b/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindConstant.java @@ -0,0 +1,34 @@ +package com.wisemapping.importer.freemind; + +import com.wisemapping.importer.VersionNumber; + +import java.nio.charset.Charset; + +public interface FreemindConstant { + + public static final String LAST_SUPPORTED_FREEMIND_VERSION = "1.0.1"; + public static final VersionNumber SUPPORTED_FREEMIND_VERSION = new VersionNumber(LAST_SUPPORTED_FREEMIND_VERSION); + public static final String CODE_VERSION = "tango"; + + public static final int SECOND_LEVEL_TOPIC_HEIGHT = 25; + public static final int ROOT_LEVEL_TOPIC_HEIGHT = SECOND_LEVEL_TOPIC_HEIGHT; + public static final int CENTRAL_TO_TOPIC_DISTANCE = 200; + public static final int TOPIC_TO_TOPIC_DISTANCE = 90; + + public static final int FONT_SIZE_HUGE = 15; + public static final int FONT_SIZE_LARGE = 10; + public static final int FONT_SIZE_NORMAL = 8; + public static final int FONT_SIZE_SMALL = 6; + + public static final String NODE_TYPE = "NODE"; + public static final String BOLD = "bold"; + public static final String ITALIC = "italic"; + public static final String EMPTY_FONT_STYLE = ";;;;;"; + public static final String EMPTY_NOTE = ""; + + public static final String POSITION_LEFT = "left"; + public static final String POSITION_RIGHT = "right"; + + public final static Charset UTF_8_CHARSET = Charset.forName("UTF-8"); + +} 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 index ce8a24cd..52af8997 100755 --- a/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindImporter.java +++ b/wise-webapp/src/main/java/com/wisemapping/importer/freemind/FreemindImporter.java @@ -44,38 +44,17 @@ import java.io.InputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; -import java.nio.charset.Charset; import java.util.*; import java.math.BigInteger; public class FreemindImporter implements Importer { - public static final String CODE_VERSION = "tango"; - public static final int SECOND_LEVEL_TOPIC_HEIGHT = 25; - public static final int ROOT_LEVEL_TOPIC_HEIGHT = SECOND_LEVEL_TOPIC_HEIGHT; - public static final int CENTRAL_TO_TOPIC_DISTANCE = 200; - public static final int TOPIC_TO_TOPIC_DISTANCE = 90; - public static final String NODE_TYPE = "NODE"; private com.wisemapping.jaxb.wisemap.ObjectFactory mindmapObjectFactory; - private static final String POSITION_LEFT = "left"; - private static final String POSITION_RIGHT = "right"; - private static final String BOLD = "bold"; - private static final String ITALIC = "italic"; - private static final String EMPTY_NOTE = ""; private java.util.Map nodesMap = null; private List relationships = null; - private static final String EMPTY_FONT_STYLE = ";;;;;"; - private final static Charset UTF_8_CHARSET = Charset.forName("UTF-8"); - private final static int ORDER_SEPARATION_FACTOR = 2; - private static final VersionNumber SUPPORTED_FREEMIND_VERSION = new VersionNumber("1.0.1"); - private int currentId; - private static final int FONT_SIZE_HUGE = 15; - private static final int FONT_SIZE_LARGE = 10; - public static final int FONT_SIZE_NORMAL = 8; - private static final int FONT_SIZE_SMALL = 6; public static void main(String argv[]) { @@ -120,7 +99,7 @@ public class FreemindImporter if (version != null) { final VersionNumber mapVersion = new VersionNumber(version); - if (mapVersion.isGreaterThan(SUPPORTED_FREEMIND_VERSION)) { + if (mapVersion.isGreaterThan(FreemindConstant.SUPPORTED_FREEMIND_VERSION)) { throw new ImporterException("FreeMind version " + mapVersion.getVersion() + " is not supported."); } } @@ -129,7 +108,7 @@ public class FreemindImporter final ByteArrayOutputStream baos = new ByteArrayOutputStream(); final com.wisemapping.jaxb.wisemap.Map mindmapMap = mindmapObjectFactory.createMap(); - mindmapMap.setVersion(CODE_VERSION); + mindmapMap.setVersion(FreemindConstant.CODE_VERSION); currentId = 0; final Node freeNode = freemindMap.getNode(); @@ -150,7 +129,7 @@ public class FreemindImporter addRelationships(mindmapMap); JAXBUtils.saveMap(mindmapMap, baos); - wiseXml = new String(baos.toByteArray(), UTF_8_CHARSET); + wiseXml = new String(baos.toByteArray(), FreemindConstant.UTF_8_CHARSET); result.setXmlStr(wiseXml); result.setTitle(mapName); result.setDescription(description); @@ -248,7 +227,7 @@ public class FreemindImporter if (depth != 1) { norder = order++; } else { - if (freeChild.getPOSITION() != null && freeChild.getPOSITION().equals(POSITION_LEFT)) { + if (freeChild.getPOSITION() != null && freeChild.getPOSITION().equals(FreemindConstant.POSITION_LEFT)) { norder = firstLevelLeftOrder; firstLevelLeftOrder = firstLevelLeftOrder + 2; } else { @@ -299,7 +278,7 @@ public class FreemindImporter String textNote = hook.getText(); if (textNote == null) // It is not a note is a BlinkingNodeHook or AutomaticLayout Hook { - textNote = EMPTY_NOTE; + textNote = FreemindConstant.EMPTY_NOTE; mindmapNote.setValue(textNote); currentWiseTopic.setNote(mindmapNote); } @@ -307,13 +286,13 @@ public class FreemindImporter final Richcontent content = (Richcontent) element; final String type = content.getTYPE(); - if (type.equals(NODE_TYPE)) { + 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 : EMPTY_NOTE; + text = text != null ? text : FreemindConstant.EMPTY_NOTE; mindmapNote.setValue(text); currentWiseTopic.setNote(mindmapNote); @@ -355,7 +334,7 @@ public class FreemindImporter int result = 0; String childSide = freeChild.getPOSITION(); if (childSide == null) { - childSide = POSITION_RIGHT; + childSide = FreemindConstant.POSITION_RIGHT; } // Count all the nodes of the same side ... @@ -365,7 +344,7 @@ public class FreemindImporter String side = node.getPOSITION(); if (side == null) { - side = POSITION_RIGHT; + side = FreemindConstant.POSITION_RIGHT; } if (childSide.equals(side)) { result++; @@ -390,11 +369,11 @@ public class FreemindImporter // Problem on setting X position: // Text Size is not taken into account ... - int x = CENTRAL_TO_TOPIC_DISTANCE + ((depth - 1) * TOPIC_TO_TOPIC_DISTANCE); + 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 && POSITION_LEFT.equals(side) ? -1 : 1); + 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); @@ -409,17 +388,17 @@ public class FreemindImporter // odd order numbers represent nodes at the left if (order % 2 == 0) { int multiplier = ((order + 1) - childrenCount) * 2; - y = multiplier * ROOT_LEVEL_TOPIC_HEIGHT; + y = multiplier * FreemindConstant.ROOT_LEVEL_TOPIC_HEIGHT; } else { int multiplier = (order - childrenCount) * 2; - y = multiplier * ROOT_LEVEL_TOPIC_HEIGHT; + 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) * SECOND_LEVEL_TOPIC_HEIGHT - (order * SECOND_LEVEL_TOPIC_HEIGHT)); + y = parentY - ((childrenCount / 2) * FreemindConstant.SECOND_LEVEL_TOPIC_HEIGHT - (order * FreemindConstant.SECOND_LEVEL_TOPIC_HEIGHT)); } @@ -551,14 +530,14 @@ public class FreemindImporter // 10 Large // 15 Huge if (font != null) { - final int fontSize = ((font.getSIZE() == null || font.getSIZE().intValue() < 8) ? BigInteger.valueOf(FONT_SIZE_NORMAL) : font.getSIZE()).intValue(); - int wiseFontSize = FONT_SIZE_SMALL; + 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 = FONT_SIZE_HUGE; + wiseFontSize = FreemindConstant.FONT_SIZE_HUGE; } else if (fontSize >= 16) { - wiseFontSize = FONT_SIZE_LARGE; + wiseFontSize = FreemindConstant.FONT_SIZE_LARGE; } else if (fontSize >= 12) { - wiseFontSize = FONT_SIZE_NORMAL; + wiseFontSize = FreemindConstant.FONT_SIZE_NORMAL; } fontStyle.append(wiseFontSize); @@ -575,19 +554,19 @@ public class FreemindImporter // Bold ... if (font != null) { boolean hasBold = Boolean.parseBoolean(font.getBOLD()); - fontStyle.append(hasBold ? BOLD : ""); + fontStyle.append(hasBold ? FreemindConstant.BOLD : ""); } fontStyle.append(";"); // Italic ... if (font != null) { boolean hasItalic = Boolean.parseBoolean(font.getITALIC()); - fontStyle.append(hasItalic ? ITALIC : ""); + fontStyle.append(hasItalic ? FreemindConstant.ITALIC : ""); } fontStyle.append(";"); final String result = fontStyle.toString(); - return result.equals(EMPTY_FONT_STYLE) ? null : result; + return result.equals(FreemindConstant.EMPTY_FONT_STYLE) ? null : result; } private