wisemapping-open-source/mindplot/src/main/javascript/XMLMindmapSerializer_Pela.js

380 lines
13 KiB
JavaScript
Raw Normal View History

2009-06-07 20:59:43 +02:00
/*
2011-07-27 19:53:32 +02:00
* 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.
*/
mindplot.XMLMindmapSerializer_Pela = new Class({
toXML : function(mindmap) {
$assert(mindmap, "Can not save a null mindmap");
var document = core.Utils.createDocument();
// Store map attributes ...
var mapElem = document.createElement("map");
var name = mindmap.getId();
if ($defined(name)) {
mapElem.setAttribute('name', name);
}
var version = mindmap.getVersion();
if ($defined(version)) {
mapElem.setAttribute('version', version);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
document.appendChild(mapElem);
// Create branches ...
var topics = mindmap.getBranches();
for (var i = 0; i < topics.length; i++) {
var topic = topics[i];
var topicDom = this._topicToXML(document, topic);
mapElem.appendChild(topicDom);
}
// Create Relationships
var relationships = mindmap.getRelationships();
if (relationships.length > 0) {
// var relationshipDom=document.createElement("relationships");
// mapElem.appendChild(relationshipDom);
2011-07-27 19:53:32 +02:00
for (var j = 0; j < relationships.length; j++) {
var relationDom = this._relationshipToXML(document, relationships[j]);
mapElem.appendChild(relationDom);
}
}
2011-07-27 19:53:32 +02:00
return document;
},
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
_topicToXML : function(document, topic) {
var parentTopic = document.createElement("topic");
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
// Set topic attributes...
if (topic.getType() == mindplot.model.NodeModel.CENTRAL_TOPIC_TYPE) {
2011-07-27 19:53:32 +02:00
parentTopic.setAttribute("central", true);
} else {
var parent = topic.getParent();
// if (parent == null || parent.getType() == mindplot.model.NodeModel.CENTRAL_TOPIC_TYPE)
2011-03-17 16:51:40 +01:00
// {
2009-06-07 20:59:43 +02:00
var pos = topic.getPosition();
parentTopic.setAttribute("position", pos.x + ',' + pos.y);
2011-03-17 16:51:40 +01:00
// } else
// {
2009-06-07 20:59:43 +02:00
var order = topic.getOrder();
parentTopic.setAttribute("order", order);
2011-03-17 16:51:40 +01:00
// }
2011-07-27 19:53:32 +02:00
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var text = topic.getText();
if ($defined(text)) {
parentTopic.setAttribute('text', text);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var shape = topic.getShapeType();
if ($defined(shape)) {
parentTopic.setAttribute('shape', shape);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if (topic.areChildrenShrinked()) {
parentTopic.setAttribute('shrink', true);
}
2011-07-27 19:53:32 +02:00
// Font properties ...
var id = topic.getId();
parentTopic.setAttribute('id', id);
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var font = "";
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var fontFamily = topic.getFontFamily();
font += (fontFamily ? fontFamily : '') + ';';
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var fontSize = topic.getFontSize();
font += (fontSize ? fontSize : '') + ';';
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var fontColor = topic.getFontColor();
font += (fontColor ? fontColor : '') + ';';
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var fontWeight = topic.getFontWeight();
font += (fontWeight ? fontWeight : '') + ';';
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var fontStyle = topic.getFontStyle();
font += (fontStyle ? fontStyle : '') + ';';
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if ($defined(fontFamily) || $defined(fontSize) || $defined(fontColor)
|| $defined(fontWeight) || $defined(fontStyle)) {
parentTopic.setAttribute('fontStyle', font);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var bgColor = topic.getBackgroundColor();
if ($defined(bgColor)) {
parentTopic.setAttribute('bgColor', bgColor);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var brColor = topic.getBorderColor();
if ($defined(brColor)) {
parentTopic.setAttribute('brColor', brColor);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
//ICONS
var icons = topic.getIcons();
for (var i = 0; i < icons.length; i++) {
var icon = icons[i];
var iconDom = this._iconToXML(document, icon);
parentTopic.appendChild(iconDom);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
//LINKS
var links = topic.getLinks();
for (var i = 0; i < links.length; i++) {
var link = links[i];
var linkDom = this._linkToXML(document, link);
parentTopic.appendChild(linkDom);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var notes = topic.getNotes();
for (var i = 0; i < notes.length; i++) {
var note = notes[i];
var noteDom = this._noteToXML(document, note);
parentTopic.appendChild(noteDom);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
//CHILDREN TOPICS
var childTopics = topic.getChildren();
for (var i = 0; i < childTopics.length; i++) {
var childTopic = childTopics[i];
var childDom = this._topicToXML(document, childTopic);
parentTopic.appendChild(childDom);
2009-06-07 20:59:43 +02:00
}
2011-07-27 19:53:32 +02:00
return parentTopic;
},
_iconToXML : function(document, icon) {
var iconDom = document.createElement("icon");
iconDom.setAttribute('id', icon.getIconType());
return iconDom;
},
_linkToXML : function(document, link) {
var linkDom = document.createElement("link");
linkDom.setAttribute('url', link.getUrl());
return linkDom;
},
_noteToXML : function(document, note) {
var noteDom = document.createElement("note");
noteDom.setAttribute('text', note.getText());
return noteDom;
},
_relationshipToXML : function(document, relationship) {
var relationDom = document.createElement("relationship");
relationDom.setAttribute("srcTopicId", relationship.getFromNode());
relationDom.setAttribute("destTopicId", relationship.getToNode());
var lineType = relationship.getLineType();
relationDom.setAttribute("lineType", lineType);
if (lineType == mindplot.ConnectionLine.CURVED || lineType == mindplot.ConnectionLine.SIMPLE_CURVED) {
if ($defined(relationship.getSrcCtrlPoint())) {
var srcPoint = relationship.getSrcCtrlPoint();
relationDom.setAttribute("srcCtrlPoint", srcPoint.x + "," + srcPoint.y);
}
if ($defined(relationship.getDestCtrlPoint())) {
var destPoint = relationship.getDestCtrlPoint();
relationDom.setAttribute("destCtrlPoint", destPoint.x + "," + destPoint.y);
}
}
2011-07-27 19:53:32 +02:00
relationDom.setAttribute("endArrow", relationship.getEndArrow());
relationDom.setAttribute("startArrow", relationship.getStartArrow());
return relationDom;
},
loadFromDom : function(dom) {
$assert(dom, "Dom can not be null");
var rootElem = dom.documentElement;
// Is a wisemap?.
$assert(rootElem.tagName == mindplot.XMLMindmapSerializer_Pela.MAP_ROOT_NODE, "This seem not to be a map document.");
this._idsMap = new Hash();
// Start the loading process ...
var mindmap = new mindplot.model.Mindmap();
2011-07-27 19:53:32 +02:00
var version = rootElem.getAttribute("version");
mindmap.setVersion(version);
var children = rootElem.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.nodeType == 1) {
switch (child.tagName) {
case "topic":
var topic = this._deserializeNode(child, mindmap);
mindmap.addBranch(topic);
break;
case "relationship":
var relationship = this._deserializeRelationship(child, mindmap);
if (relationship != null)
mindmap.addRelationship(relationship);
break;
}
}
2009-06-07 20:59:43 +02:00
}
2011-07-27 19:53:32 +02:00
this._idsMap = null;
return mindmap;
},
_deserializeNode : function(domElem, mindmap) {
var type = (domElem.getAttribute('central') != null) ? mindplot.model.NodeModel.CENTRAL_TOPIC_TYPE : mindplot.model.NodeModel.MAIN_TOPIC_TYPE;
2011-07-27 19:53:32 +02:00
// Load attributes...
var id = domElem.getAttribute('id');
if ($defined(id)) {
id = parseInt(id);
}
2011-04-08 16:31:40 +02:00
2011-07-27 19:53:32 +02:00
if (this._idsMap.has(id)) {
id = null;
} else {
this._idsMap.set(id, domElem);
}
2011-04-15 13:59:21 +02:00
2011-07-27 19:53:32 +02:00
var topic = mindmap.createNode(type, id);
2011-04-08 16:31:40 +02:00
2011-07-27 19:53:32 +02:00
var text = domElem.getAttribute('text');
if ($defined(text)) {
topic.setText(text);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var order = domElem.getAttribute('order');
if ($defined(order)) {
topic.setOrder(parseInt(order));
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var shape = domElem.getAttribute('shape');
if ($defined(shape)) {
topic.setShapeType(shape);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var isShrink = domElem.getAttribute('shrink');
if ($defined(isShrink)) {
topic.setChildrenShrinked(isShrink);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle)) {
var font = fontStyle.split(';');
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if (font[0]) {
topic.setFontFamily(font[0]);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if (font[1]) {
topic.setFontSize(font[1]);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if (font[2]) {
topic.setFontColor(font[2]);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if (font[3]) {
topic.setFontWeight(font[3]);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
if (font[4]) {
topic.setFontStyle(font[4]);
}
2009-06-07 20:59:43 +02:00
}
2011-07-27 19:53:32 +02:00
var bgColor = domElem.getAttribute('bgColor');
if ($defined(bgColor)) {
topic.setBackgroundColor(bgColor);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var borderColor = domElem.getAttribute('brColor');
if ($defined(borderColor)) {
topic.setBorderColor(borderColor);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
var position = domElem.getAttribute('position');
if ($defined(position)) {
var pos = position.split(',');
topic.setPosition(pos[0], pos[1]);
topic.setFinalPosition(pos[0], pos[1]);
}
2009-06-07 20:59:43 +02:00
2011-07-27 19:53:32 +02:00
//Creating icons and children nodes
var children = domElem.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.nodeType == 1) {
$assert(child.tagName == "topic" || child.tagName == "icon" || child.tagName == "link" || child.tagName == "note", 'Illegal node type:' + child.tagName);
if (child.tagName == "topic") {
var childTopic = this._deserializeNode(child, mindmap);
childTopic.connectTo(topic);
} else if (child.tagName == "icon") {
var icon = this._deserializeIcon(child, topic);
topic.addIcon(icon);
} else if (child.tagName == "link") {
var link = this._deserializeLink(child, topic);
topic.addLink(link);
} else if (child.tagName == "note") {
var note = this._deserializeNote(child, topic);
topic.addNote(note);
}
2009-06-07 20:59:43 +02:00
}
}
2011-07-27 19:53:32 +02:00
;
return topic;
},
_deserializeIcon : function(domElem, topic) {
return topic.createIcon(domElem.getAttribute("id"));
},
_deserializeLink : function(domElem, topic) {
return topic.createLink(domElem.getAttribute("url"));
},
_deserializeNote : function(domElem, topic) {
return topic.createNote(domElem.getAttribute("text"));
},
_deserializeRelationship : function(domElement, mindmap) {
var srcId = domElement.getAttribute("srcTopicId");
var destId = domElement.getAttribute("destTopicId");
var lineType = domElement.getAttribute("lineType");
var srcCtrlPoint = domElement.getAttribute("srcCtrlPoint");
var destCtrlPoint = domElement.getAttribute("destCtrlPoint");
var endArrow = domElement.getAttribute("endArrow");
var startArrow = domElement.getAttribute("startArrow");
//If for some reason a relationship lines has source and dest nodes the same, don't import it.
if (srcId == destId) {
return null;
}
var model = mindmap.createRelationship(srcId, destId);
model.setLineType(lineType);
if ($defined(srcCtrlPoint) && srcCtrlPoint != "") {
model.setSrcCtrlPoint(core.Point.fromString(srcCtrlPoint));
}
if ($defined(destCtrlPoint) && destCtrlPoint != "") {
model.setDestCtrlPoint(core.Point.fromString(destCtrlPoint));
}
model.setEndArrow(endArrow == "true");
model.setStartArrow(startArrow == "true");
return model;
2009-06-07 20:59:43 +02:00
}
2011-07-27 19:53:32 +02:00
});
mindplot.XMLMindmapSerializer_Pela.MAP_ROOT_NODE = 'map';