// Metamodel[ERModel]

// Generate Metanodes

dojo.declare("KodouguNode14", kodougu.domain.KodouguNode, {
    resizeStyle: 8, 
    nodetype: 'Node', 
	canBreakLine: true, 

    render: function(node, renderer, parentGroup) {
        try {
            var nodeGroup = renderer.begin_render(node, null, parentGroup);
            if (node.imageUrl == "") {
                var h = 38;
                var w = node.width;
                var first = 14;
                var second = first + 12;
                
                var pkeys = new dojox.collections.ArrayList();
                var attributes = new dojox.collections.ArrayList();
                
                if (node.element._ownedMembers != null) {
                	node.element._ownedMembers.forEach(function(item){
                		if (item._isPrimary > 0) {
                			pkeys.add(item);
                		}
                		else {
                			attributes.add(item);
                		}
                	});
                	
                	h += pkeys.count * 15;
                	h += attributes.count * 15;
                	second += pkeys.count * 15;
                	
                	var renderAttributeFunction = function(attribute){
                		if (attribute._isForeignKey > 0) {
                			return attribute.getName() + " (FK)";
                		}
                		else {
                			return attribute.getName();
                		}
                	}
                	
                	renderer.draw_text(node.element.getName(), 0, 0, "left");
                	renderer.draw_round_rect(0, 14, w, h - 14);
                	renderer.draw_line(0, second, w, second);
                	renderer.draw_list(4, first + 6, pkeys, "Name", renderAttributeFunction);
                	renderer.draw_list(4, second + 6, attributes, "Name", renderAttributeFunction);
                }
                else {
                	h = 50;
                	renderer.draw_round_rect(0, 0, w, h)
                	renderer.draw_text(node.element.getName(), w / 2, h / 2 - 10);
                }
                
                node.height = h;
            }
            else {
                renderer.draw_image(node.imageUrl);
            }
            renderer.end_render();
            node.children.forEach(function(child){
                child.render(child, renderer, nodeGroup);
            });
        }
        catch(err) {
            logError(err, "KodouguNode14::render");
            renderer.begin_render(node);
            renderer.draw_error();
            renderer.end_render();
        }
    }
});

dojo.declare("KodouguNode15", kodougu.domain.KodouguNode, {
    resizeStyle: 8, 
    nodetype: 'Relationship', 
	canBreakLine: true, 

    render: function(node, renderer, parentGroup) {
        try {
            var nodeGroup = renderer.begin_render(node, null, parentGroup);
            if (node.imageUrl == "") {
                var cardinality = node.element.getCardinality();
                var fromType = "birdSingle";
                var toType = "birdMulti";
                
                if (cardinality == "0") {
                	fromType = "birdSingle";
                	toType = "birdSingle";
                }
                else if (cardinality == "1") {
                	fromType = "birdSingle";
                	toType = "birdMulti";
                }
                else if (cardinality == "2") {
                	fromType = "birdMulti";
                	toType = "birdSingle";
                }
                else if (cardinality == "3") {
                	fromType = "birdMulti";
                	toType = "birdMulti";
                }
                else {
                	var cardinalities = node.element.getCardinality().split(':');
                	fromType = cardinalities[0] == "1" ? "birdSingle" : (cardinalities[0] == "*" ? "birdMulti" : null);
                	toType =  cardinalities[1] == "1" ? "birdSingle" : (cardinalities[1] == "*" ? "birdMulti" : null);
                }
                renderer.draw_relationship(null, fromType, toType);
            }
            else {
                renderer.draw_image(node.imageUrl);
            }
            renderer.end_render();
            node.children.forEach(function(child){
                child.render(child, renderer, nodeGroup);
            });
        }
        catch(err) {
            logError(err, "KodouguNode15::render");
            renderer.begin_render(node);
            renderer.draw_error();
            renderer.end_render();
        }
    }
});


// Generate Metaelements


dojo.declare("KodouguElement16", kodougu.domain.KodouguElement, {
    _typeName: "EREntity", 
	_generalClasses: [""], 
    _name: null, 
    getName: function() {
        return this._name;
    }, 
    setName: function(argv) {
		this._name = argv;
    },


    _ownedMembers : null, 
    _outputs : null, 
    _inputs : null, 
    
    
    __kodougu_dummy: null
});


dojo.declare("KodouguElement17", kodougu.domain.KodouguElement, {
    _typeName: "ERRelationship", 
	_generalClasses: [""], 
    _name: null, 
    getName: function() {
        return this._name;
    }, 
    setName: function(argv) {
		this._name = argv;
    },
    _cardinality: null, 
    getCardinality: function() {
        return this._cardinality;
    }, 
    setCardinality: function(argv) {
		this._cardinality = argv;
    },


    
    _from : null, 
    _to : null, 
    
    __kodougu_dummy: null
});


dojo.declare("KodouguElement18", kodougu.domain.KodouguElement, {
    _typeName: "ERAttribute", 
	_generalClasses: [""], 
    _name: null, 
    getName: function() {
        return this._name;
    }, 
    setName: function(argv) {
		this._name = argv;
    },
    _isPrimary: null, 
    getIsprimary: function() {
        return this._isPrimary;
    }, 
    setIsprimary: function(argv) {
		this._isPrimary = argv;
    },
    _isForeignKey: null, 
    getIsforeignkey: function() {
        return this._isForeignKey;
    }, 
    setIsforeignkey: function(argv) {
		this._isForeignKey = argv;
    },


    
    _owner : null, 
    
    __kodougu_dummy: null
});

