// Metamodel[相関図]

// Generate Metanodes

dojo.declare("KodouguNode32", 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 w = node.width;
                var h = node.height;
                var kw = w - 8;
                var path1 = "M " + kw + " 0 L 0 0 0 " + h + " " + w + " " + h + " " + w + " 8 z";
                var path2 = "M " + kw + " 0 L " +  kw +  " 8 " + w + " 8";
                renderer.draw_path(path1, true);
                renderer.draw_path(path2);
                renderer.draw_text(node.element.getDescription(), 4, 6, "left");

            }
            else {
                renderer.draw_image(node.imageUrl);
            }
            renderer.end_render();
            node.children.forEach(function(child){
                child.render(child, renderer, nodeGroup);
            });
        }
        catch(err) {
            logError(err, "KodouguNode32::render");
            renderer.begin_render(node);
            renderer.draw_error();
            renderer.end_render();
        }
    }
});

dojo.declare("KodouguNode30", kodougu.domain.KodouguNode, {
    resizeStyle: 0, 
    nodetype: 'Node', 
	canBreakLine: true, 

    render: function(node, renderer, parentGroup) {
        try {
            var nodeGroup = renderer.begin_render(node, null, parentGroup);
            if (node.imageUrl == "") {
                var cp = node.getCenter();
                var name = node.element.getName();
                var w = renderer.calc_text_width(name) + 30;
                var h = renderer._fontsize + 28;
                var x = w/2;
                var y = h/2 - 2;
                node.width = w;
                node.height = h;
                
                renderer.draw_round_rect(0, 0, w, h);
                renderer.draw_text(name, x, y, "center");
            }
            else {
                renderer.draw_image(node.imageUrl);
            }
            renderer.end_render();
            node.children.forEach(function(child){
                child.render(child, renderer, nodeGroup);
            });
        }
        catch(err) {
            logError(err, "KodouguNode30::render");
            renderer.begin_render(node);
            renderer.draw_error();
            renderer.end_render();
        }
    }
});

dojo.declare("KodouguNode31", kodougu.domain.KodouguNode, {
    resizeStyle: 8, 
    nodetype: 'Relationship', 
	canBreakLine: false, 

    render: function(node, renderer, parentGroup) {
        try {
            var nodeGroup = renderer.begin_render(node, null, parentGroup);
            if (node.imageUrl == "") {
                var cp = node.getCenter();
                var name = node.element.getName();
                var other_name = node.element.getOthername();
                var w = renderer.calc_text_width(name) + 10;
                var h = renderer._fontsize + 8;
                
                renderer.draw_relationship();
                if (name != "") {
                	if (other_name == "") {
                		renderer.draw_round_rect(cp.x - (w/2), cp.y - (h/2), w, h);
                		renderer.draw_text(name, cp.x, cp.y - 2, "center");
                	}
                	else {
                		var from_p = node.from.getCenter();
                		var to_p = node.to.getCenter();
                		var fp = new Point(cp.x * 0.6  + from_p.x * 0.4, cp.y * 0.6 + from_p.y * 0.4);
                		var tp = new Point(cp.x * 0.6  + to_p.x * 0.4, cp.y * 0.6 + to_p.y * 0.4);
                		
                		renderer.draw_round_rect(fp.x - (w/2), fp.y - (h/2), w, h);
                		renderer.draw_text(name, fp.x, fp.y - 2, "center");
                		
                		var ow = renderer.calc_text_width(other_name) + 10;
                		renderer.draw_round_rect(tp.x - (ow/2), tp.y - (h/2), ow, h);
                		renderer.draw_text(other_name, tp.x, tp.y - 2, "center");
                	}
                }

            }
            else {
                renderer.draw_image(node.imageUrl);
            }
            renderer.end_render();
            node.children.forEach(function(child){
                child.render(child, renderer, nodeGroup);
            });
        }
        catch(err) {
            logError(err, "KodouguNode31::render");
            renderer.begin_render(node);
            renderer.draw_error();
            renderer.end_render();
        }
    }
});

dojo.declare("KodouguNode33", 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 == "") {
                renderer.draw_relationship("dashed");
            }
            else {
                renderer.draw_image(node.imageUrl);
            }
            renderer.end_render();
            node.children.forEach(function(child){
                child.render(child, renderer, nodeGroup);
            });
        }
        catch(err) {
            logError(err, "KodouguNode33::render");
            renderer.begin_render(node);
            renderer.draw_error();
            renderer.end_render();
        }
    }
});


// Generate Metaelements


dojo.declare("KodouguElement30", kodougu.domain.KodouguElement, {
    _typeName: "人", 
	_generalClasses: [""], 
    _name: null, 
    getName: function() {
        return this._name;
    }, 
    setName: function(argv) {
		this._name = argv;
    },


    
    
    __kodougu_dummy: null
});


dojo.declare("KodouguElement31", kodougu.domain.KodouguElement, {
    _typeName: "関係", 
	_generalClasses: [""], 
    _name: null, 
    getName: function() {
        return this._name;
    }, 
    setName: function(argv) {
		this._name = argv;
    },
    _othername: null, 
    getOthername: function() {
        return this._othername;
    }, 
    setOthername: function(argv) {
		this._othername = argv;
    },


    
    
    __kodougu_dummy: null
});


dojo.declare("KodouguElement32", kodougu.domain.KodouguElement, {
    _typeName: "注釈", 
	_generalClasses: [""], 
    _description: null, 
    getDescription: function() {
        return this._description;
    }, 
    setDescription: function(argv) {
		this._description = argv;
    },


    
    
    __kodougu_dummy: null
});


dojo.declare("KodouguElement33", kodougu.domain.KodouguElement, {
    _typeName: "注釈線", 
	_generalClasses: [""], 


    
    
    __kodougu_dummy: null
});

