Morphic BPMN serialization w/ traversing AND DESERIALIZATION
Morphic BPMN for diplom
by Adambasszer
HTML
<script src="http://chirp.scratchr.org/dl/experimental/JsMorphic/bpm/morphic.js"></script>
<script src="http://chirp.scratchr.org/dl/experimental/JsMorphic/bpm/bpmn.js"></script>
<p>
Serialization:
</p>
<canvas id="world1" tabindex="1" width="700" height="200">
<p>
Your browser doesn't support canvas.
</p>
</canvas>
<p>
Deserialization:
</p>
<canvas id="world2" tabindex="2" width="700" height="400">
<p>
Your browser doesn't support canvas.
</p>
</canvas>
JavaScript
var world1, world2;
window.onload = function() {
initialize();
var acc = [];
traverse(world1, serialize, acc);
};
function loop() {
world1.doOneCycle();
world2.doOneCycle();
}
function traverse(element, f, acc) {
f(element, acc);
if ( element instanceof Array) {
element.map(function(a) {
traverse(a, f, acc);
});
} else if ( element instanceof Morph) {
if ((element.children !== undefined) && (element.children instanceof Array)) {
element.children.map(function(a) {
traverse(a, f, acc);
});
}
}
if (element.constructor.name === "WorldMorph") {
//Ha a gyokerbe visszaerunk, akkor vegetert a bejaras!
setInboundsOutbounds(acc);
deleteTempsFromSerialized(acc);
var serializedString = '{"morphicBPMSerialization":' + JSON.stringify(acc) + '}';
console.log("serialized array of objects:");
console.log(acc);
console.log("serialized string");
console.log(serializedString);
//Deserialization to world2
var alreadyDeserializedMrophs = new Array();
deserialize(serializedString, world2, alreadyDeserializedMrophs);
//Without this section, the sequence_flow_morphs would not be in the good position
world2.children[0].children.map(function(b){
if(b.constructor.name === "BPM_SequenceFlowMorph"){
b.fixLayout();
}
});
}
}
function serialize(element, acc) {
if (element.type === "stop") {
for (var x in acc ) {
if (acc[x].subType === "stop") {
return;
}
}
}
var serializing = new Object();
serializing.tempSelfReference = element;
serializing.id = createLUID();
tempSaveoutboundInbounds(element, serializing);
serializing.inbound = new Array();
serializing.type = element.constructor.name;
serializing.subType = element.type;
serializing.x = element.bounds.origin.x;
serializing.y = element.bounds.origin.y;
if (element.label && element.label.text !== undefined) {
serializing.text = element.label.text;
}
acc.push(serializing);
}
var...