mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-22 06:07:57 +01:00
Freemind Import/Export, supporting relationship lines
This commit is contained in:
parent
67d2954f9e
commit
be4cebf64b
@ -23,10 +23,8 @@ import com.wisemapping.exporter.ExportException;
|
|||||||
import com.wisemapping.exporter.Exporter;
|
import com.wisemapping.exporter.Exporter;
|
||||||
import com.wisemapping.model.MindMap;
|
import com.wisemapping.model.MindMap;
|
||||||
import com.wisemapping.util.JAXBUtils;
|
import com.wisemapping.util.JAXBUtils;
|
||||||
import com.wisemapping.xml.freemind.Font;
|
import com.wisemapping.xml.freemind.*;
|
||||||
import com.wisemapping.xml.freemind.Node;
|
import com.wisemapping.xml.mindmap.RelationshipType;
|
||||||
import com.wisemapping.xml.freemind.Edge;
|
|
||||||
import com.wisemapping.xml.freemind.Hook;
|
|
||||||
import com.wisemapping.xml.mindmap.TopicType;
|
import com.wisemapping.xml.mindmap.TopicType;
|
||||||
import com.wisemapping.xml.mindmap.Icon;
|
import com.wisemapping.xml.mindmap.Icon;
|
||||||
|
|
||||||
@ -35,13 +33,16 @@ import java.io.IOException;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class FreemindExporter
|
public class FreemindExporter
|
||||||
implements Exporter
|
implements Exporter
|
||||||
{
|
{
|
||||||
|
|
||||||
private com.wisemapping.xml.freemind.ObjectFactory freemindObjectFactory;
|
private com.wisemapping.xml.freemind.ObjectFactory freemindObjectFactory;
|
||||||
|
private Map<String, Node> nodesMap = null;
|
||||||
|
|
||||||
public void export(MindMap map, OutputStream outputStream) throws ExportException {
|
public void export(MindMap map, OutputStream outputStream) throws ExportException {
|
||||||
try {
|
try {
|
||||||
@ -54,6 +55,7 @@ public class FreemindExporter
|
|||||||
public void export(byte[] xml, OutputStream outputStream) throws ExportException {
|
public void export(byte[] xml, OutputStream outputStream) throws ExportException {
|
||||||
|
|
||||||
freemindObjectFactory = new com.wisemapping.xml.freemind.ObjectFactory();
|
freemindObjectFactory = new com.wisemapping.xml.freemind.ObjectFactory();
|
||||||
|
nodesMap = new HashMap<String, Node>();
|
||||||
final com.wisemapping.xml.mindmap.Map mindmapMap;
|
final com.wisemapping.xml.mindmap.Map mindmapMap;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -85,9 +87,21 @@ public class FreemindExporter
|
|||||||
freemindMap.setNode(main);
|
freemindMap.setNode(main);
|
||||||
if (centerTopic != null)
|
if (centerTopic != null)
|
||||||
{
|
{
|
||||||
|
nodesMap.put(centerTopic.getId(), main);
|
||||||
setTopicPropertiesToNode(main,centerTopic);
|
setTopicPropertiesToNode(main,centerTopic);
|
||||||
addNodeFromTopic(centerTopic,main);
|
addNodeFromTopic(centerTopic,main);
|
||||||
}
|
}
|
||||||
|
List<RelationshipType> relationships = mindmapMap.getRelationship();
|
||||||
|
for(RelationshipType relationship : relationships){
|
||||||
|
Node srcNode = nodesMap.get(relationship.getSrcTopicId());
|
||||||
|
Arrowlink arrowlink = freemindObjectFactory.createArrowlink();
|
||||||
|
Node dstNode = nodesMap.get(relationship.getDestTopicId());
|
||||||
|
arrowlink.setDESTINATION(dstNode.getID());
|
||||||
|
if(relationship.isEndArrow())
|
||||||
|
arrowlink.setENDARROW("Default");
|
||||||
|
List<Object> cloudOrEdge = srcNode.getArrowlinkOrCloudOrEdge();
|
||||||
|
cloudOrEdge.add(arrowlink);
|
||||||
|
}
|
||||||
|
|
||||||
JAXBUtils.saveMap(freemindMap,outputStream,"com.wisemapping.xml.freemind");
|
JAXBUtils.saveMap(freemindMap,outputStream,"com.wisemapping.xml.freemind");
|
||||||
} catch (JAXBException e) {
|
} catch (JAXBException e) {
|
||||||
@ -101,6 +115,7 @@ public class FreemindExporter
|
|||||||
|
|
||||||
for (TopicType topicType : currentTopic) {
|
for (TopicType topicType : currentTopic) {
|
||||||
final Node newNode = freemindObjectFactory.createNode();
|
final Node newNode = freemindObjectFactory.createNode();
|
||||||
|
nodesMap.put(topicType.getId(), newNode);
|
||||||
setTopicPropertiesToNode(newNode,topicType);
|
setTopicPropertiesToNode(newNode,topicType);
|
||||||
destNode.getArrowlinkOrCloudOrEdge().add(newNode);
|
destNode.getArrowlinkOrCloudOrEdge().add(newNode);
|
||||||
addNodeFromTopic(topicType,newNode);
|
addNodeFromTopic(topicType,newNode);
|
||||||
@ -109,6 +124,7 @@ public class FreemindExporter
|
|||||||
|
|
||||||
private void setTopicPropertiesToNode(com.wisemapping.xml.freemind.Node freemindNode, com.wisemapping.xml.mindmap.TopicType mindmapTopic)
|
private void setTopicPropertiesToNode(com.wisemapping.xml.freemind.Node freemindNode, com.wisemapping.xml.mindmap.TopicType mindmapTopic)
|
||||||
{
|
{
|
||||||
|
freemindNode.setID("ID_"+mindmapTopic.getId());
|
||||||
freemindNode.setTEXT(mindmapTopic.getText());
|
freemindNode.setTEXT(mindmapTopic.getText());
|
||||||
freemindNode.setBACKGROUNDCOLOR(mindmapTopic.getBgColor());
|
freemindNode.setBACKGROUNDCOLOR(mindmapTopic.getBgColor());
|
||||||
String style = "line"; // default style for freemind
|
String style = "line"; // default style for freemind
|
||||||
@ -122,7 +138,9 @@ public class FreemindExporter
|
|||||||
addFontNode(freemindNode,mindmapTopic);
|
addFontNode(freemindNode,mindmapTopic);
|
||||||
addEdgeNode(freemindNode,mindmapTopic);
|
addEdgeNode(freemindNode,mindmapTopic);
|
||||||
addNote(freemindNode,mindmapTopic);
|
addNote(freemindNode,mindmapTopic);
|
||||||
|
Boolean shrink = mindmapTopic.isShrink();
|
||||||
|
if(shrink!=null && shrink)
|
||||||
|
freemindNode.setFOLDED(String.valueOf(shrink));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addNote(com.wisemapping.xml.freemind.Node freemindNode,com.wisemapping.xml.mindmap.TopicType mindmapTopic)
|
private void addNote(com.wisemapping.xml.freemind.Node freemindNode,com.wisemapping.xml.mindmap.TopicType mindmapTopic)
|
||||||
|
@ -27,7 +27,9 @@ import com.wisemapping.model.ShapeStyle;
|
|||||||
import com.wisemapping.model.MindMapNative;
|
import com.wisemapping.model.MindMapNative;
|
||||||
import com.wisemapping.util.JAXBUtils;
|
import com.wisemapping.util.JAXBUtils;
|
||||||
import com.wisemapping.xml.freemind.*;
|
import com.wisemapping.xml.freemind.*;
|
||||||
|
import com.wisemapping.xml.freemind.Map;
|
||||||
import com.wisemapping.xml.freemind.Node;
|
import com.wisemapping.xml.freemind.Node;
|
||||||
|
import com.wisemapping.xml.mindmap.RelationshipType;
|
||||||
import com.wisemapping.xml.mindmap.TopicType;
|
import com.wisemapping.xml.mindmap.TopicType;
|
||||||
import com.wisemapping.xml.mindmap.Link;
|
import com.wisemapping.xml.mindmap.Link;
|
||||||
import org.w3c.dom.*;
|
import org.w3c.dom.*;
|
||||||
@ -36,8 +38,7 @@ import javax.xml.bind.JAXBException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
|
|
||||||
public class FreemindImporter
|
public class FreemindImporter
|
||||||
@ -49,6 +50,9 @@ public class FreemindImporter
|
|||||||
private static final String BOLD = "bold";
|
private static final String BOLD = "bold";
|
||||||
private static final String ITALIC = "italic";
|
private static final String ITALIC = "italic";
|
||||||
private static final String EMPTY_NOTE = "";
|
private static final String EMPTY_NOTE = "";
|
||||||
|
private java.util.Map<String, TopicType> nodesMap = null;
|
||||||
|
private List<RelationshipType> relationships = null;
|
||||||
|
private int currentId;
|
||||||
|
|
||||||
public MindMap importMap(String mapName,String description,InputStream input) throws ImporterException {
|
public MindMap importMap(String mapName,String description,InputStream input) throws ImporterException {
|
||||||
|
|
||||||
@ -58,19 +62,25 @@ public class FreemindImporter
|
|||||||
final Map freemindMap = (Map) JAXBUtils.getMapObject(input,"com.wisemapping.xml.freemind");
|
final Map freemindMap = (Map) JAXBUtils.getMapObject(input,"com.wisemapping.xml.freemind");
|
||||||
|
|
||||||
final com.wisemapping.xml.mindmap.Map mindmapMap = mindmapObjectFactory.createMap();
|
final com.wisemapping.xml.mindmap.Map mindmapMap = mindmapObjectFactory.createMap();
|
||||||
|
mindmapMap.setVersion("pela");
|
||||||
|
currentId=0;
|
||||||
|
|
||||||
final Node centralNode = freemindMap.getNode();
|
final Node centralNode = freemindMap.getNode();
|
||||||
final TopicType centralTopic = mindmapObjectFactory.createTopicType();
|
final TopicType centralTopic = mindmapObjectFactory.createTopicType();
|
||||||
|
centralTopic.setId(String.valueOf(currentId++));
|
||||||
centralTopic.setCentral(true);
|
centralTopic.setCentral(true);
|
||||||
|
|
||||||
setNodePropertiesToTopic(centralTopic,centralNode);
|
setNodePropertiesToTopic(centralTopic,centralNode);
|
||||||
centralTopic.setShape(ShapeStyle.ELIPSE.getStyle());
|
centralTopic.setShape(ShapeStyle.ELIPSE.getStyle());
|
||||||
mindmapMap.getTopic().add(centralTopic);
|
mindmapMap.getTopic().add(centralTopic);
|
||||||
mindmapMap.setName(mapName);
|
mindmapMap.setName(mapName);
|
||||||
|
nodesMap = new HashMap<String, TopicType>();
|
||||||
|
relationships = new ArrayList<RelationshipType>();
|
||||||
addTopicFromNode(centralNode,centralTopic);
|
addTopicFromNode(centralNode,centralTopic);
|
||||||
fixCentralTopicChildOrder(centralTopic);
|
fixCentralTopicChildOrder(centralTopic);
|
||||||
|
|
||||||
|
addRelationships(mindmapMap);
|
||||||
|
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
JAXBUtils.saveMap(mindmapMap,out,"com.wisemapping.xml.mindmap");
|
JAXBUtils.saveMap(mindmapMap,out,"com.wisemapping.xml.mindmap");
|
||||||
|
|
||||||
@ -89,6 +99,17 @@ public class FreemindImporter
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addRelationships(com.wisemapping.xml.mindmap.Map mindmapMap) {
|
||||||
|
List<RelationshipType> mapRelationships = mindmapMap.getRelationship();
|
||||||
|
for(RelationshipType relationship : relationships){
|
||||||
|
relationship.setId(String.valueOf(currentId++));
|
||||||
|
String destId = relationship.getDestTopicId();
|
||||||
|
TopicType destTopic = nodesMap.get(destId);
|
||||||
|
relationship.setDestTopicId(destTopic.getId());
|
||||||
|
mapRelationships.add(relationship);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void fixCentralTopicChildOrder(TopicType centralTopic){
|
private void fixCentralTopicChildOrder(TopicType centralTopic){
|
||||||
List<TopicType> topics = centralTopic.getTopic();
|
List<TopicType> topics = centralTopic.getTopic();
|
||||||
List<TopicType> leftTopics = new ArrayList<TopicType>();
|
List<TopicType> leftTopics = new ArrayList<TopicType>();
|
||||||
@ -178,6 +199,8 @@ public class FreemindImporter
|
|||||||
{
|
{
|
||||||
final Node node = (Node) freemindNode;
|
final Node node = (Node) freemindNode;
|
||||||
TopicType newTopic = mindmapObjectFactory.createTopicType();
|
TopicType newTopic = mindmapObjectFactory.createTopicType();
|
||||||
|
newTopic.setId(String.valueOf(currentId++));
|
||||||
|
nodesMap.put(node.getID(), newTopic); //Lets use freemind id temporarily. This will be fixed when adding relationship to the map.
|
||||||
newTopic.setOrder(order++);
|
newTopic.setOrder(order++);
|
||||||
String url = node.getLINK();
|
String url = node.getLINK();
|
||||||
if (url != null)
|
if (url != null)
|
||||||
@ -245,6 +268,20 @@ public class FreemindImporter
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (freemindNode instanceof Arrowlink){
|
||||||
|
final Arrowlink arrow = (Arrowlink) freemindNode;
|
||||||
|
RelationshipType relationship = mindmapObjectFactory.createRelationshipType();
|
||||||
|
String destId = arrow.getDESTINATION();
|
||||||
|
relationship.setSrcTopicId(currentTopic.getId());
|
||||||
|
relationship.setDestTopicId(destId);
|
||||||
|
/*String[] inclination = arrow.getENDINCLINATION().split(";");
|
||||||
|
relationship.setDestCtrlPoint(inclination[0]+","+inclination[1]);
|
||||||
|
inclination = arrow.getSTARTINCLINATION().split(";");
|
||||||
|
relationship.setSrcCtrlPoint(inclination[0]+","+inclination[1]);*/
|
||||||
|
relationship.setEndArrow(!arrow.getENDARROW().equals("None"));
|
||||||
|
relationship.setLineType("3");
|
||||||
|
relationships.add(relationship);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user