浏览代码

Remove Modelverse connector from master.

bentleyjoakes 6 年之前
父节点
当前提交
45aa18e799

+ 0 - 1
client/atompm.html

@@ -42,7 +42,6 @@
 		<script text="text/javascript" src="client/connection_utils.js"></script>
 		<script text="text/javascript" src="client/window_management.js"></script>
 		<script text="text/javascript" src="client/file_browser.js"></script>
-        <script text="text/javascript" src="client/modelverse_connector.js"></script>
 		<script text="text/javascript" src="client/query_response.js"></script>
 		<script text="text/javascript" src="client/collaboration.js"></script>
 		<script text="text/javascript" src="client/layout.js"></script>

+ 0 - 1
client/file_browser.js

@@ -294,7 +294,6 @@ class FileBrowser{
 
                     //fnames might be a function that returns the files in
                     //the folder
-                    //bentley: the ModelVerse only examines one folder at a time
                     let file_list = fnames;
                     if (!(Array.isArray(fnames))){
                         file_list = await fnames(folder);

文件差异内容过多而无法显示
+ 0 - 1074
client/modelverse_connector.js


+ 0 - 333
client/modelverse_connector_rendering.js

@@ -1,333 +0,0 @@
-/* This file holds the code for rendering SimpleClassDiagrams from the ModelVerse.
-
-1) The rendering meta-model and transformation are sent to the ModelVerse.
-2) The transformation executes, creating the rendered model and returning the JSON.
-3) 'model_CS' will then contain the rendered concrete syntax
-
-This method is dependent on the meta-model being SimpleClassDiagrams.
-Therefore, this code should be put aside until a more robust rendering
-system in the ModelVerse is created.
-
-For example, it would be ideal to have a render transformation explicitly defined
-for each metamodel in the ModelVerse. Then the render_model command could just
-return the JSON for the rendered model (or just the updated portion).
-
- */
-
-class ModelVerseRenderer {
-
-    static get_CS(model_name) {
-
-        //get CS for model
-
-        let SCD = "formalisms/SimpleClassDiagrams";
-        let MM_render = "formalisms/SCD_graphical";
-        let render_trans_model = "models/render_SCD";
-        let render_MM = this.get_render_mm();
-        let render_trans_code = this.get_render_trans();
-        let render_model_add = {
-            'data': encodeURIComponent(utils.jsons(["model_add", SCD, MM_render, render_MM]))
-        };
-
-        let transformation_between = {
-            'data': encodeURIComponent(utils.jsons(["transformation_add_AL", "rendered", MM_render, "abstract", SCD, "", "rendered", MM_render, "", render_trans_model]))
-        };
-
-        let transformation_data = {
-            'data': encodeURIComponent(utils.jsons(["transformation_add_AL", render_trans_code]))
-        };
-
-        let model_rendered = {
-            'data': encodeURIComponent(utils.jsons(["model_render", model_name, render_trans_model, "models/rendered_model"]))
-        };
-
-        //CS COMMANDS
-
-        let model_CS = null;
-
-        //TODO: only need to add models if not present
-        ModelVerseConnector.send_command(render_model_add).then(ModelVerseConnector.get_output)
-            .then(ModelVerseConnector.send_command(transformation_between)).then(ModelVerseConnector.get_output)
-            .then(ModelVerseConnector.send_command({})).then(ModelVerseConnector.get_output)
-            .then(ModelVerseConnector.send_command(transformation_data)).then(ModelVerseConnector.get_output)
-            .then(ModelVerseConnector.send_command(model_rendered)).then(ModelVerseConnector.get_output)
-
-            .then(function(data){
-                // console.log("Data before: ");
-                // console.log(data);
-                data = data.replace("Success: ", "");
-                // console.log("Data after:");
-                // console.log(data);
-                model_CS = eval(JSON.parse(data));
-            });
-
-    }
-
-    static get_render_mm() {
-        let mm = "include \"primitives.alh\"\n" +
-            "\n" +
-            "SimpleAttribute Natural {}\n" +
-            "SimpleAttribute String {}\n" +
-            "SimpleAttribute Boolean {}\n" +
-            "\n" +
-            "Class GraphicalElement {\n" +
-            "    x : Natural\n" +
-            "    y : Natural\n" +
-            "    layer : Natural\n" +
-            "}\n" +
-            "\n" +
-            "Class Group : GraphicalElement {\n" +
-            "    __asid : String\n" +
-            "    dirty : Boolean\n" +
-            "}\n" +
-            "\n" +
-            "Association ConnectingLine (Group, Group) {\n" +
-            "    offsetSourceX : Natural\n" +
-            "    offsetSourceY : Natural\n" +
-            "    offsetTargetX : Natural\n" +
-            "    offsetTargetY : Natural\n" +
-            "    lineWidth : Natural\n" +
-            "    lineColour : String\n" +
-            "    arrow : Boolean\n" +
-            "    __asid : String\n" +
-            "    dirty : Boolean\n" +
-            "    layer : Natural\n" +
-            "}\n" +
-            "\n" +
-            "Class LineElement : GraphicalElement {\n" +
-            "    lineWidth : Natural\n" +
-            "    lineColour : String\n" +
-            "}\n" +
-            "\n" +
-            "Class Text : LineElement {\n" +
-            "    text : String\n" +
-            "}\n" +
-            "\n" +
-            "Class Line : LineElement {\n" +
-            "    targetX : Natural\n" +
-            "    targetY : Natural\n" +
-            "    arrow : Boolean\n" +
-            "}\n" +
-            "\n" +
-            "Class Shape : LineElement {\n" +
-            "    fillColour : String\n" +
-            "    width : Natural\n" +
-            "    height : Natural\n" +
-            "}\n" +
-            "\n" +
-            "Class Figure : GraphicalElement {\n" +
-            "    width : Natural\n" +
-            "    height : Natural\n" +
-            "}\n" +
-            "\n" +
-            "Class SVG {\n" +
-            "    data : String\n" +
-            "}\n" +
-            "\n" +
-            "Class Rectangle : Shape {\n" +
-            "}\n" +
-            "\n" +
-            "Class Ellipse : Shape {\n" +
-            "}\n" +
-            "\n" +
-            "Association contains (Group, GraphicalElement) {}\n" +
-            "Association renders (Figure, SVG) {\n" +
-            "    source_lower_cardinality = 1\n" +
-            "    target_lower_cardinality = 1\n" +
-            "    target_upper_cardinality = 1\n" +
-            "}"
-        ;
-
-        return mm;
-    }
-
-    static get_render_trans() {
-        let trans = "include \"primitives.alh\"\n" +
-            "include \"modelling.alh\"\n" +
-            "include \"object_operations.alh\"\n" +
-            "include \"utils.alh\"\n" +
-            "\n" +
-            "Boolean function main(model : Element):\n" +
-            "\tElement elements\n" +
-            "\tString class\n" +
-            "\tElement attrs\n" +
-            "\tElement attr_keys\n" +
-            "\tString attr_key\n" +
-            "\tString group\n" +
-            "\tString elem\n" +
-            "\tInteger loc\n" +
-            "\tInteger text_loc\n" +
-            "\tElement related_groups\n" +
-            "\tloc = 10\n" +
-            "\n" +
-            "\tElement groups\n" +
-            "\tgroups = dict_create()\n" +
-            "\n" +
-            "\telements = allInstances(model, \"rendered/Group\")\n" +
-            "\twhile (set_len(elements) > 0):\n" +
-            "\t\tgroup = set_pop(elements)\n" +
-            "\t\tif (set_len(allIncomingAssociationInstances(model, group, \"TracabilityClass\")) == 0):\n" +
-            "\t\t\tElement to_remove\n" +
-            "\t\t\tString elem_to_remove\n" +
-            "\t\t\tto_remove = allAssociationDestinations(model, group, \"rendered/contains\")\n" +
-            "\t\t\twhile (set_len(to_remove) > 0):\n" +
-            "\t\t\t\telem_to_remove = set_pop(to_remove)\n" +
-            "\t\t\t\tif (read_type(model, elem_to_remove) == \"rendered/Group\"):\n" +
-            "\t\t\t\t\tset_add(to_remove, elem_to_remove)\n" +
-            "\t\t\t\telse:\n" +
-            "\t\t\t\t\tmodel_delete_element(model, elem_to_remove)\n" +
-            "\t\t\tmodel_delete_element(model, group)\n" +
-            "\n" +
-            "\telements = allInstances(model, \"abstract/Class\")\n" +
-            "\twhile (set_len(elements) > 0):\n" +
-            "\t\tclass = set_pop(elements)\n" +
-            "\t\t\n" +
-            "\t\tInteger x\n" +
-            "\t\tInteger y\n" +
-            "\t\tx = loc\n" +
-            "\t\ty = 10\n" +
-            "\n" +
-            "\t\t// Check if there is already an associated element\n" +
-            "\t\tif (set_len(allOutgoingAssociationInstances(model, class, \"TracabilityClass\")) > 0):\n" +
-            "\t\t\t// Yes, but is it still clean?\n" +
-            "\t\t\tBoolean dirty\n" +
-            "\t\t\tdirty = False\n" +
-            "\n" +
-            "\t\t\trelated_groups = allAssociationDestinations(model, class, \"TracabilityClass\")\n" +
-            "\t\t\twhile (set_len(related_groups) > 0):\n" +
-            "\t\t\t\tgroup = set_pop(related_groups)\n" +
-            "\t\t\t\tif (value_eq(read_attribute(model, group, \"dirty\"), True)):\n" +
-            "\t\t\t\t\t// No, so mark all as dirty\n" +
-            "\t\t\t\t\tdirty = True\n" +
-            "\t\t\t\t\tbreak!\n" +
-            "\t\t\t\telse:\n" +
-            "\t\t\t\t\t// Yes, so just ignore this!\n" +
-            "\t\t\t\t\tcontinue!\n" +
-            "\n" +
-            "\t\t\tif (bool_not(dirty)):\n" +
-            "\t\t\t\tdict_add(groups, class, group)\n" +
-            "\t\t\t\tcontinue!\n" +
-            "\t\t\telse:\n" +
-            "\t\t\t\trelated_groups = allAssociationDestinations(model, class, \"TracabilityClass\")\n" +
-            "\t\t\t\tElement to_remove\n" +
-            "\t\t\t\tString elem_to_remove\n" +
-            "\t\t\t\twhile (set_len(related_groups) > 0):\n" +
-            "\t\t\t\t\tgroup = set_pop(related_groups)\n" +
-            "\t\t\t\t\tto_remove = allAssociationDestinations(model, group, \"rendered/contains\")\n" +
-            "\t\t\t\t\tx = create_value(read_attribute(model, group, \"x\"))\n" +
-            "\t\t\t\t\ty = create_value(read_attribute(model, group, \"y\"))\n" +
-            "\t\t\t\t\twhile (set_len(to_remove) > 0):\n" +
-            "\t\t\t\t\t\telem_to_remove = set_pop(to_remove)\n" +
-            "\t\t\t\t\t\tif (read_type(model, elem_to_remove) == \"rendered/Group\"):\n" +
-            "\t\t\t\t\t\t\tset_add(to_remove, elem_to_remove)\n" +
-            "\t\t\t\t\t\telse:\n" +
-            "\t\t\t\t\t\t\tmodel_delete_element(model, elem_to_remove)\n" +
-            "\t\t\t\t\tmodel_delete_element(model, group)\n" +
-            "\n" +
-            "\t\tattr_keys = dict_keys(getAttributeList(model, class))\n" +
-            "\t\ttext_loc = 5\n" +
-            "\n" +
-            "\t\tgroup = instantiate_node(model, \"rendered/Group\", \"\")\n" +
-            "\t\tinstantiate_attribute(model, group, \"x\", x)\n" +
-            "\t\tinstantiate_attribute(model, group, \"y\", y)\n" +
-            "\t\tinstantiate_attribute(model, group, \"__asid\", list_read(string_split_nr(class, \"/\", 1), 1))\n" +
-            "\t\tinstantiate_attribute(model, group, \"layer\", 0)\n" +
-            "\t\tdict_add(groups, class, group)\n" +
-            "\t\tloc = loc + 200\n" +
-            "\n" +
-            "\t\telem = instantiate_node(model, \"rendered/Rectangle\", \"\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"x\", 0)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"y\", 0)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"height\", 40 + set_len(getInstantiatableAttributes(model, class, \"abstract/AttributeLink\")) * 20)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"width\", 150)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineWidth\", 2) \n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineColour\", \"black\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"fillColour\", \"white\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"layer\", 1)\n" +
-            "\t\tinstantiate_link(model, \"rendered/contains\", \"\", group, elem)\n" +
-            "\n" +
-            "\t\tString multiplicities\n" +
-            "\t\tString lower_card\n" +
-            "\t\tString upper_card\n" +
-            "\t\tif (element_eq(read_attribute(model, class, \"lower_cardinality\"), read_root())):\n" +
-            "\t\t\tlower_card = \"*\"\n" +
-            "\t\telse:\n" +
-            "\t\t\tlower_card = cast_value(read_attribute(model, class, \"lower_cardinality\"))\n" +
-            "\t\tif (element_eq(read_attribute(model, class, \"upper_cardinality\"), read_root())):\n" +
-            "\t\t\tupper_card = \"*\"\n" +
-            "\t\telse:\n" +
-            "\t\t\tupper_card = cast_value(read_attribute(model, class, \"upper_cardinality\"))\n" +
-            "\t\tmultiplicities = (((\"[\" + lower_card) + \"..\") + upper_card) + \"]\"\n" +
-            "\n" +
-            "\t\telem = instantiate_node(model, \"rendered/Text\", \"\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"x\", 5)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"y\", 3)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineWidth\", 1)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineColour\", \"black\")\n" +
-            "\t\tif (element_neq(read_attribute(model, class, \"name\"), read_root())):\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"text\", string_join(read_attribute(model, class, \"name\"), \"  \" + multiplicities))\n" +
-            "\t\telse:\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"text\", \"(unnamed) \" + multiplicities)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"layer\", 2)\n" +
-            "\t\tinstantiate_link(model, \"rendered/contains\", \"\", group, elem)\n" +
-            "\n" +
-            "\t\telem = instantiate_node(model, \"rendered/Line\", \"\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"x\", 0)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"y\", 20)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"targetX\", 150)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"targetY\", 20)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineWidth\", 1)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineColour\", \"black\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"arrow\", False)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"layer\", 2)\n" +
-            "\t\tinstantiate_link(model, \"rendered/contains\", \"\", group, elem)\n" +
-            "\n" +
-            "\t\tattrs = getInstantiatableAttributes(model, class, \"abstract/AttributeLink\")\n" +
-            "\t\tattr_keys = dict_keys(attrs)\n" +
-            "\t\twhile (dict_len(attr_keys) > 0):\n" +
-            "\t\t\tattr_key = set_pop(attr_keys)\n" +
-            "\t\t\telem = instantiate_node(model, \"rendered/Text\", \"\")\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"x\", 5)\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"y\", text_loc + 20)\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"lineWidth\", 1)\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"lineColour\", \"black\")\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"text\", (attr_key + \" : \") + cast_string(list_read(string_split_nr(attrs[attr_key], \"/\", 1), 1)))\n" +
-            "\t\t\tinstantiate_attribute(model, elem, \"layer\", 2)\n" +
-            "\t\t\tinstantiate_link(model, \"rendered/contains\", \"\", group, elem)\n" +
-            "\t\t\ttext_loc = text_loc + 15\n" +
-            "\n" +
-            "\t\tinstantiate_link(model, \"TracabilityClass\", \"\", class, group)\n" +
-            "\n" +
-            "\t// Flush all associations\n" +
-            "\telements = allInstances(model, \"rendered/ConnectingLine\")\n" +
-            "\twhile (set_len(elements) > 0):\n" +
-            "\t\tclass = set_pop(elements)\n" +
-            "\t\tmodel_delete_element(model, class)\n" +
-            "\n" +
-            "\t// Rerender associations\n" +
-            "\telements = allInstances(model, \"abstract/Association\")\n" +
-            "\twhile (set_len(elements) > 0):\n" +
-            "\t\tclass = set_pop(elements)\n" +
-            "\n" +
-            "\t\tattr_keys = dict_keys(getAttributeList(model, class))\n" +
-            "\n" +
-            "\t\telem = instantiate_link(model, \"rendered/ConnectingLine\", \"\", groups[readAssociationSource(model, class)], groups[readAssociationDestination(model, class)])\n" +
-            "\t\tinstantiate_attribute(model, elem, \"offsetSourceX\", 75)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"offsetSourceY\", 30)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"offsetTargetX\", 75)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"offsetTargetY\", 30)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineWidth\", 1)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"lineColour\", \"black\")\n" +
-            "\t\tinstantiate_attribute(model, elem, \"arrow\", True)\n" +
-            "\t\tinstantiate_attribute(model, elem, \"__asid\", list_read(string_split_nr(class, \"/\", 1), 1))\n" +
-            "\t\tinstantiate_attribute(model, elem, \"layer\", 0)\n" +
-            "\t\tlog(\"Real ASID: \" + cast_value(class))\n" +
-            "\t\tlog(\"Found ASID \" + cast_value(list_read(string_split_nr(class, \"/\", 1), 1)))\n" +
-            "\t\tinstantiate_link(model, \"rendered/contains\", \"\", group, elem)\n" +
-            "\n" +
-            "\treturn True!";
-
-        return trans;
-    }
-
-}

+ 0 - 15
doc/toolbars_and_plugins.rst

@@ -59,18 +59,3 @@ To export metamodels or models in AToMPM, follow these steps:
 
 10. If you want to use the exported file in Eclipse, you have to register the metamodel.
 
-
-ModelVerse Toolbar
-------------------
-
-.. warning:: The ModelVerse toolbar is currently in an alpha state. It is only intended as a prototype and should not be used for everyday use, as data loss is certain to occur.
-
-The ModelVerse toolbar is intended to allow for the user to load and save models to/from AToMPM to the Modelverse. 
-
-.. warning:: Currently, only metamodels in the SimpleClassDiagram formalism can be loaded and saved, along with instance models.
-
-The first button on the toolbar connects to a running ModelVerse instance running on the current machine.
-
-The second button loads a model from the ModelVerse into the current AToMPM canvas.
-
-The third button saves the current AToMPM model to the ModelVerse.

+ 0 - 610
users/(default)/Toolbars/ModelVerse/ModelVerse.buttons.model

@@ -1,610 +0,0 @@
-{
-	"csm": {
-		"nodes": {
-			"0": {
-				"typename": {
-					"type": "string",
-					"value": "ButtonIcon"
-				},
-				"position": {
-					"type": "list<double>",
-					"value": [
-						499,
-						271
-					]
-				},
-				"orientation": {
-					"type": "double",
-					"value": 0
-				},
-				"scale": {
-					"type": "list<double>",
-					"value": [
-						1,
-						1
-					]
-				},
-				"mapper": {
-					"type": "code",
-					"value": ""
-				},
-				"parser": {
-					"type": "code",
-					"value": ""
-				},
-				"$contents": {
-					"type": "map<string,*>",
-					"value": {
-						"nodes": {
-							"1": {
-								"width": {
-									"type": "double",
-									"value": "120"
-								},
-								"height": {
-									"type": "double",
-									"value": "50"
-								},
-								"cornerRadius": {
-									"type": "double",
-									"value": "25"
-								},
-								"style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#af0000",
-										"stroke-dasharray": "",
-										"fill": "#000000",
-										"fill-opacity": 0.05,
-										"stroke-width": 2
-									}
-								},
-								"mapper": {
-									"type": "code",
-									"value": ""
-								},
-								"parser": {
-									"type": "code",
-									"value": ""
-								},
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Rectangle",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										0,
-										0
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								}
-							},
-							"2": {
-								"textContent": {
-									"type": "string",
-									"value": "connectMV"
-								},
-								"style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#000000",
-										"stroke-dasharray": "",
-										"fill": "#ffffff",
-										"fill-opacity": 0.75,
-										"font-size": "13px",
-										"stroke-width": 1
-									}
-								},
-								"mapper": {
-									"type": "code",
-									"value": "({\"textContent\":getAttr(\"name\")})"
-								},
-								"parser": {
-									"type": "code",
-									"value": "({\"name\":getAttr(\"textContent\")})"
-								},
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Text",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										10,
-										13
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								}
-							},
-							"3": {
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Contain",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										17.74899850809561,
-										12.998998508095553
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								},
-								"link-style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#00ffff",
-										"stroke-dasharray": "",
-										"stroke-opacity": 0.1,
-										"arrow-start": "none",
-										"arrow-end": "classic-wide-long"
-									}
-								}
-							}
-						},
-						"edges": [
-							{
-								"src": "1",
-								"dest": 3
-							},
-							{
-								"src": 3,
-								"dest": "2"
-							}
-						]
-					}
-				},
-				"$asuri": {
-					"type": "string",
-					"value": "/Formalisms/__Utilities__/Buttons/Buttons/Button/0.instance"
-				},
-				"$type": "/Formalisms/__Utilities__/Buttons/Buttons.defaultIcons/ButtonIcon"
-			},
-			"1": {
-				"typename": {
-					"type": "string",
-					"value": "ButtonIcon"
-				},
-				"position": {
-					"type": "list<double>",
-					"value": [
-						708,
-						315
-					]
-				},
-				"orientation": {
-					"type": "double",
-					"value": 0
-				},
-				"scale": {
-					"type": "list<double>",
-					"value": [
-						1,
-						1
-					]
-				},
-				"mapper": {
-					"type": "code",
-					"value": ""
-				},
-				"parser": {
-					"type": "code",
-					"value": ""
-				},
-				"$contents": {
-					"type": "map<string,*>",
-					"value": {
-						"nodes": {
-							"1": {
-								"width": {
-									"type": "double",
-									"value": "120"
-								},
-								"height": {
-									"type": "double",
-									"value": "50"
-								},
-								"cornerRadius": {
-									"type": "double",
-									"value": "25"
-								},
-								"style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#af0000",
-										"stroke-dasharray": "",
-										"fill": "#000000",
-										"fill-opacity": 0.05,
-										"stroke-width": 2
-									}
-								},
-								"mapper": {
-									"type": "code",
-									"value": ""
-								},
-								"parser": {
-									"type": "code",
-									"value": ""
-								},
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Rectangle",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										0,
-										0
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								}
-							},
-							"2": {
-								"textContent": {
-									"type": "string",
-									"value": "loadModel"
-								},
-								"style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#000000",
-										"stroke-dasharray": "",
-										"fill": "#ffffff",
-										"fill-opacity": 0.75,
-										"font-size": "13px",
-										"stroke-width": 1
-									}
-								},
-								"mapper": {
-									"type": "code",
-									"value": "({\"textContent\":getAttr(\"name\")})"
-								},
-								"parser": {
-									"type": "code",
-									"value": "({\"name\":getAttr(\"textContent\")})"
-								},
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Text",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										10,
-										13
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								}
-							},
-							"3": {
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Contain",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										17.74899850809561,
-										12.998998508095553
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								},
-								"link-style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#00ffff",
-										"stroke-dasharray": "",
-										"stroke-opacity": 0.1,
-										"arrow-start": "none",
-										"arrow-end": "classic-wide-long"
-									}
-								}
-							}
-						},
-						"edges": [
-							{
-								"src": "1",
-								"dest": 3
-							},
-							{
-								"src": 3,
-								"dest": "2"
-							}
-						]
-					}
-				},
-				"$asuri": {
-					"type": "string",
-					"value": "/Formalisms/__Utilities__/Buttons/Buttons/Button/1.instance"
-				},
-				"$type": "/Formalisms/__Utilities__/Buttons/Buttons.defaultIcons/ButtonIcon"
-			},
-			"21": {
-				"typename": {
-					"type": "string",
-					"value": "ButtonIcon"
-				},
-				"position": {
-					"type": "list<double>",
-					"value": [
-						866,
-						384
-					]
-				},
-				"orientation": {
-					"type": "double",
-					"value": 0
-				},
-				"scale": {
-					"type": "list<double>",
-					"value": [
-						1,
-						1
-					]
-				},
-				"mapper": {
-					"type": "code",
-					"value": ""
-				},
-				"parser": {
-					"type": "code",
-					"value": ""
-				},
-				"$contents": {
-					"type": "map<string,*>",
-					"value": {
-						"nodes": {
-							"1": {
-								"width": {
-									"type": "double",
-									"value": "120"
-								},
-								"height": {
-									"type": "double",
-									"value": "50"
-								},
-								"cornerRadius": {
-									"type": "double",
-									"value": "25"
-								},
-								"style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#af0000",
-										"stroke-dasharray": "",
-										"fill": "#000000",
-										"fill-opacity": 0.05,
-										"stroke-width": 2
-									}
-								},
-								"mapper": {
-									"type": "code",
-									"value": ""
-								},
-								"parser": {
-									"type": "code",
-									"value": ""
-								},
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Rectangle",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										0,
-										0
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								}
-							},
-							"2": {
-								"textContent": {
-									"type": "string",
-									"value": "saveModel"
-								},
-								"style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#000000",
-										"stroke-dasharray": "",
-										"fill": "#ffffff",
-										"fill-opacity": 0.75,
-										"font-size": "13px",
-										"stroke-width": 1
-									}
-								},
-								"mapper": {
-									"type": "code",
-									"value": "({\"textContent\":getAttr(\"name\")})"
-								},
-								"parser": {
-									"type": "code",
-									"value": "({\"name\":getAttr(\"textContent\")})"
-								},
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Text",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										10,
-										13
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								}
-							},
-							"3": {
-								"$type": "/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax/Contain",
-								"position": {
-									"type": "list<double>",
-									"value": [
-										17.74899850809561,
-										12.998998508095553
-									]
-								},
-								"orientation": {
-									"type": "double",
-									"value": 0
-								},
-								"scale": {
-									"type": "list<double>",
-									"value": [
-										1,
-										1
-									]
-								},
-								"link-style": {
-									"type": "map<string,string>",
-									"value": {
-										"stroke": "#00ffff",
-										"stroke-dasharray": "",
-										"stroke-opacity": 0.1,
-										"arrow-start": "none",
-										"arrow-end": "classic-wide-long"
-									}
-								}
-							}
-						},
-						"edges": [
-							{
-								"src": "1",
-								"dest": 3
-							},
-							{
-								"src": 3,
-								"dest": "2"
-							}
-						]
-					}
-				},
-				"$asuri": {
-					"type": "string",
-					"value": "/Formalisms/__Utilities__/Buttons/Buttons/Button/21.instance"
-				},
-				"$type": "/Formalisms/__Utilities__/Buttons/Buttons.defaultIcons/ButtonIcon"
-			}
-		},
-		"edges": [],
-		"metamodels": [
-			"/Formalisms/__Utilities__/Buttons/Buttons.defaultIcons",
-			"/Formalisms/__LanguageSyntax__/SimpleClassDiagram/SimpleClassDiagram.defaultIcons",
-			"/Formalisms/__LanguageSyntax__/SimpleClassDiagram/SimpleClassDiagram.umlIcons",
-			"/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax.defaultIcons",
-			"/Formalisms/SCCD/SCCD.defaultIcons"
-		]
-	},
-	"asm": {
-		"nodes": {
-			"0": {
-				"name": {
-					"type": "string",
-					"value": "connectMV"
-				},
-				"tooltip": {
-					"type": "string",
-					"value": "(ALPHA) Connect to the ModelVerse"
-				},
-				"code": {
-					"type": "code",
-					"value": "new ModelVerseConnector();\nModelVerseConnector.connect();"
-				},
-				"$type": "/Formalisms/__Utilities__/Buttons/Buttons/Button"
-			},
-			"1": {
-				"name": {
-					"type": "string",
-					"value": "loadModel"
-				},
-				"tooltip": {
-					"type": "string",
-					"value": "(ALPHA) Load a model from the ModelVerse"
-				},
-				"code": {
-					"type": "code",
-					"value": "if (ModelVerseConnector.connected == undefined){\n    WindowManagement.openDialog(_ERROR,'Connect to the ModelVerse first');\n}else{\n    ModelVerseConnector.choose_model();\n}"
-				},
-				"$type": "/Formalisms/__Utilities__/Buttons/Buttons/Button"
-			},
-			"21": {
-				"name": {
-					"type": "string",
-					"value": "saveModel"
-				},
-				"tooltip": {
-					"type": "string",
-					"value": "(ALPHA) Save a model to the ModelVerse"
-				},
-				"code": {
-					"type": "code",
-					"value": "if (ModelVerseConnector.connected == undefined){\n    WindowManagement.openDialog(_ERROR,'Connect to the ModelVerse first');\n}else{\n    _httpReq('GET', '/current.state?wid='+_context.aswid, undefined,                \n    ModelVerseConnector.choose_model);\n}"
-				},
-				"$type": "/Formalisms/__Utilities__/Buttons/Buttons/Button"
-			}
-		},
-		"edges": [],
-		"metamodels": [
-			"/Formalisms/__Utilities__/Buttons/Buttons",
-			"/Formalisms/__LanguageSyntax__/SimpleClassDiagram/SimpleClassDiagram",
-			"/Formalisms/__LanguageSyntax__/ConcreteSyntax/ConcreteSyntax",
-			"/Formalisms/SCCD/SCCD"
-		]
-	}
-}

二进制
users/(default)/Toolbars/ModelVerse/connectMV.icon.png


二进制
users/(default)/Toolbars/ModelVerse/loadModel.icon.png


二进制
users/(default)/Toolbars/ModelVerse/saveModel.icon.png