Morphic BPMN serialization and deserialization by x and y coordinates from serialization
Morphic BPMN for diplom
by Adambasszer
HTML
<script src="http://nagyadam.net63.net/arbor_morphic/140923/src/morphic/morphic.js"></script>
<script src="http://nagyadam.net63.net/arbor_morphic/140923/src/morphic/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="200">
<p>
Your browser doesn't support canvas.
</p>
</canvas>
JavaScript
var world1, world2;
window.onload = function() {
initialize();
var serializedIDs = {};
//id-s and their references
var acc = [];
//final serialized object
var serializationModel = {
"BPM_EventMorph" : ["type", "bounds.origin.x", "bounds.origin.y"],
"BPM_SequenceFlowMorph" : ["source", "target"],
"BPM_TaskMorph" : ["label.text", "bounds.origin.x", "bounds.origin.y"],
"BPM_GatewayMorph" : ["label.text", "bounds.origin.x", "bounds.origin.y"]
};
//the model for serialization
var serializedString;
traverse(world1, serialize, acc, serializedIDs, serializationModel);
console.log("serialized array of objects:");
console.log(acc);
console.log("serializedIDs:");
console.log(serializedIDs);
console.log("serialized string:");
serializedString = JSON.stringify(acc);
console.log(serializedString);
deserialize(serializedString, world2, serializationModel);
};
function loop() {
world1.doOneCycle();
world2.doOneCycle();
}
function traverse(element, serializationFunction, acc, serializedIDs, serializationModel) {
serializationFunction(element, acc, serializedIDs, serializationModel);
}
function serialize(element, acc, serializedIDs, serializationModel) {
if ( element instanceof Morph) {
for (var prop in element) {
if (element[prop] instanceof Morph) {
if (elementProcessing(element[prop], acc, serializedIDs, serializationModel)) {
return;
}
} else if (element[prop] instanceof Array) {
element[prop].map(function(arrayElement) {
if ( arrayElement instanceof Morph) {
if (elementProcessing(arrayElement, acc, serializedIDs, serializationModel)) {
return;
}
}
});
}
}
}
}
function elementProcessing(element, acc, serializedIDs, serializationModel) {
if (element.id === undefined && serializationModel.hasOwnProperty(element.constructor.name)) {
//a Morph which is interesting for us, and not yet traversed
var serializing = {};
element.id = createLUID();
serializing["id"] =...