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"] =...