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