var UMLCANVAS_VERSION="0.4-7";if(typeof decomposeVersion!="function"){function decomposeVersion(b){var a=b.match(/([0-9]+)\.([0-9]+)(-([0-9]+))?/);return{major:parseInt(a[1]),minor:parseInt(a[2]),build:parseInt(a[4])||0}}}if(typeof iRequire!="function"){function iRequire(d,a,c){var b=decomposeVersion(d.version);a=decomposeVersion(a);if((b.major<a.major)||(b.major==a.major&&b.minor<a.minor)||(b.major==a.major&&b.minor==a.minor&&b.build<a.build)){return false}if(c){c=decomposeVersion(c);if((b.major>c.major)||(b.major==c.major&&b.minor>c.minor)||(b.major==c.major&&b.minor==c.minor&&b.build>c.build)){return false}}return true}}if(!iRequire(Canvas2D,"0.2-5")){alert("UmlCanvas requires at least Canvas2D version 0.2-5. Current Canvas2D is "+Canvas2D.version)}var UmlCanvasBase=Class.extend({init:function init(){this.plugins={}},getModel:function getModel(a){return UmlCanvas.KickStarter.manager.getModel(a)}});ProtoJS.mix(Canvas2D.Factory.extensions.all.EventHandling,UmlCanvasBase);var UmlCanvas=new UmlCanvasBase();UmlCanvas.version=UMLCANVAS_VERSION;UmlCanvas.activate=function activate(e){var c=document.getElementById(e);if(c){var d=new UmlCanvas.Manager();var b=d.setupModel(e);var a=b.addDiagram();d.startAll();return a}throw (e+" does not reference a known id on the document.")};ProtoJS.mix(Canvas2D.Factory.extensions.all.EventHandling,UmlCanvas);Canvas2D.extensions.push({name:"UmlCanvas",version:UMLCANVAS_VERSION,author:'<a href="http://christophe.vg">Christophe VG</a>',info:'Visit <a href="http://thesoftwarefactory.be/wiki/UmlCanvas">http://thesoftwarefactory.be/wiki/UmlCanvas</a> for more info.'});UmlCanvas.Common={extractVisibility:function(a){var b=a.modifiers.get("visibility");if(b&&b.value){return b.value.value}if(a.modifiers.get("public")){return"public"}if(a.modifiers.get("private")){return"private"}if(a.modifiers.get("protected")){return"protected"}if(a.modifiers.get("package")){return"package"}return null},extractStatic:function(a){return a.modifiers.get("static")},extractAbstract:function(b){var a=b.modifiers.get("abstract");if(a&&a.value){return a.value.value}else{if(a){return true}}return false},determineVisibility:function(a){switch(a){case"__HIDE__":return"";case"protected":return"#";case"private":return"-";case"package":return"~"}return"+"}};UmlCanvas.Manager=Canvas2D.Manager.extend({setupModel:function setupModel(a){return this.addBook(new UmlCanvas.Model(a))},getModel:function getModel(a){return this.getBook(a||"")}});UmlCanvas.Model=Canvas2D.Book.extend({init:function(a){this._super(a);this.uc_plugins={}},getName:function getName(){return this.name},addPlugin:function addPlugin(a){this.uc_plugins[a.getName()]=a},getPlugin:function getPlugin(a){return this.uc_plugins[a]},activatePlugins:function activatePlugins(){$H(this.uc_plugins).iterate(function(a,b){b.activate()}.scope(this))},addDiagram:function(a){unless(a instanceof UmlCanvas.Diagram,function(){a=new UmlCanvas.Diagram()});return this.addSheet(a)},getWidth:function getWidth(){return parseInt(this.canvas.canvas.width)},getHeight:function getHeight(){return parseInt(this.canvas.canvas.height)},getLeft:function getLeft(){return this.canvas.getLeft()},getTop:function getTop(){return this.canvas.getTop()},setSize:function setSize(b,a){this.canvas.canvas.width=b;this.canvas.canvas.height=a;this.rePublish()}});UmlCanvas.Diagram=Canvas2D.Sheet.extend({init:function(a){this._super(a);this.on("shapeSelected",this.handleElementSelected.scope(this));this.on("shapeChanged",this.handleElementChanged.scope(this))},handleElementSelected:function(a){if(a instanceof UmlCanvas.Interface){this.canvas.fireEvent("interfaceSelected",a.props)}else{if(a instanceof UmlCanvas.Class){this.canvas.fireEvent("classSelected",a.props)}}},handleElementChanged:function(a){if(a instanceof UmlCanvas.Interface){this.canvas.fireEvent("interfaceChanged",a.props)}else{if(a instanceof UmlCanvas.Class){this.canvas.fireEvent("classChanged",a.props)}}},addClass:function(a){return this.add(a)},getDiagramClass:function(a){return this.shapesMap[a.replace(/<.*$/,"")]},addRelation:function(a){return this.add(a)},toADL:function(){var a="";a+="Diagram "+this.name;a+=" +"+this.style+" {\n";this.positions.iterate(function(b){var c=b.toADL("  ");if(c){a+=c+"\n"}});a+="}";return a},asConstruct:function(){var a=this._super();this.shapes.iterate(function(b){a.push(b.asConstruct())});return a}});UmlCanvas.Diagram.from=function(a,d){var e="static";var b=a.modifiers.get("style");if(b){e=b.value.value.toLowerCase()}a.modifiers.iterate(function(f,g){if(f.toLowerCase()=="static"||f.toLowerCase()=="dynamic"){e=f.toLowerCase()}});var c=new UmlCanvas.Diagram({book:d,name:a.name,style:e});d.addDiagram(c);return c};UmlCanvas.Diagram.MANIFEST={name:"diagram",propertyPath:[Canvas2D.Sheet],libraries:["UmlCanvas","Diagram"]};Canvas2D.registerShape(UmlCanvas.Diagram);UmlCanvas.Class=Canvas2D.Rectangle.extend({addSuper:function(a){if(!this.supers){this.supers=[]}this.supers.push(a)},postInitialize:function(a){this.attributes=new Array();this.operations=new Array();this.markUnprepared();this.config=UmlCanvas.Class.Defaults},prepare:function(c){if(this.prepared){return}var a=[this.getName(),"<<"+this.getStereotype()+">>"];this.attributes.iterate(function(g){a.push(g.toString())});this.operations.iterate(function(g){a.push(g.toString())});var d=0;c.font=this.getFont();a.iterate(function(g){var h=c.measureText(g);d=h>=d?h:d}.scope(this));this.width=(2*this.config.padding)+d;this.width=this.width<this.getMinimumWidth()?this.getMinimumWidth():this.width;var e=parseInt(this.getFont())+this.config.lineSpacing;var b=this.attributes.length>0?(this.attributes.length*e)+(2*this.config.compartmentSpacing):0;var f=this.operations.length>0?(this.operations.length*e)+(2*this.config.compartmentSpacing):0;this.height=b+f+2*e+(2*this.config.padding);this.prepared=true},markUnprepared:function(){this.prepared=false;this.fireEvent("changed")},add:function add(a){},addAttribute:function(a){if(!(a instanceof UmlCanvas.Attribute)){a=new UmlCanvas.Attribute(a)}this.attributes.push(a);this.markUnprepared();return a},addOperation:function(a){if(!(a instanceof UmlCanvas.Operation)){a=new UmlCanvas.Operation(a)}this.operations.push(a);this.markUnprepared();return a},draw:function(c,g,f){this.prepare(c);c.useCrispLines=this.config.useCrispLines;c.fillStyle=this.config.backgroundColor;c.strokeStyle=this.config.lineColor;c.lineWidth=this.config.lineWidth;var d=parseInt(this.getFont())+this.config.lineSpacing;var a=(this.config.padding+d*2+this.config.compartmentSpacing);c.fillStrokeRect(g,f,this.getWidth(),a);var e=0;if(this.attributes.length>0){e=(this.config.compartmentSpacing+(d*this.attributes.length)+this.config.compartmentSpacing);c.fillStrokeRect(g,f+a,this.getWidth(),e)}var h=0;if(this.operations.length>0){h=(this.config.compartmentSpacing+(d*this.operations.length)+this.config.padding);c.fillStrokeRect(g,f+a+e,this.getWidth(),h)}c.useCrispLines=this.getUseCrispLines();c.fillStyle=this.getFontColor();c.font=this.getFontForClassName();c.textAlign="center";if(this.getStereotype()){c.fillText("<<"+this.getStereotype()+">>",g+(this.getWidth()/2),f+(this.config.padding+parseInt(this.getFont())))}c.fillText(this.getName(),g+(this.getWidth()/2),f+(this.config.padding+parseInt(this.getFont())+(this.getStereotype()?d:0)));c.textAlign="left";c.font=this.getFont();for(var b=0;b<this.attributes.length;b++){c.strokeStyle=this.getFontColor();c.textDecoration=this.attributes[b].isStatic()?this.config.decorationStatic:this.config.decoration;c.fillText(this.attributes[b].toString(),g+this.config.padding,f+a+(d*(b+1)))}for(var b=0;b<this.operations.length;b++){c.font=this.getFontForOperationName(this.operations[b]);c.strokeStyle=this.getFontColor();c.textDecoration=this.operations[b].isStatic()?this.config.decorationStatic:this.config.decoration;c.fillText(this.operations[b].toString(),g+this.config.padding,f+a+e+(d*(b+1)))}},getFontForClassName:function(){return this.getIsAbstract()?this.config.fontAbstract:this.getFont()},getFontForOperationName:function(a){return a.isAbstract()?this.config.fontAbstract:this.getFont()},asConstruct:function asConstruct(){var a=this._super();delete a.modifiers.geo;delete a.modifiers[this.getFontColor()];if(this.getMinimumWidth()){a.modifiers.minimumSize=this.getMinimumWidth()}if(this.getSupers()){var b=[];this.getSupers().iterate(function(c){b.push(c.getName())});a.supers=b}if(this.getStereotype()){a.modifiers.stereotype='"'+this.getStereotype()+'"'}if(this.getIsAbstract()){a.modifiers["abstract"]=null}this.attributes.iterate(function(c){a.children.push(c.asConstruct())});this.operations.iterate(function(c){a.children.push(c.asConstruct())});return a}});UmlCanvas.Class.from=function(a,d){var e={};e.name=a.name;var g=a.modifiers.get("minimumWidth");if(g){e.minimumWidth=parseInt(g.value.value)}var b=a.modifiers.get("stereotype");if(b&&b.value){e.stereotype=b.value.value}e.isAbstract=UmlCanvas.Common.extractAbstract(a);var f=new UmlCanvas.Class(e);var h=[];var c=[];if(a.supers&&a.supers.length>0){a.supers.iterate(function(j){var k=d.getDiagramClass(j.constructName);if(k){f.addSuper(k);var i;if(k instanceof UmlCanvas.Interface){i=new UmlCanvas.Realization({from:k,to:f})}else{i=new UmlCanvas.Inheritance({from:k,to:f})}d.addRelation(i)}else{c.push("unknown superclass: "+j.constructName+", referenced by "+a.name)}})}if(h.length>0){return{errors:h,warnings:c}}else{f.warnings=c.length>0?c:null;return f}};UmlCanvas.Class.MANIFEST={name:"class",properties:["stereotype","isAbstract","supers","font","fontColor","minimumWidth"],propertyPath:[Canvas2D.CompositeShape,Canvas2D.Rectangle],libraries:["UmlCanvas","Class Diagram","Element"]};Canvas2D.registerShape(UmlCanvas.Class);UmlCanvas.Attribute=Class.extend({init:function(a){this.visibility=a.visibility;this.ztatic=a.isStatic;this.name=a.name;this.type=a.type;this.stereotype=a.stereotype;this.derived=a.derived},setParent:function setParent(){},getName:function(){return this.name},getType:function(){return this.type},getVisibility:function(){return this.visibility},getStereotype:function(){return this.stereotype},isStatic:function(){return this.ztatic},isDerived:function(){return this.derived},toString:function(){return(this.getStereotype()?"<<"+this.getStereotype()+">> ":"")+UmlCanvas.Common.determineVisibility(this.visibility)+(this.isDerived()?"/":"")+this.name+(this.type?" : "+this.type.toString():"")},asConstruct:function(){var a={};if(this.getVisibility()){a[this.getVisibility()]=null}if(this.isStatic()){a["static"]=null}if(this.getStereotype()){a.stereotype='"'+this.getStereotype()+'"'}if(this.isDerived()){a.derived=null}return{type:"Attribute",name:this.getName(),supers:this.getType()?[this.getType()]:[],modifiers:a,children:[]}}});UmlCanvas.Attribute.from=function(a,d){var f={name:a.name,type:a.supers[0]?a.supers[0].toString():null};var b=UmlCanvas.Common.extractVisibility(a);if(b){f.visibility=b}f.isStatic=UmlCanvas.Common.extractStatic(a);var c=a.modifiers.get("stereotype");if(c&&c.value){f.stereotype=c.value.value}var e=a.modifiers.get("derived");if(e&&e.value){f.derived=e.value.value}else{if(e){f.derived=true}}return d.addAttribute(f)};UmlCanvas.Attribute.MANIFEST={name:"attribute",aliasses:["property","literal"]};Canvas2D.registerShape(UmlCanvas.Attribute);UmlCanvas.Operation=Class.extend({init:function(a){this.visibility=a.visibility;this.ztatic=a.isStatic;this.name=a.name;this.returnType=a.returnType;this.stereotype=a.stereotype;this.parameters=[];if(a.arguments){for(var b=0;b<a.arguments.length;b++){this.addParameter(a.arguments[b])}}this.abztract=a.isAbstract},setParent:function setParent(){},getName:function(){return this.name},getReturnType:function(){return this.returnType},getVisibility:function(){return this.visibility},isStatic:function(){return this.ztatic},isAbstract:function(){return this.abztract},getStereotype:function(){return this.stereotype},addParameter:function(a){this.parameters.push(new UmlCanvas.Parameter(a))},toString:function(){var a=[];this.parameters.iterate(function(b){if(b.type){a.push(b.type.toString())}});return(this.getStereotype()?"<<"+this.getStereotype()+">> ":"")+UmlCanvas.Common.determineVisibility(this.visibility)+this.name+"("+a.join(", ")+")"+(this.returnType?" : "+this.returnType.toString():"")},asConstruct:function(){var b=[];this.parameters.iterate(function(c){b.push(c.asConstruct())});var a={};if(this.getVisibility()){a[this.getVisibility()]=null}if(this.isAbstract()){a["abstract"]=null}if(this.isStatic()){a["static"]=null}if(this.getStereotype()){a.stereotype='"'+this.getStereotype()+'"'}return{type:"Operation",name:this.getName(),supers:this.getReturnType()?[this.getReturnType()]:[],modifiers:a,children:b}}});UmlCanvas.Operation.from=function(a,d){var e={name:a.name};if(a.supers[0]){e.returnType=a.supers[0].toString()}var b=UmlCanvas.Common.extractVisibility(a);if(b){e.visibility=b}e.isStatic=UmlCanvas.Common.extractStatic(a);e.isAbstract=UmlCanvas.Common.extractAbstract(a);var c=a.modifiers.get("stereotype");if(c&&c.value){e.stereotype=c.value.value}return d.addOperation(e)};UmlCanvas.Operation.MANIFEST={name:"operation",aliasses:["method"]};Canvas2D.registerShape(UmlCanvas.Operation);UmlCanvas.Parameter=Class.extend({name:null,type:null,init:function(a){this.name=a.name;this.type=a.type},setparent:function setParent(){},getName:function(){return this.name},getType:function(){return this.type},toString:function(){return this.name+" : "+this.type},asConstruct:function(){return{type:"Argument",name:this.getName(),supers:this.getType()?[this.getType()]:[],modifiers:{},children:[]}}});UmlCanvas.Parameter.from=function(a,b){return b.addParameter(new UmlCanvas.Parameter({name:a.name,type:a.supers[0]||null}))};UmlCanvas.Parameter.MANIFEST={name:"parameter",aliasses:["argument"]};Canvas2D.registerShape(UmlCanvas.Parameter);UmlCanvas.ConnectorHeads={Triangle:{n:{lines:[[-5,-10],[+5,-10],[0,0]],end:[0,-10]},e:{lines:[[+10,+5],[+10,-5],[0,0]],end:[10,0]},s:{lines:[[+5,+10],[-5,+10],[0,0]],end:[0,10]},w:{lines:[[-10,-5],[-10,+5],[0,0]],end:[-10,0]}},Arrow:{n:{lines:[[-5,-10],[0,0],[+5,-10]],end:[0,0]},e:{lines:[[+10,+5],[0,0],[+10,-5]],end:[0,0]},s:{lines:[[+5,+10],[0,0],[-5,+10]],end:[0,0]},w:{lines:[[-10,-5],[0,0],[-10,+5]],end:[0,0]}},Diamond:{n:{lines:[[-5,-5],[0,-10],[+5,-5],[0,0]],end:[0,-10]},e:{lines:[[+5,+5],[+10,0],[+5,-5],[0,0]],end:[10,0]},s:{lines:[[+5,+5],[0,+10],[-5,+5],[0,0]],end:[0,10]},w:{lines:[[-5,-5],[-10,0],[-5,+5],[0,0]],end:[-10,0]}},FullDiamond:{n:{lines:[[-5,-5],[0,-10],[+5,-5],[0,0],"fill"],end:[0,-10]},e:{lines:[[+5,+5],[+10,0],[+5,-5],[0,0],"fill"],end:[10,0]},s:{lines:[[+5,+5],[0,+10],[-5,+5],[0,0],"fill"],end:[0,10]},w:{lines:[[-5,-5],[-10,0],[-5,+5],[0,0],"fill"],end:[-10,0]}}};UmlCanvas.Association=Canvas2D.Connector.extend({preprocess:function(a){a=this._super(a);this.srcName=a.sname;this.dstName=a.dname;if(a.kind&&a.kind=="aggregation"){a.begin=UmlCanvas.ConnectorHeads.Diamond}else{if(a.kind&&a.kind=="composition"){a.begin=UmlCanvas.ConnectorHeads.FullDiamond}else{if(a.navigability&&(a.navigability=="bi"||a.navigability=="source")){a.begin=UmlCanvas.ConnectorHeads.Arrow}}}if(a.navigability&&(a.navigability=="bi"||a.navigability=="destination")){a.end=UmlCanvas.ConnectorHeads.Arrow}a.routing=a.routing||"horizontal";if(a.sname){a.beginLabel=a.sname==a.from.name?"":UmlCanvas.Common.determineVisibility(a.srcVisibility)+a.sname}if(a.srcMultiplicity){a.beginLabel+=" ["+a.srcMultiplicity+"]"}if(a.dname){a.endLabel=a.dname==a.to.name?"":UmlCanvas.Common.determineVisibility(a.dstVisibility)+a.dname}if(a.dstMultiplicity){a.endLabel+=" ["+a.dstMultiplicity+"]"}if(a.name){a.centerLabel=(a.stereotype?"<<"+a.stereotype+">> ":"")+(a.derived?"/":"")+(a.name.substring(0,1)=="_"?"":a.name)}return a},_determineChildModifiers:function _determineChildModifiers(a){var b=[];var c=a?this.end:this.begin;if(c==UmlCanvas.ConnectorHeads.Diamond){b.shared=null}else{if(c==UmlCanvas.ConnectorHeads.FullDiamond){b.composite=null}else{if(c==UmlCanvas.ConnectorHeads.Arrow){b.navigable=null}}}var d=a?this.dstMultiplicity:this.srcMultiplicity;if(d){b.multiplicity='"'+d+'"'}var e=a?this.dstVisibility:this.srcVisibility;if(e){b.visibility='"'+e+'"'}return b},isDerived:function(){return this.derived},asConstruct:function(){var a=this._super();if(this.getRouting()=="recursive"&&this.getRouteBegin()!="ene"){a.annotation.data="recursive:"+this.getRouteBegin()+"-"+this.getRouteEnd()}if(this.getRouting()!="vertical"&&this.getRouting()!="custom"&&this.getRouting()!="recursive"){a.annotation.data=this.getRouting()}if(this.isDerived()){a.modifiers.derived=null}if(this.getStereotype()){a.modifiers.stereotype='"'+this.getStereotype()+'"'}a.children.push({modifiers:this._determineChildModifiers(),supers:[this.from.getName()],children:[],type:"role",name:this.srcName});a.children.push({modifiers:this._determineChildModifiers(true),supers:[this.to.getName()],children:[],type:"role",name:this.dstName});a.modifiers=[];return a}});UmlCanvas.Association.getNames=function(){return["association","relation"]};UmlCanvas.Association.from=function(m,e){var h={name:m.name};var g,f;var j=[];if(m.children&&m.children.length>1){child0=m.children[0];g=m.children[1]}else{j.push("association "+m.name+" needs two roles");return{errors:j}}h.kind="association";var k,l;if(g.modifiers.get("composition")||g.modifiers.get("composite")||g.modifiers.get("aggregation")||g.modifiers.get("shared")){k=g;l=child0}else{k=child0;l=g}if(k.modifiers.get("composition")||k.modifiers.get("composite")){h.kind="composition"}if(k.modifiers.get("aggregation")||k.modifiers.get("shared")){h.kind="aggregation"}if(k.modifiers.get("navigable")&&l.modifiers.get("navigable")){h.navigability="bi"}else{if(k.modifiers.get("navigable")){h.navigability="source"}else{if(l.modifiers.get("navigable")){h.navigability="destination"}}}h.routing="vertical";if(m.annotation){if(m.annotation.data.contains(":")&&m.annotation.data.contains("-")){var d=m.annotation.data.split(":");h.routing="custom";h.routeStyle=d[0];var i=d[1].split("-");h.routeBegin=i[0];h.routeEnd=i[1]}else{h.routing=m.annotation.data}}h.sname=k.name;h.dname=l.name;if(k.modifiers.get("multiplicity")&&k.modifiers.get("multiplicity").value){h.srcMultiplicity=k.modifiers.get("multiplicity").value.value}if(l.modifiers.get("multiplicity")&&l.modifiers.get("multiplicity").value){h.dstMultiplicity=l.modifiers.get("multiplicity").value.value}var b=UmlCanvas.Common.extractVisibility(k);if(b){h.srcVisibility=b}b=UmlCanvas.Common.extractVisibility(l);if(b){h.dstVisibility=b}h.from=e.getDiagramClass(k.supers[0].constructName);h.to=e.getDiagramClass(l.supers[0].constructName);if(!h.from){j.push("Unknown FROM property "+k.supers[0].constructName+"  on "+m.name)}if(!h.to){j.push("Unknown TO property "+l.supers[0].constructName+"  on "+m.name)}var c=m.modifiers.get("stereotype");if(c&&c.value){h.stereotype=c.value.value}var a=m.modifiers.get("derived");if(a&&a.value){h.derived=a.value.value}else{if(a){h.derived=true}}if(j.length>0){return{errors:j}}else{return new UmlCanvas.Association(h)}};UmlCanvas.Association.MANIFEST={name:"association",properties:["kind","navigability","derived","stereotype","srcMultiplicity","dstMultiplicity","srcVisibility","dstVisibility"],propertyPath:[Canvas2D.Connector],libraries:["UmlCanvas","Class Diagram","Relationship"]};Canvas2D.registerShape(UmlCanvas.Association);UmlCanvas.Role=Class.extend({setparent:function setParent(){}});UmlCanvas.Role.from=function(a,b){return null};UmlCanvas.Role.MANIFEST={name:"role"};Canvas2D.registerShape(UmlCanvas.Role);UmlCanvas.Dependency=Canvas2D.Connector.extend({preprocess:function(a){a.end=UmlCanvas.ConnectorHeads.Arrow;a.lineStyle="dashed";a.routing=a.routing||"horizontal";this.srcName=a.sname;this.dstName=a.dname;if(a.name){a.centerLabel=(a.stereotype?"<<"+a.stereotype+">> ":"")+(a.name.substring(0,1)=="_"?"":a.name)}return a},asConstruct:function(){var a=this._super();a.modifiers=[];if(this.getRouting()!="horizontal"&&this.getRouting()!="custom"){a.annotation.data=this.getRouting()}if(this.getStereotype()){a.modifiers.stereotype='"'+this.getStereotype()+'"'}a.children.push({supers:[this.from.getName()],children:[],type:"client",name:this.srcName});a.children.push({supers:[this.to.getName()],children:[],type:"supplier",name:this.dstName});return a}});UmlCanvas.Dependency.from=function(a,e){var f={name:a.name};var c,g;if(a.children&&a.children.length>0&&a.children[0].type=="client"){c=a.children[0];g=a.children[1]}else{c=a.children[1];g=a.children[0]}errors=[];if(!c){errors.push("missing dependency client")}if(!g){errors.push("missing dependency supplier")}if(errors.length>0){return{errors:errors}}f.routing="horizontal";if(a.annotation){if(a.annotation.data.contains(":")&&a.annotation.data.contains("-")){var h=a.annotation.data.split(":");f.routing="custom";f.routeStyle=h[0];var b=h[1].split("-");f.routeBegin=b[0];f.routeEnd=b[1]}else{f.routing=a.annotation.data}}f.sname=c.name;f.dname=g.name;f.from=e.getDiagramClass(c.supers[0].constructName);f.to=e.getDiagramClass(g.supers[0].constructName);if(!f.from){errors.push("Unknown FROM property "+c.supers[0].constructName+"  on "+a.name)}if(!f.to){errors.push("Unknown TO property "+g.supers[0].constructName+"  on "+a.name)}var d=a.modifiers.get("stereotype");if(d&&d.value){f.stereotype=d.value.value}if(errors.length>0){return{errors:errors}}else{return new UmlCanvas.Dependency(f)}};UmlCanvas.Dependency.MANIFEST={name:"dependency",properties:["client","supplier","stereotype"],propertyPath:[Canvas2D.Connector],libraries:["UmlCanvas","Class Diagram","Relationship"]};Canvas2D.registerShape(UmlCanvas.Dependency);UmlCanvas.Client=Class.extend({});UmlCanvas.Supplier=Class.extend({});UmlCanvas.Client.from=function(a,b){return null};UmlCanvas.Supplier.from=function(a,b){return null};UmlCanvas.Client.MANIFEST={name:"client"};UmlCanvas.Supplier.MANIFEST={name:"supplier"};Canvas2D.registerShape(UmlCanvas.Client);Canvas2D.registerShape(UmlCanvas.Supplier);UmlCanvas.Interface=UmlCanvas.Class.extend({preprocess:function(a){a=this._super(a);if(a.stereotype){a.stereotype="interface "+a.stereotype}else{a.stereotype="interface"}a.isAbstract=true;return a},getFontForClassName:function(){return this.getFont()},getFontForOperationName:function(a){return this.getFont()},asConstruct:function(){var a=this._super();delete a.modifiers["abstract"];delete a.modifiers.stereotype;return a}});UmlCanvas.Interface.from=function(a,c){var d={};d.name=a.name;var f=a.modifiers.get("minimumWidth");if(f){d.minimumWidth=parseInt(f.value.value)}var b=a.modifiers.get("stereotype");if(b){d.stereotype=b.value.value}var e=new UmlCanvas.Interface(d);if(a.supers&&a.supers.length>0){a.supers.iterate(function(g){var h=c.getDiagramClass(g.constructName);e.addSuper(h);c.addRelation(new UmlCanvas.Inheritance({from:h,to:e}))})}return e};UmlCanvas.Interface.MANIFEST={name:"interface",propertyPath:[Canvas2D.CompositeShape,Canvas2D.Rectangle,UmlCanvas.Class],libraries:["UmlCanvas","Class Diagram","Element"]};Canvas2D.registerShape(UmlCanvas.Interface);UmlCanvas.Inheritance=Canvas2D.Connector.extend({preprocess:function(a){a.begin=UmlCanvas.ConnectorHeads.Triangle;a.routing=a.routing||"vertical";return a},initialBranchLength:function(b,a){return 25},asConstruct:function asConstruct(){return null}});UmlCanvas.Inheritance.MANIFEST={name:"inheritance",propertyPath:[Canvas2D.Connector],libraries:["UmlCanvas","Class Diagram","Relationship"]};Canvas2D.registerShape(UmlCanvas.Inheritance);UmlCanvas.Realization=Canvas2D.Connector.extend({preprocess:function(a){a.begin=UmlCanvas.ConnectorHeads.Triangle;a.lineStyle="dashed";a.routing=a.routing||"vertical";return a},initialBranchLength:function(b,a){return 25},asConstruct:function asConstruct(){return null}});UmlCanvas.Realization.MANIFEST={name:"realization",propertyPath:[Canvas2D.Connector],libraries:["UmlCanvas","Class Diagram","Relationship"]};Canvas2D.registerShape(UmlCanvas.Realization);UmlCanvas.Enumeration=UmlCanvas.Class.extend({preprocess:function(a){a=this._super(a);if(a.stereotype){a.stereotype="enumeration "+a.stereotype}else{a.stereotype="enumeration"}a.isAbstract=true;return a},addOperation:function(a){return null},getFontForClassName:function(){return this.getFont()},asConstruct:function(){var a=this._super();delete a.modifiers.isAbstract;delete a.modifiers.stereotype;return a}});UmlCanvas.Enumeration.from=function(a,c){var d={};d.name=a.name;var f=a.modifiers.get("minimumWidth");if(f){d.minimumWidth=parseInt(f.value.value)}var b=a.modifiers.get("stereotype");if(b){d.stereotype=b.value.value}var e=new UmlCanvas.Enumeration(d);if(a.supers&&a.supers.length>0){a.supers.iterate(function(h){var i=c.getDiagramClass(h.constructName);if(i){e.addSuper(i);var g;if(i instanceof UmlCanvas.Interface){g=new UmlCanvas.Realization({from:i,to:e})}else{g=new UmlCanvas.Inheritance({from:i,to:e})}c.addRelation(g)}else{warnings.push("unknown superclass: "+h.constructName+", referenced by "+a.name)}})}return e};UmlCanvas.Enumeration.MANIFEST={name:"enumeration",propertyPath:[Canvas2D.CompositeShape,Canvas2D.Rectangle,UmlCanvas.Class],libraries:["UmlCanvas","Class Diagram","Element"]};Canvas2D.registerShape(UmlCanvas.Enumeration);UmlCanvas.Note=Canvas2D.Rectangle.extend({prepare:function(a){if(this.prepared){return}if(!this.width){this.width=this.getBoxWidth(a)}if(!this.height){this.height=this.getBoxHeight(a)}this.prepared=true},postInitialize:function(a){this.config=UmlCanvas.Note.Defaults},draw:function(a,c,b){this.prepare(a);this.renderTextBox(a,c,b);this.renderText(a,c,b)},renderTextBox:function renderTextBox(a,c,b){a.fillStyle=this.config.backgroundColor;a.strokeStyle=this.config.lineColor;a.lineWidth=this.config.lineWidth;a.useCrispLines=this.config.useCrispLines;a.fillStrokeRect(c,b,this.getWidth(),this.getHeight())},renderText:function renderText(d,f,e){d.useCrispLines=false;d.font=this.config.font;d.fillStyle=this.config.fontColor;d.textAlign="left";d.lineStyle="solid";var b=this.getLines();for(var c=1,a=b.length;c<=a;++c){e+=this.config.padding;d.fillText(b[c-1],f+this.config.padding,e+(parseInt(this.config.font)*c))}},getBoxWidth:function getBoxWidth(a){var b=this.getWidth()+(this.config.padding*2);this.getLines().iterate(function(c){var d=a.measureText(c)+(this.config.padding*2);if(d>b){b=d}}.scope(this));return b},getBoxHeight:function getBoxHeight(a){var c=this.getHeight()+(this.config.padding*2);var b=this.getLines().length*(parseInt(this.config.font)+this.config.padding)+this.config.padding;return(c>b)?c:b},getLines:function getLines(){return this.getText().split("\\n")},asConstruct:function(){var a=this._super();delete a.modifiers.geo;a.modifiers.width='"'+this.getWidth()+'"';a.modifiers.height='"'+this.getHeight()+'"';if(this.getText()){a.modifiers.text='"'+this.getText()+'"'}if(this.getLinkedTo()){a.modifiers.linkedTo='"'+this.getLinkedTo()+'"'}return a}});UmlCanvas.Note.from=function(c,d){var f={};f.name=c.name;var h=c.modifiers.get("text");if(h&&h.value){f.text=h.value.value}var e=c.modifiers.get("width");if(e&&e.value){f.width=parseInt(e.value.value)}var b=c.modifiers.get("height");if(b&&b.value){f.height=parseInt(b.value.value)}var a=c.modifiers.get("linkedTo");if(a&&a.value){f.linkedTo=a.value.value}var g=new UmlCanvas.Note(f);if(a&&a.value){a.value.value.split(",").iterate(function(i){var j=d.getDiagramClass(i);d.addRelation(new UmlCanvas.NoteLink({note:g,element:j}))})}return g};UmlCanvas.Note.MANIFEST={name:"note",properties:["text","width","height","linkedTo"],propertyPath:[Canvas2D.CompositeShape,Canvas2D.Rectangle],libraries:["UmlCanvas","Class Diagram","Element"]};Canvas2D.registerShape(UmlCanvas.Note);UmlCanvas.NoteLink=Canvas2D.Connector.extend({preprocess:function(a){a.routing=a.routing||"horizontal";a.lineStyle=a.lineStyle||"dashed";a.from=a.note;a.to=a.element;return a},asConstruct:function asConstruct(){return null}});UmlCanvas.NoteLink.MANIFEST={name:"notelink",propertyPath:[Canvas2D.Connector],libraries:["UmlCanvas","Class Diagram","Relationship"]};Canvas2D.registerShape(UmlCanvas.NoteLink);UmlCanvas.State=Canvas2D.Rectangle.extend({preprocess:function preprocess(a){a.label=a.name;return a},getHeight:function(){return this.getProperty("height")},getWidth:function(){return this.getProperty("width")}});UmlCanvas.State.from=function(b,c){var e={};e.name=b.name;var d=b.modifiers.get("width");if(d&&d.value){e.width=d.value.value}var a=b.modifiers.get("height");if(a&&a.value){e.height=a.value.value}var f=b.modifiers.get("geo");if(f&&f.value){e.width=parseInt(f.value.value.split("x")[0]);e.height=parseInt(f.value.value.split("x")[1])}return new UmlCanvas.State(e)};UmlCanvas.State.MANIFEST={name:"state",propertyPath:[Canvas2D.CompositeShape,Canvas2D.Rectangle],libraries:["UmlCanvas","State Diagram","Element"]};Canvas2D.registerShape(UmlCanvas.State);UmlCanvas.Transition=Canvas2D.Connector.extend({preprocess:function(a){a.end=UmlCanvas.ConnectorHeads.Arrow;a.routing=a.routing||"horizontal";return a}});UmlCanvas.Transition.from=function(a,c){var d=[];d.routing="horizontal";if(a.annotation){if(a.annotation.data.contains(":")&&a.annotation.data.contains("-")){var e=a.annotation.data.split(":");d.routing="custom";d.routeStyle=e[0];var b=e[1].split("-");d.routeBegin=b[0];d.routeEnd=b[1]}else{d.routing=a.annotation.data}}d.from=c.getDiagramClass(a.name.split("-")[0]);d.to=c.getDiagramClass(a.name.split("-")[1]);var f=[];if(!d.from){f.push("Unknown FROM property "+client.supers[0].constructName+"  on "+a.name)}if(!d.to){f.push("Unknown TO property "+supplier.supers[0].constructName+"  on "+a.name)}if(f.length>0){return{errors:f}}else{return new UmlCanvas.Transition(d)}};UmlCanvas.Transition.MANIFEST={name:"transition",propertyPath:[Canvas2D.Connector],libraries:["UmlCanvas","Class Diagram","Relationship"]};Canvas2D.registerShape(UmlCanvas.Transition);UmlCanvas.Widget=Class.extend({init:function initialize(a){this.model=a;this.setupConsole();this.setupSource();this.setupGeneratedSource();this.setupErrors();this.setupAbout();this.setupEditor()},getName:function getName(){return this.model.getName()},getElement:function getElement(a){return document.getElementById("UC_"+a+"_for_"+this.getName())},setupConsole:function setupConsole(){this.console=this.getElement("console");if(this.console){this.model.console=this.console;this.model.log("Widget: attached console : "+this.console.id)}},setupSource:function setupSource(){this.source=document.getElementById(this.getName()+"Source")||this.getElement("source");if(this.source){this.model.log("Widget: attached source : "+this.source.id)}},setupGeneratedSource:function setupGeneratedSource(){this.generated=document.getElementById(this.id+"Generated")||this.getElement("generated");if(this.generated){this.model.log("Widget: attached generated : "+this.generated.id)}},setupEditor:function setupEditor(){this.editor=this.getElement("editor");if(this.editor){this.editor.onkeydown=this.handleInput.scope(this);this.model.on("sourceUpdated",function(a){if(!this.updatingCanvas&&!this.updatedCanvas){this.setSource(a)}this.updatedCanvas=false}.scope(this));this.updatingCanvas=false;this.autoSave();this.model.log("Widget: attached editor : "+this.editor.id)}this.load()},setupErrors:function setupErrors(){this.errors=this.getElement("errors");if(this.errors){this.model.log("Widget: attached errors : "+this.errors.id)}},showErrors:function showErrors(a){if(!this.errors){return}this.errors.value=a},setupAbout:function setupAbout(){this.about=this.getElement("about");if(this.about){var a="";Canvas2D.extensions.iterate(function(b){a+="\n<hr>\n";a+="<b>Library: "+b.name+" "+b.version+"</b> by "+b.author+"<br>"+b.info});this.about.innerHTML="<b>Canvas2D "+Canvas2D.version+'</b><br>Copyright &copy 2009, <a href="http://christophe.vg" target="_blank">Christophe VG</a> & <a href="http://thesoftwarefactory.be" target="_blank">The Software Factory</a><br>Visit <a href="http://thesoftwarefactory.be/wiki/Canvas2D" target="_blank">http://thesoftwarefactory.be/wiki/Canvas2D</a> for more info. Licensed under the <a href="http://thesoftwarefactory.be/wiki/BSD_License" target="_blank">BSD License</a>.'+a}},updateCanvas:function updateCanvas(){var a=this.getEditorSource();if(a&&this.isInputDirty()){if(a.replace(/^\s+|\s+$/g,"")!=""){this.updatingCanvas=true;this.load(a);this.showErrors(this.model.errors);if(this.model.errors==""){this.updatedCanvas=true;this.updatingCanvas=false}}this.handleInput()}},autoSave:function autoSave(){this.updateCanvas();setTimeout(this.autoSave.scope(this),100)},handleInput:function handleInput(){this.oldValue=this.editor.value},isInputDirty:function isInputDirty(){return this.oldValue!=this.editor.value},setSource:function setSource(a){this.editor.value=a;this.handleInput()},load:function load(a){a=a||this.getSource();if(a!=""){this.model.load(a)}},getSource:function getSource(){return this.getEditorSource()||this.getLocalSource()||""},getEditorSource:function getEditorSource(){return this.editor?this.editor.value:null},getLocalSource:function getLocalSource(){return this.source?(this.source.value||this.source.innerHTML):null}});UmlCanvas.Widget.setup=function UmlCanvas_Widget_setup(a){a.Widget=new UmlCanvas.Widget(a)};UmlCanvas.KickStart={plugins:{}};UmlCanvas.KickStart.Starter=Canvas2D.KickStart.Starter.extend({init:function init(){this.manager=new UmlCanvas.Manager();this.pluginManagerRepository=new UmlCanvas.KickStart.PluginManagerRepository();this.setupPluginsFactories()},setupPluginsFactories:function setupPluginsFactories(){$H(UmlCanvas.KickStart.plugins).iterate(function(a,b){if(b.Manager){this.pluginManagerRepository.setManager(a,new b.Manager())}}.scope(this))},getTag:function getTag(){return"UmlCanvas"},makeInstance:function makeInstance(b){var a=this.manager.setupModel(b);UmlCanvas.Widget.setup(a);this.pluginManagerRepository.getManagers().iterate(function(c){if(c.needsPlugin(a)){a.addPlugin(c.setup(a))}}.scope(this));a.activatePlugins();return a}});ProtoJS.Event.observe(window,"load",function(){with(UmlCanvas.KickStarter=new UmlCanvas.KickStart.Starter()){on("ready",function(){UmlCanvas.fireEvent("ready")});start()}});UmlCanvas.KickStart.PluginManagerRepository=Class.extend({init:function(){this.managers={}},setManager:function setManager(b,a){this.managers[b]=a},getManager:function getManager(a){return this.managers[a]},getManagers:function getManagers(){return $H(this.managers).values()}});UmlCanvas.Plugin=Class.extend({getName:function getName(){throw ("Plugin must implement getName().")},activate:function activate(){throw ("Plugin must implement activate().")}});UmlCanvas.PluginManager=Class.extend({getPluginClass:function getPluginClass(){throw ("PluginManager must implement getPluginClass().")},setup:function setup(a){throw ("PluginManager must implement setup().")},needsPlugin:function needsPlugin(){return false},setup:function setup(a){return new (this.getPluginClass())(a)}});UmlCanvas.KickStart.plugins.Inspector=UmlCanvas.Plugin.extend({init:function init(a){this.model=a;this.initSheets()},getName:function getName(){return"inspector"},initSheets:function initSheets(){this.sheets={};this.sheetPositions=[];this.source=document.createElement("textarea");this.addSheet(0,"source",this.source);this.console=document.createElement("textarea");this.addSheet(1,"console",this.console);this.addSheet(2,"about")},activate:function activate(){this.insertInspector();this.wireActivation()},getElement:function getElement(a){return document.getElementById("UC_inspector_"+a+"_for_"+this.model.getName())},getSheet:function getSheet(a){return this.sheets[a]},addSheet:function addSheet(b,a,d){var c=new UmlCanvas.KickStart.plugins.Inspector.Sheet(a,d);this.sheetPositions.splice(b,0,c);this.sheets[c.getLabel()]=c},removeSheet:function removeSheet(a){this.sheetPositions.splice(this.sheetPositions.indexOf(this.getSheet(a)),1);delete this.sheets[a]},getDefaultTab:function getDefaultTab(){return this.defaultTab||"source"},setDefaultTab:function setDefaultTab(a){this.defaultTab=a||"source"},insertInspector:function insertInspector(){this.insertInspectorHTML();this.wireResizeAndDragHandling();this.setupSheets();this.gotoTab(this.getDefaultTab());this.resizeTo(0,0);this.moveTo(this.model.getLeft(),this.model.getTop());this.shownBefore=false;UmlCanvas.Widget.setup(this.model)},insertInspectorHTML:function insertInspectorHTML(){this.inspector=document.createElement("DIV");this.inspector.id="UC_inspector_for_"+this.model.getName();this.inspector.className="UC_inspector";this.inspector.innerHTML='<table class="UC_inspector_header" width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="UC_inspector_close" onclick="this.parentNode.parentNode.parentNode.parentNode.style.display=\'none\';"></td><td><h1 id="UC_inspector_header_for_'+this.model.getName()+'">UmlCanvas Inspector</h1></td><td class="UC_inspector_corner"></td></tr></table><div id="UC_inspector_tabs_for_'+this.model.getName()+'" class="UC_inspector_tabs"></div><div id="UC_inspector_content_for_'+this.model.getName()+'"class="UC_inspector_content"></div><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td class="UC_inspector_status">'+UmlCanvas.version+'</td><td id="UC_inspector_resize_for_'+this.model.getName()+'"class="UC_inspector_resize"></td></tr></table>';document.body.appendChild(this.inspector)},setupSheets:function setupSheets(){this.tabs=this.getElement("tabs");this.content=this.getElement("content");this.sheetPositions.iterate(function(a){var b=document.createElement("A");b.id="UC_inspector_tab_"+a.getLabel()+"_for_"+this.model.getName();b.href="javascript:";b.className="UC_inspector_tab";b.onclick=function(c){return function(){this.gotoTab(c)}.scope(this)}.scope(this)(a.getLabel());b.appendChild(document.createTextNode(a.getLabel()));this.tabs.appendChild(b);this.content.appendChild(a.getElement(this.model.getName()))}.scope(this))},gotoTab:function gotoTab(a){if(this.currentTab){this.currentTab.className="UC_inspector_tab"}if(this.currentSheet){this.currentSheet.className="UC_inspector_tab_content"}this.currentTab=this.getElement("tab_"+a);this.currentSheet=document.getElementById("UC_"+a+"_for_"+this.model.getName());if(this.currentTab){this.currentTab.className="UC_inspector_tab_selected"}if(this.currentSheet){this.currentSheet.className="UC_inspector_tab_content_selected"}},wireResizeAndDragHandling:function wireResizeAndDragHandling(){ProtoJS.Event.observe(this.getElement("resize"),"mousedown",function(a){this.resizing=true;this.handleMouseDown(a)}.scope(this));ProtoJS.Event.observe(this.getElement("header"),"mousedown",function(a){this.handleMouseDown(a);this.dragging=true}.scope(this));ProtoJS.Event.observe(document,"mouseup",this.handleMouseUp.scope(this));ProtoJS.Event.observe(document,"mousemove",this.handleMouseMove.scope(this))},handleMouseDown:function handleMouseDown(a){if(a.preventDefault){a.preventDefault()}a.returnValue=false;this.currentPos=this.getXY(a)},handleMouseMove:function handleMouseMove(a){if(this.resizing||this.dragging){var b=this.getXY(a);if(this.resizing){this.resizeBy(b.x-this.currentPos.x,b.y-this.currentPos.y)}else{if(this.dragging){this.moveBy(b.x-this.currentPos.x,b.y-this.currentPos.y)}}this.currentPos=b}},handleMouseUp:function handleMouseMove(a){this.resizing=false;this.dragging=false},getXY:function getXY(b){var a,c;if(ProtoJS.Browser.IE){a=event.clientX+document.body.scrollLeft;c=event.clientY+document.body.scrollTop}else{a=b.pageX;c=b.pageY}return{x:a,y:c}},resizeBy:function resizeBy(b,a){this.resizeTo(parseInt(this.inspector.style.width)+b,parseInt(this.inspector.style.height)+a)},resizeTo:function resizeTo(a,c){this.inspector.style.width=(a>=300?a:300)+"px";this.inspector.style.height=(c>=150?c:150)+"px";var b=ProtoJS.Browser.IE?0:10;this.content.style.width=(parseInt(this.inspector.style.width)-b)+"px";this.content.style.height=(parseInt(this.inspector.style.height)-73)+"px";if(ProtoJS.Browser.IE){this.console.style.height=this.content.style.height}this.fireEvent("changeContentSize",{w:parseInt(this.content.style.width),h:parseInt(this.content.style.height)})},moveBy:function moveBy(b,a){this.moveTo(parseInt(this.inspector.style.left)+b,parseInt(this.inspector.style.top)+a)},moveTo:function resizeTo(a,b){this.inspector.style.left=(a>=0?a:0)+"px";this.inspector.style.top=(b>=0?b:0)+"px"},getWidth:function getWidth(){return parseInt(this.inspector.style.width)},getHeight:function getHeight(){return parseInt(this.inspector.style.height)},show:function show(){if(!this.shownBefore){this.resizeTo(this.model.getWidth(),this.model.getHeight());this.shownBefore=true}this.inspector.style.display="block"},hide:function hide(){this.inspector.style.display="none"},wireActivation:function wireActivation(){if(UmlCanvas.Config.Inspector.wireActivation){Canvas2D.Keyboard.on("keyup",function(a){if(this.model.canvas.mouseOver&&a=="73"){this.show()}}.scope(this))}}});ProtoJS.mix(Canvas2D.Factory.extensions.all.EventHandling,UmlCanvas.KickStart.plugins.Inspector.prototype);UmlCanvas.KickStart.plugins.Inspector.Manager=UmlCanvas.PluginManager.extend({needsPlugin:function needsPlugin(a){return !a.canvas.canvas.className.contains("withoutInspector")},getPluginClass:function getPluginClass(){return UmlCanvas.KickStart.plugins.Inspector}});UmlCanvas.KickStart.plugins.Inspector.Sheet=Class.extend({init:function init(a,b){this.label=a;if(b){this.element=b}else{this.element=document.createElement("div")}},getLabel:function getLabel(){return this.label},setLabel:function setLabel(a){this.label=a},getElement:function getElement(a){this.element.id="UC_"+this.getLabel()+"_for_"+a;this.element.className="UC_inspector_tab_content";this.element.style.resize="none";return this.element}});UmlCanvas.KickStart.plugins.HuC=UmlCanvas.Plugin.extend({init:function init(a){this.model=a;this.initSheets();this.setupSource()},getName:function getName(){return"huc"},activate:function activate(){},initSheets:function initSheets(){if(inspector=this.getInspector()){with(inspector){addSheet(0,"edit",this.createEditorSheet());addSheet(1,"properties",this.createPropertiesSheet());removeSheet("source");on("changeContentSize",this.handleInspectorResize.scope(this))}inspector.setDefaultTab("edit")}},handleInspectorResize:function handleInspectorResize(a){if(a.h>24+75){this.editor.style.height=(a.h-24-75)+"px"}},getElement:function getElement(a){return this.model.Widget.getElement(a)},getEditor:function getEditor(){return this.editor},createEditorSheet:function createEditorSheet(){var a=document.createElement("div");a.style.overflow="hidden";a.appendChild(this.createEditorToolbar());a.appendChild(this.createEditorTextPane());a.appendChild(this.createErrorTextPane());return a},createPropertiesSheet:function createPropertiesSheet(){var a=document.createElement("div");this.propertiesForm=document.createElement("form");this.propertiesForm.id="UC_propertiesForm_for_"+this.model.getName();var b=document.createElement("table");b.className="UC_inspector_properties";this.setupProperties();this.propertyFields={};this.props.iterate(function(j){var c=document.createElement("tbody");var g=document.createElement("tr");var e=document.createElement("th");var i=document.createElement("td");var f=document.createElement("span");var d=document.createElement("td");var h;if("string"==j.type&&100<j.maxlength){h=document.createElement("textarea")}else{if("string"==j.type||"integer"==j.type){h=document.createElement("input");h.name="text"}else{if("author"==j.id){h=document.createElement("a");h.href="http://hosted.umlcanvas.org";h.target="_blank"}}}e.innerHTML=j.label;h.id="UC_"+j.id+"_for_"+this.model.getName();ProtoJS.Event.observe(h,"blur",function(){this.validateField(h,j);this.updateDiagram()}.scope(this));f.className="invalid";f.id="UC_"+j.id+"_error_for_"+this.model.getName();i.appendChild(h);g.appendChild(e);g.appendChild(i);d.appendChild(f);g.appendChild(d);c.appendChild(g);b.appendChild(c);this.propertyFields[j.id]=h}.scope(this));this.propertiesForm.appendChild(b);a.appendChild(this.createEditorToolbar());a.appendChild(this.propertiesForm);return a},setupProperties:function setupProperties(){this.props=[{id:"name",label:"Name",type:"string",minlength:1,maxlength:25},{id:"descr",label:"Description",type:"string",minlength:1,maxlength:1000},{id:"width",label:"Width",type:"integer",minlength:2,maxlength:3},{id:"height",label:"Height",type:"integer",minlength:2,maxlength:3},{id:"notes",label:"Notes",type:"string",minlength:0,maxlength:1000},{id:"author",label:"Author",type:"link",minlength:0,maxlength:1000}]},validateFields:function validateFields(){var a=true;this.props.iterate(function(b){a=this.validateField(this.getElement(b.id),b)&&a}.scope(this));return a},validateField:function validateField(c,d){var b=true;var a=this.getElement(d.id+"_error");if(d.type!="link"){c.style.backgroundColor="#FFF";a.innerHTML="";if("integer"==d.type){if(isNaN(parseInt(c.value,10))){c.value=0}else{c.value=parseInt(c.value,10)}}if(c.value.length>d.maxlength){c.value=c.value.substring(0,d.maxlength)}if(c.value.length<d.minlength){c.style.backgroundColor="#faa";a.innerHTML="minimal length: "+d.minlength;b=false}}return b},createEditorToolbar:function createEditorToolbar(){var a=new UmlCanvas.KickStart.plugins.HuC.Toolbar();a.addAction(UmlCanvas.Config.Inspector.Icons.save,"Save",function(){return function(){if(this.validateFields()){this.saveDiagram({id:this.model.getName(),src:this.getEditor().value,name:this.getElement("name").value,descr:this.getElement("descr").value,width:this.getElement("width").value,height:this.getElement("height").value,notes:this.getElement("notes").value})}else{this.getInspector().gotoTab("properties")}}.scope(this)}.scope(this)());a.addAction(UmlCanvas.Config.Inspector.Icons.reload,"Reload",function(){return function(){if(confirm("Do you want to reload this diagram? \n\nIf you reload this diagram, all changes made after your last save action will be lost.")){this.loadDiagram()}}.scope(this)}.scope(this)());return a.getToolbar()},createEditorTextPane:function createEditorTextPane(){this.editor=document.createElement("textarea");this.editor.id="UC_editor_for_"+this.model.getName();this.editor.style.resize="none";this.editor.style.border="0px solid white";return this.editor},createErrorTextPane:function createErrorTextPane(){var a=document.createElement("textarea");a.id="UC_errors_for_"+this.model.getName();a.style.resize="none";a.style.height="75px";return a},getInspector:function getInspector(){return this.model.getPlugin("inspector")},setupSource:function setupSource(){if(this.model.Widget.getSource()==""){this.loadDiagram()}},getCanvasElement:function getCanvasElement(){return this.model},decodeHTMLSpecialCharacters:function decodeHTMLSpecialCharacters(a){return a.replace(/&quot;/g,'"')},loadDiagram:function loadDiagram(){if(this.model.getName()==""){return this.loadProperties()}this.load(this.model.getName())},load:function load(b){var a=UmlCanvas.Config.HuC.repository_url+b+":json";new ProtoJS.Ajax().fetch(a,function(c){this.model.load(this.decodeHTMLSpecialCharacters(c.src));this.loadProperties(c);this.updateDiagram()}.scope(this))},loadProperties:function loadProperties(a){if(!this.propertiesForm){return}a=a||{width:this.getCanvasElement().getWidth(),height:this.getCanvasElement().getHeight()};this.propertiesForm.reset();$H(a).iterate(function(b){if(this.propertyFields[b]!=null){if("author"==b){this.propertyFields[b].innerHTML=a[b];this.propertyFields[b].href=UmlCanvas.Config.HuC.repository_url+"~"+a[b]}this.propertyFields[b].value=a[b]}}.scope(this))},updateDiagram:function updateDiagram(){if(!this.propertyFields){return}this.getCanvasElement().setSize(this.propertyFields.width.value,this.propertyFields.height.value)},saveDiagram:function saveDiagram(d){var c=document.getElementById("submitForm");if(!c){c=document.createElement("form");c.id="submitForm";c.method="post";c.action=UmlCanvas.Config.HuC.repository_submit_url;c.target="formresult";this.submitFields={};for(var b in d){var a=document.createElement("input");this.submitFields[b]=a;a.type="hidden";a.name=b;c.appendChild(a)}document.body.appendChild(c)}for(var b in d){this.submitFields[b].value=d[b]}window.open("","formresult");c.submit()}});UmlCanvas.KickStart.plugins.HuC.Toolbar=Class.extend({init:function init(){this.toolbar=document.createElement("div");this.toolbar.className="UC_toolbar"},getToolbar:function getToolbar(){return this.toolbar},addAction:function addAction(d,b,c){var a=document.createElement("img");a.src=d;a.alt=b;a.onclick=c;this.toolbar.appendChild(a)}});UmlCanvas.KickStart.plugins.HuC.Manager=UmlCanvas.PluginManager.extend({needsPlugin:function needsPlugin(a){return a.getPlugin("inspector")!=null},getPluginClass:function getPluginClass(){return UmlCanvas.KickStart.plugins.HuC}});UmlCanvas.Defaults={};UmlCanvas.Class.Defaults={name:"newClass",stereotype:"",supers:[],useCrispLines:true,font:"7pt Verdana",fontColor:"black",fontAbstract:"italic 7pt Verdana",abstractColor:"black",decoration:"none",decorationStatic:"underline",lineWidth:1,lineColor:"rgba(255,0,0,1)",backgroundColor:"rgba(255,255,200,1)",padding:5,lineSpacing:5,compartmentSpacing:3};UmlCanvas.Interface.Defaults={name:"newInterface"};UmlCanvas.Enumeration.Defaults={name:"newEnumeration"};UmlCanvas.Association.Defaults={name:"newAssociation"};UmlCanvas.Dependency.Defaults={name:"newDependency"};UmlCanvas.Inheritance.Defaults={name:"newInheritance"};UmlCanvas.Realization.Defaults={name:"newRealization"};UmlCanvas.Note.Defaults={name:"NewName",text:"New Note",width:100,height:40,padding:5,font:"7pt Verdana",fontColor:"black",lineColor:"grey",backgroundColor:"rgba(240,240,240,1)",lineWidth:1,useCrispLines:true};UmlCanvas.NoteLink.Defaults={};UmlCanvas.State.Defaults={name:"newState",roundCorners:true,lineColor:"rgb(250,125,0)",fillColor:"rgb(255,240,175)",labelColor:"rgb(250,125,0)",labelPos:"top-inner",width:100,height:50};UmlCanvas.Transition.Defaults={name:"NewTransition",lineColor:"rgb(250,125,0)"};UmlCanvas.Config={};UmlCanvas.Config.Inspector={wireActivation:true};UmlCanvas.Config.Inspector.Icons={save:"http://static.thesoftwarefactory.be/images/icons/disk-black.png",reload:"http://static.thesoftwarefactory.be/images/icons/arrow-circle-315.png",left:"http://static.thesoftwarefactory.be/images/inspector/left.png",right:"http://static.thesoftwarefactory.be/images/inspector/right.png"};UmlCanvas.Config.HuC={repository_url:"http://hosted.umlcanvas.org/",repository_submit_url:"http://hosted.umlcanvas.org/submit/index.php"};var headID=document.getElementsByTagName("head")[0];var cssNode=document.createElement("link");cssNode.type="text/css";cssNode.rel="stylesheet";cssNode.href="http://static.thesoftwarefactory.be/css/inspector.css";cssNode.media="screen";headID.appendChild(cssNode);