Morphic BPMN new traversing and seri
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;
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" : ["fork", "outbound", "label.text", "bounds.origin.x", "bounds.origin.y"]
};
window.onload = function() {
initialize();
var serializedIDs = {};
//id-s and their references
var acc = [];
//final serialized object
traverse(world1, serialize, acc, serializedIDs);
console.log("serialized array of objects:");
console.log(acc);
console.log("serializedIDs:");
console.log(serializedIDs);
console.log("serialized string:");
console.log(JSON.stringify(acc));
};
function loop() {
world1.doOneCycle();
world2.doOneCycle();
}
function traverse(element, serializationFunction, acc, serializedIDs) {
var serializing = {};
serializationFunction(element, serializing, acc, serializedIDs);
if (propertyIsInSerializationModel(element.constructor.name)) {
acc.push(serializing);
}
}
function serialize(element, serializing, acc, serializedIDs) {
if (element.constructor.name === "WorldMorph") {
element.id = createLUID();
}
serializing["id"] = element.id;
serializing["serializationType"] = element.constructor.name;
serializedIDs[element.id] = element;
if ( element instanceof Morph) {
for (var prop in element) {
//var propHasToBeSerialized = propHasToBeSerializedFn(prop);
if (element[prop] instanceof Morph) {
if (!(element[prop].id)) {
element[prop].id = createLUID();
serializing[prop] = element[prop].id;
traverse(element[prop], serialize, acc, serializedIDs);
} else {
serializing[prop] = element[prop].id;
}
} else if (element[prop] instanceof Array) {
serializing[prop] = [];
element[prop].map(function(arrayElement) {
if ( arrayElement instanceof Morph) {
if (!(arrayElement.id)) {
arrayElement.id =...