mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-12-24 12:13:49 +01:00
freemind constant
This commit is contained in:
parent
c83f4bd213
commit
7ee42468bd
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
package com.wisemapping.exporter;
|
package com.wisemapping.exporter;
|
||||||
|
|
||||||
|
import com.wisemapping.importer.VersionNumber;
|
||||||
import org.apache.batik.parser.AWTTransformProducer;
|
import org.apache.batik.parser.AWTTransformProducer;
|
||||||
import org.apache.batik.parser.ParseException;
|
import org.apache.batik.parser.ParseException;
|
||||||
import org.apache.batik.parser.TransformListParser;
|
import org.apache.batik.parser.TransformListParser;
|
||||||
@ -142,7 +143,7 @@ public class ExporterFactory {
|
|||||||
}
|
}
|
||||||
case FREEMIND: {
|
case FREEMIND: {
|
||||||
final FreemindExporter exporter = new FreemindExporter();
|
final FreemindExporter exporter = new FreemindExporter();
|
||||||
exporter.setVersion(properties.getVersion());
|
exporter.setVersion(new VersionNumber(properties.getVersion()));
|
||||||
exporter.export(xml.getBytes(UTF_8_CHARSET_NAME), output);
|
exporter.export(xml.getBytes(UTF_8_CHARSET_NAME), output);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
package com.wisemapping.exporter;
|
package com.wisemapping.exporter;
|
||||||
|
|
||||||
|
|
||||||
|
import com.wisemapping.importer.VersionNumber;
|
||||||
|
import com.wisemapping.importer.freemind.FreemindConstant;
|
||||||
import com.wisemapping.importer.freemind.FreemindIconConverter;
|
import com.wisemapping.importer.freemind.FreemindIconConverter;
|
||||||
import com.wisemapping.jaxb.wisemap.Note;
|
import com.wisemapping.jaxb.wisemap.Note;
|
||||||
import com.wisemapping.model.Mindmap;
|
import com.wisemapping.model.Mindmap;
|
||||||
@ -50,12 +52,10 @@ import java.util.Map;
|
|||||||
public class FreemindExporter
|
public class FreemindExporter
|
||||||
implements Exporter {
|
implements Exporter {
|
||||||
|
|
||||||
private static final String POSITION_LEFT = "left";
|
|
||||||
private static final String POSITION_RIGHT = "right";
|
|
||||||
private com.wisemapping.jaxb.freemind.ObjectFactory objectFactory;
|
private com.wisemapping.jaxb.freemind.ObjectFactory objectFactory;
|
||||||
private static final String EMPTY_FONT_STYLE = ";;;;;";
|
|
||||||
private Map<String, Node> nodesMap = null;
|
private Map<String, Node> nodesMap = null;
|
||||||
private String version = "1.0.1";
|
private VersionNumber version = FreemindConstant.SUPPORTED_FREEMIND_VERSION;
|
||||||
|
|
||||||
public void export(Mindmap map, OutputStream outputStream) throws ExportException {
|
public void export(Mindmap map, OutputStream outputStream) throws ExportException {
|
||||||
export(map.getUnzipXml(), outputStream);
|
export(map.getUnzipXml(), outputStream);
|
||||||
@ -72,7 +72,7 @@ public class FreemindExporter
|
|||||||
mindmapMap = (com.wisemapping.jaxb.wisemap.Map) JAXBUtils.getMapObject(stream, "com.wisemapping.jaxb.wisemap");
|
mindmapMap = (com.wisemapping.jaxb.wisemap.Map) JAXBUtils.getMapObject(stream, "com.wisemapping.jaxb.wisemap");
|
||||||
|
|
||||||
final com.wisemapping.jaxb.freemind.Map freemindMap = objectFactory.createMap();
|
final com.wisemapping.jaxb.freemind.Map freemindMap = objectFactory.createMap();
|
||||||
freemindMap.setVersion(this.getVersion());
|
freemindMap.setVersion(this.getVersionNumber());
|
||||||
|
|
||||||
final List<TopicType> topics = mindmapMap.getTopic();
|
final List<TopicType> topics = mindmapMap.getTopic();
|
||||||
|
|
||||||
@ -152,9 +152,9 @@ public class FreemindExporter
|
|||||||
if (position != null) {
|
if (position != null) {
|
||||||
String xPos = position.split(",")[0];
|
String xPos = position.split(",")[0];
|
||||||
int x = Integer.valueOf(xPos);
|
int x = Integer.valueOf(xPos);
|
||||||
newNode.setPOSITION((x < 0 ? POSITION_LEFT : POSITION_RIGHT));
|
newNode.setPOSITION((x < 0 ? FreemindConstant.POSITION_LEFT : FreemindConstant.POSITION_RIGHT));
|
||||||
} else {
|
} else {
|
||||||
newNode.setPOSITION(POSITION_LEFT);
|
newNode.setPOSITION(FreemindConstant.POSITION_LEFT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -279,7 +279,7 @@ public class FreemindExporter
|
|||||||
int countParts = part.length;
|
int countParts = part.length;
|
||||||
boolean updated = false;
|
boolean updated = false;
|
||||||
|
|
||||||
if (!fontStyle.endsWith(EMPTY_FONT_STYLE)) {
|
if (!fontStyle.endsWith(FreemindConstant.EMPTY_FONT_STYLE)) {
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
// Font name
|
// Font name
|
||||||
@ -345,11 +345,15 @@ public class FreemindExporter
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getVersion() {
|
public VersionNumber getVersion() {
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVersion(String version) {
|
public void setVersion(VersionNumber version) {
|
||||||
this.version = version;
|
this.version = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getVersionNumber() {
|
||||||
|
return this.getVersion().getVersion();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
|
|
||||||
|
}
|
@ -44,38 +44,17 @@ import java.io.InputStream;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
|
||||||
public class FreemindImporter
|
public class FreemindImporter
|
||||||
implements Importer {
|
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 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<String, TopicType> nodesMap = null;
|
private java.util.Map<String, TopicType> nodesMap = null;
|
||||||
private List<RelationshipType> relationships = null;
|
private List<RelationshipType> 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 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[]) {
|
public static void main(String argv[]) {
|
||||||
|
|
||||||
@ -120,7 +99,7 @@ public class FreemindImporter
|
|||||||
if (version != null) {
|
if (version != null) {
|
||||||
|
|
||||||
final VersionNumber mapVersion = new VersionNumber(version);
|
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.");
|
throw new ImporterException("FreeMind version " + mapVersion.getVersion() + " is not supported.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,7 +108,7 @@ public class FreemindImporter
|
|||||||
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
|
||||||
final com.wisemapping.jaxb.wisemap.Map mindmapMap = mindmapObjectFactory.createMap();
|
final com.wisemapping.jaxb.wisemap.Map mindmapMap = mindmapObjectFactory.createMap();
|
||||||
mindmapMap.setVersion(CODE_VERSION);
|
mindmapMap.setVersion(FreemindConstant.CODE_VERSION);
|
||||||
currentId = 0;
|
currentId = 0;
|
||||||
|
|
||||||
final Node freeNode = freemindMap.getNode();
|
final Node freeNode = freemindMap.getNode();
|
||||||
@ -150,7 +129,7 @@ public class FreemindImporter
|
|||||||
addRelationships(mindmapMap);
|
addRelationships(mindmapMap);
|
||||||
|
|
||||||
JAXBUtils.saveMap(mindmapMap, baos);
|
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.setXmlStr(wiseXml);
|
||||||
result.setTitle(mapName);
|
result.setTitle(mapName);
|
||||||
result.setDescription(description);
|
result.setDescription(description);
|
||||||
@ -248,7 +227,7 @@ public class FreemindImporter
|
|||||||
if (depth != 1) {
|
if (depth != 1) {
|
||||||
norder = order++;
|
norder = order++;
|
||||||
} else {
|
} else {
|
||||||
if (freeChild.getPOSITION() != null && freeChild.getPOSITION().equals(POSITION_LEFT)) {
|
if (freeChild.getPOSITION() != null && freeChild.getPOSITION().equals(FreemindConstant.POSITION_LEFT)) {
|
||||||
norder = firstLevelLeftOrder;
|
norder = firstLevelLeftOrder;
|
||||||
firstLevelLeftOrder = firstLevelLeftOrder + 2;
|
firstLevelLeftOrder = firstLevelLeftOrder + 2;
|
||||||
} else {
|
} else {
|
||||||
@ -299,7 +278,7 @@ public class FreemindImporter
|
|||||||
String textNote = hook.getText();
|
String textNote = hook.getText();
|
||||||
if (textNote == null) // It is not a note is a BlinkingNodeHook or AutomaticLayout Hook
|
if (textNote == null) // It is not a note is a BlinkingNodeHook or AutomaticLayout Hook
|
||||||
{
|
{
|
||||||
textNote = EMPTY_NOTE;
|
textNote = FreemindConstant.EMPTY_NOTE;
|
||||||
mindmapNote.setValue(textNote);
|
mindmapNote.setValue(textNote);
|
||||||
currentWiseTopic.setNote(mindmapNote);
|
currentWiseTopic.setNote(mindmapNote);
|
||||||
}
|
}
|
||||||
@ -307,13 +286,13 @@ public class FreemindImporter
|
|||||||
final Richcontent content = (Richcontent) element;
|
final Richcontent content = (Richcontent) element;
|
||||||
final String type = content.getTYPE();
|
final String type = content.getTYPE();
|
||||||
|
|
||||||
if (type.equals(NODE_TYPE)) {
|
if (type.equals(FreemindConstant.NODE_TYPE)) {
|
||||||
String text = html2text(content);
|
String text = html2text(content);
|
||||||
currentWiseTopic.setText(text);
|
currentWiseTopic.setText(text);
|
||||||
} else {
|
} else {
|
||||||
String text = html2text(content);
|
String text = html2text(content);
|
||||||
final com.wisemapping.jaxb.wisemap.Note mindmapNote = new com.wisemapping.jaxb.wisemap.Note();
|
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);
|
mindmapNote.setValue(text);
|
||||||
currentWiseTopic.setNote(mindmapNote);
|
currentWiseTopic.setNote(mindmapNote);
|
||||||
|
|
||||||
@ -355,7 +334,7 @@ public class FreemindImporter
|
|||||||
int result = 0;
|
int result = 0;
|
||||||
String childSide = freeChild.getPOSITION();
|
String childSide = freeChild.getPOSITION();
|
||||||
if (childSide == null) {
|
if (childSide == null) {
|
||||||
childSide = POSITION_RIGHT;
|
childSide = FreemindConstant.POSITION_RIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count all the nodes of the same side ...
|
// Count all the nodes of the same side ...
|
||||||
@ -365,7 +344,7 @@ public class FreemindImporter
|
|||||||
|
|
||||||
String side = node.getPOSITION();
|
String side = node.getPOSITION();
|
||||||
if (side == null) {
|
if (side == null) {
|
||||||
side = POSITION_RIGHT;
|
side = FreemindConstant.POSITION_RIGHT;
|
||||||
}
|
}
|
||||||
if (childSide.equals(side)) {
|
if (childSide.equals(side)) {
|
||||||
result++;
|
result++;
|
||||||
@ -390,11 +369,11 @@ public class FreemindImporter
|
|||||||
|
|
||||||
// Problem on setting X position:
|
// Problem on setting X position:
|
||||||
// Text Size is not taken into account ...
|
// 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) {
|
if (depth == 1) {
|
||||||
|
|
||||||
final String side = freeChild.getPOSITION();
|
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 {
|
} else {
|
||||||
final Coord coord = Coord.parse(wiseParent.getPosition());
|
final Coord coord = Coord.parse(wiseParent.getPosition());
|
||||||
x = x * (coord.isOnLeftSide() ? -1 : 1);
|
x = x * (coord.isOnLeftSide() ? -1 : 1);
|
||||||
@ -409,17 +388,17 @@ public class FreemindImporter
|
|||||||
// odd order numbers represent nodes at the left
|
// odd order numbers represent nodes at the left
|
||||||
if (order % 2 == 0) {
|
if (order % 2 == 0) {
|
||||||
int multiplier = ((order + 1) - childrenCount) * 2;
|
int multiplier = ((order + 1) - childrenCount) * 2;
|
||||||
y = multiplier * ROOT_LEVEL_TOPIC_HEIGHT;
|
y = multiplier * FreemindConstant.ROOT_LEVEL_TOPIC_HEIGHT;
|
||||||
} else {
|
} else {
|
||||||
int multiplier = (order - childrenCount) * 2;
|
int multiplier = (order - childrenCount) * 2;
|
||||||
y = multiplier * ROOT_LEVEL_TOPIC_HEIGHT;
|
y = multiplier * FreemindConstant.ROOT_LEVEL_TOPIC_HEIGHT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Problem: What happen if the node is more tall than what is defined here.
|
// Problem: What happen if the node is more tall than what is defined here.
|
||||||
Coord coord = Coord.parse(wiseParent.getPosition());
|
Coord coord = Coord.parse(wiseParent.getPosition());
|
||||||
int parentY = coord.y;
|
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
|
// 10 Large
|
||||||
// 15 Huge
|
// 15 Huge
|
||||||
if (font != null) {
|
if (font != null) {
|
||||||
final int fontSize = ((font.getSIZE() == null || font.getSIZE().intValue() < 8) ? BigInteger.valueOf(FONT_SIZE_NORMAL) : font.getSIZE()).intValue();
|
final int fontSize = ((font.getSIZE() == null || font.getSIZE().intValue() < 8) ? BigInteger.valueOf(FreemindConstant.FONT_SIZE_NORMAL) : font.getSIZE()).intValue();
|
||||||
int wiseFontSize = FONT_SIZE_SMALL;
|
int wiseFontSize = FreemindConstant.FONT_SIZE_SMALL;
|
||||||
if (fontSize >= 24) {
|
if (fontSize >= 24) {
|
||||||
wiseFontSize = FONT_SIZE_HUGE;
|
wiseFontSize = FreemindConstant.FONT_SIZE_HUGE;
|
||||||
} else if (fontSize >= 16) {
|
} else if (fontSize >= 16) {
|
||||||
wiseFontSize = FONT_SIZE_LARGE;
|
wiseFontSize = FreemindConstant.FONT_SIZE_LARGE;
|
||||||
} else if (fontSize >= 12) {
|
} else if (fontSize >= 12) {
|
||||||
wiseFontSize = FONT_SIZE_NORMAL;
|
wiseFontSize = FreemindConstant.FONT_SIZE_NORMAL;
|
||||||
}
|
}
|
||||||
fontStyle.append(wiseFontSize);
|
fontStyle.append(wiseFontSize);
|
||||||
|
|
||||||
@ -575,19 +554,19 @@ public class FreemindImporter
|
|||||||
// Bold ...
|
// Bold ...
|
||||||
if (font != null) {
|
if (font != null) {
|
||||||
boolean hasBold = Boolean.parseBoolean(font.getBOLD());
|
boolean hasBold = Boolean.parseBoolean(font.getBOLD());
|
||||||
fontStyle.append(hasBold ? BOLD : "");
|
fontStyle.append(hasBold ? FreemindConstant.BOLD : "");
|
||||||
}
|
}
|
||||||
fontStyle.append(";");
|
fontStyle.append(";");
|
||||||
|
|
||||||
// Italic ...
|
// Italic ...
|
||||||
if (font != null) {
|
if (font != null) {
|
||||||
boolean hasItalic = Boolean.parseBoolean(font.getITALIC());
|
boolean hasItalic = Boolean.parseBoolean(font.getITALIC());
|
||||||
fontStyle.append(hasItalic ? ITALIC : "");
|
fontStyle.append(hasItalic ? FreemindConstant.ITALIC : "");
|
||||||
}
|
}
|
||||||
fontStyle.append(";");
|
fontStyle.append(";");
|
||||||
|
|
||||||
final String result = fontStyle.toString();
|
final String result = fontStyle.toString();
|
||||||
return result.equals(EMPTY_FONT_STYLE) ? null : result;
|
return result.equals(FreemindConstant.EMPTY_FONT_STYLE) ? null : result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private
|
private
|
||||||
|
Loading…
Reference in New Issue
Block a user