Explorar el Código

Even more content in the statechart

Yentl Van Tendeloo hace 8 años
padre
commit
e10d2e29d3
Se han modificado 3 ficheros con 806 adiciones y 36 borrados
  1. 0 21
      bootstrap/core_algorithm.alc
  2. 15 8
      bootstrap/mini_modify.alc
  3. 791 7
      wrappers/classes/modelverse.xml

+ 0 - 21
bootstrap/core_algorithm.alc

@@ -2038,25 +2038,6 @@ String function cmd_model_types(model_name : String):
 	else:
 		return "No such model: " + model_name!
 	
-String function cmd_element_list_nice(model_name : String, metamodel_name : String):
-	if (get_entry_id(model_name) != ""):
-		if (allow_read(current_user_id, get_entry_id(model_name))):
-			if (get_entry_id(metamodel_name) != ""):
-				if (allow_read(current_user_id, get_entry_id(metamodel_name))):
-					Element mm
-					mm = get_full_model(get_entry_id(model_name), get_entry_id(metamodel_name))
-					if (element_eq(mm, read_root())):
-						return "No conformance relation between these models"!
-					return "Success: " + JSON_print(mm)!
-				else:
-					return "Permission denied to model: " + metamodel_name!
-			else:
-				return "No such metamodel: " + metamodel_name!
-		else:
-			return "Permission denied to model: " + model_name!
-	else:
-		return "No such model: " + model_name!
-
 String function cmd_folder_create(folder_name : String):
 	if (get_entry_id(folder_name) == ""):
 		if (element_neq(create_folders(current_user_id, folder_name), read_root())):
@@ -2155,8 +2136,6 @@ Void function user_function_skip_init(user_id : String):
 			output(cmd_user_password(single_input("User name?"), single_input("New password?")))
 		elif (cmd == "transformation_read_signature"):
 			output(cmd_transformation_signature(single_input("Transformation name?")))
-		elif (cmd == "element_list_nice"):
-			output(cmd_element_list_nice(single_input("Model name?"), single_input("Metamodel name?")))
 		elif (cmd == "verbose"):
 			set_verbose(True)
 		elif (cmd == "quiet"):

+ 15 - 8
bootstrap/mini_modify.alc

@@ -8,6 +8,7 @@ include "metamodels.alh"
 include "modelling.alh"
 include "typing.alh"
 include "compiler.alh"
+include "utils.alh"
 
 Boolean verbose = True
 
@@ -298,20 +299,24 @@ String function cmd_read(model : Element, element_name : String):
 
 	result = "Success: "
 	if (dict_in(model["model"], element_name)):
-		result = ((result + "ID: ") + element_name) + "\n"
 		result = ((result + "Type: ") + read_type(model, element_name)) + "\n"
 		if (is_edge(model["model"][element_name])):
 			result = ((result + "Source: ") + reverseKeyLookup(model["model"], read_edge_src(model["model"][element_name]))) + "\n"
 			result = ((result + "Destination: ") + reverseKeyLookup(model["model"], read_edge_dst(model["model"][element_name]))) + "\n"
 		if (has_value(model["model"][element_name])):
 			result = ((result + "Value: ") + cast_v2s(model["model"][element_name])) + "\n"
-		result = result + "Defines attributes:\n"
-		attr_list = getInstantiatableAttributes(model, element_name)
-		attr_keys = dict_keys(attr_list)
-		while (0 < set_len(attr_keys)):
-			attr_key = set_pop(attr_keys)
-			result = ((((result + "  ") + attr_key) + " : ") + cast_v2s(attr_list[attr_key])) + "\n"
-		result = result + "Attributes:\n"
+		return result!
+	else:
+		return "Element not found: " + element_name!
+
+String function cmd_read_attrs(model : Element, element_name : String):
+	String result
+	Element attr_list
+	Element attr_keys
+	String attr_key
+
+	result = "Success: "
+	if (dict_in(model["model"], element_name)):
 		attr_list = getAttributeList(model, element_name)
 		attr_keys = dict_keys(attr_list)
 		while (0 < set_len(attr_keys)):
@@ -410,6 +415,8 @@ Element function modify(model : Element, write : Boolean):
 			output(cmd_list(model))
 		elif (cmd == "list_full"):
 			output(cmd_list_full(model))
+		elif (cmd == "JSON"):
+			output(JSON_print(model))
 		elif (cmd == "read_outgoing"):
 			output(cmd_read_outgoing(model, single_input("Name?"), single_input("Type?")))
 		elif (cmd == "read_incoming"):

+ 791 - 7
wrappers/classes/modelverse.xml

@@ -431,7 +431,7 @@
                         <state id="send_metadata">
                             <onentry>
                                 <raise event="request">
-                                    <parameter expr="['transformation_add_MT', self.dict_to_list(self.parameters[0]), self.dict_to_list(self.parameters[1]), self.parameters[2]]"/>
+                                    <parameter expr="['transformation_add_MT'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1]) + [self.parameters[2]]"/>
                                 </raise>
 
                                 <script>
@@ -449,19 +449,797 @@
 
                         <state id="edit_metamodel">
                             <transition cond="self.expect_response('Model loaded, ready for commands!')" target="../../wait_for_action/modelling/scripted"/>
-                            <transition cond="self.expect_response('Waiting for model constructors...)" target="../send_model"/>
+                            <transition cond="self.expect_response('Waiting for model constructors...')" target="../send_model"/>
+                        </state>
+
+                        <state id="send_model">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="self.parameters[3]"/>
+                                </raise>
+                            </onentry>
+
+                            <transition cond="self.expect_response('Success')" target="../../wait_for_action/megamodelling">
+                                <raise event="result">
+                                    <parameter expr="None"/>
+                                </raise>
+                            </transition>
+                        </state>
+                    </state>
+
+                    <state id="transformation_add_AL" initial="send_metadata">
+                        <state id="send_metadata">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="['transformation_add_AL'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1]) + [self.parameters[2]]"/>
+                                </raise>
+
+                                <script>
+                                    self.context = str(uuid.uuid4())
+                                </script>
+
+                                <raise event="result">
+                                    <parameter expr="self.context">
+                                </raise>
+                            </onentry>
+
+                            <transition target="../edit_metamodel"/>
+
+                        </state>
+
+                        <state id="edit_metamodel">
+                            <transition cond="self.expect_response('Model loaded, ready for commands!')" target="../../wait_for_action/modelling/scripted"/>
+                            <transition cond="self.expect_response('Waiting for code constructors...')" target="../send_model"/>
+                        </state>
+
+                        <state id="send_model">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="self.parameters[3]"/>
+                                </raise>
+                            </onentry>
+
+                            <transition cond="self.expect_response('Success')" target="../../wait_for_action/megamodelling">
+                                <raise event="result">
+                                    <parameter expr="None"/>
+                                </raise>
+                            </transition>
+                        </state>
+                    </state>
+
+                    <state id="transformation_add_MANUAL" initial="send_metadata">
+                        <state id="send_metadata">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="['transformation_add_MANUAL'] + self.dict_to_list(self.parameters[0]) + self.dict_to_list(self.parameters[1]) + [self.parameters[2]]"/>
+                                </raise>
+
+                                <script>
+                                    self.context = str(uuid.uuid4())
+                                </script>
+
+                                <raise event="result">
+                                    <parameter expr="self.context">
+                                </raise>
+                            </onentry>
+
+                            <transition target="../edit_metamodel"/>
+
+                        </state>
+
+                        <state id="edit_metamodel">
+                            <transition cond="self.expect_response('Model loaded, ready for commands!')" target="../../wait_for_action/modelling/scripted"/>
+                            <transition cond="self.expect_response('Success')" target="../../wait_for_action/megamodelling">
+                                <raise event="result">
+                                    <parameter expr="None"/>
+                                </raise>
+                            </transition>
+                        </state>
+                    </state>
+
+                    <state id="transformation_execute_AL" initial="send_operation">
+                        <state id="send_operation">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2])"/>
+                                </raise>
+                            </onentry>
+
+                            <transition cond="self.expect_response('Success: ready for AL execution')" target="../dialog">
+                                <script>
+                                    self.context = str(uuid.uuid4())
+                                </script>
+
+                                <raise event="result">
+                                    <parameter expr="self.context"/>
+                                </raise>
+                            </transition>
+                        </state>
+
+                        <state id="dialog">
+                            <transition cond="self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)" target="../done">
+                                <raise event="result">
+                                    <parameter expr="self.responses.pop(0)"/>
+                                </raise>
+                            </transition>
+
+                            <transition cond="not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)) and self.expect_response_partial('', pop=False)" target=".">
+                                <raise event="result">
+                                    <parameter expr="self.responses.pop(0)"/>
+                                </raise>
+                            </transition>
+
+                            <transition cond="self.expect_action(self.context, 'data_input', pop=False)" target=".">
+                                <raise event="request">
+                                    <parameter expr="self.actions[self.context].pop(0)['parameters']"/>
+                                </raise>
+                            </transition>
+                        </state>
+                    </state>
+
+                    <state id="transformation_execute_MT" initial="send_operation">
+                        <state id="send_operation">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2])"/>
+                                </raise>
+                            </onentry>
+
+                            <transition cond="self.expect_response('Success: ready for MT execution')" target="../dialog">
+                                <script>
+                                    self.context = str(uuid.uuid4())
+                                </script>
+
+                                <raise event="result">
+                                    <parameter expr="self.context"/>
+                                </raise>
+                            </transition>
+                        </state>
+
+                        <state id="dialog">
+                            <transition cond="self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)" target="../done">
+                                <raise event="result">
+                                    <parameter expr="self.responses.pop(0)"/>
+                                </raise>
+                            </transition>
+
+                            <transition cond="not (self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)) and self.expect_response_partial('', pop=False)" target=".">
+                                <raise event="result">
+                                    <parameter expr="self.responses.pop(0)"/>
+                                </raise>
+                            </transition>
+
+                            <transition cond="self.expect_action(self.context, 'data_input', pop=False)" target=".">
+                                <raise event="request">
+                                    <parameter expr="self.actions[self.context].pop(0)['parameters']"/>
+                                </raise>
+                            </transition>
                         </state>
+                    </state>
+
+                    <state id="transformation_execute_MANUAL" initial="send_metadata">
+                        <state id="send_metadata">
+                            <onentry>
+                                <raise event="request">
+                                    <parameter expr="['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2])"/>
+                                </raise>
+
+                                <script>
+                                    self.context = str(uuid.uuid4())
+                                </script>
+
+                                <raise event="result">
+                                    <parameter expr="self.context">
+                                </raise>
+                            </onentry>
+
+                            <transition cond="self.expect_response('Success: ready for MANUAL execution')" target="../edit_model"/>
+
+                        </state>
+
+                        <state id="edit_model">
+                            <transition cond="self.expect_response('Model loaded, ready for commands!')" target="../../wait_for_action/modelling/scripted"/>
+                            <transition cond="self.expect_response('Success')" target="../../wait_for_action/megamodelling">
+                                <raise event="result">
+                                    <parameter expr="None"/>
+                                </raise>
+                            </transition>
+                        </state>
+                    </state>
+
+                    <state id="process_execute">
+                        <onentry>
+                            <script>
+                                print("TODO")
+                                raise NotImplementedException()
+                            </script>
+                        </onentry>
+                    </state>
+
+                    <state id="permission_modify">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['permission_modify', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="permission_owner">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['permission_owner', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="permission_group">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['permission_group', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_create">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_create', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_delete">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_delete', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_owner_add">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_owner_add', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_owner_delete">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_owner_delete', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_join">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_join', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_kick">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_kick', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="group_list">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['group_list', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="admin_promote">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['admin_promote', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="admin_demote">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['admin_demote', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.responses.pop(0)"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="conformance_delete">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['remove_conformance', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="conformance_add">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['add_conformance', self.parameters[0], self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="folder_create">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['folder_create', self.parameters[0]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="model_types">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['model_types', self.parameters[0]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="element_list">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['element_list']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="element_list_nice">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['element_list_nice']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="types">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['types', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
 
-                        <state id="send_model">
-                            <onentry>
+                    <state id="types_full">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['types_full', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="read_info">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['read_info', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <script>
+                                response = self.responses.pop(0).strip()
+                                _, response = response.split(": ", 1)
+                                values = {line.split(": ", 1)[0]: line.split(": ", 1)[1] for line in response.split("\n", 2)}
+                                if "Source" in values:
+                                    result = (values["Type"], (values["Source"], values["Destination"]))
+                                else:
+                                    result = (values["Type"], None)
+                            </script>
+                            <raise event="result">
+                                <parameter expr="result"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="read_attrs">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['read_attrs', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <script>
+                                response = self.responses.pop(0).strip()
+                                _, response = response.split(": ", 1)
+                                values = {line.split(: ", 1)[0]: line.split(": ", 1)[1] for line in response.split("\n")}
+                                values = {key: values[key].split(" = ", 1)[0], values[key].split(" = ", 1)[1] for key in values}
+                            </script>
+                            <raise event="result">
+                                <parameter expr="result"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="instantiate" initial="decide_node_or_edge">
+                        <state id="decide_node_or_edge">
+                            <transition cond="self.parameters[2] is None" target="../created">
                                 <raise event="request">
-                                    <parameter expr="self.parameters[3]"/>
+                                    <parameter expr="['instantiate_node', self.parameters[1], self.parameters[3]]"/>
                                 </raise>
-                            </onentry>
+                            </transition>
+
+                            <transition cond="self.parameters[2] is not None" target="../created">
+                                <raise event="request">
+                                    <parameter expr="['instantiate_edge', self.parameters[1], self.parameters[3], self.parameters[2][0], self.parameters[2][1]]"/>
+                                </raise>
+                            </transition>
+                        </state>
 
-                            <transition cond="self.expect_response('Success')" target="../../wait_for_action/history"/>
+                        <state id="created">
+                            <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                                <raise event="result">
+                                    <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                                </raise>
+                            </transition>
                         </state>
                     </state>
+
+                    <state id="delete_element">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['delete_element', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="attr_assign">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['attr_assign', self.parameters[1], self.parameters[2], self.parameters[3]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="attr_assign_code">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['attr_assign_code', self.parameters[1], self.parameters[2], self.parameters[3]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="attr_delete">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['attr_delete', self.parameters[1], self.parameters[2]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response('Success')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="read_outgoing">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['read_outgoing', self.parameters[1], self.parameters[2]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))" target="../../wait_for_action/history"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="read_incoming">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['read_incoming', self.parameters[1], self.parameters[2]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))" target="../../wait_for_action/history"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="read_association_source">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['read_association_source', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))" target="../../wait_for_action/history"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="read_association_destination">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['read_association_destination', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))" target="../../wait_for_action/history"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="connections_between">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['connections_between', self.parameters[1], self.parameters[2]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="define_attribute">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['define_attribute', self.parameters[1], self.parameters[2], self.parameters[3]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ')" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="None"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="all_instances">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['all_instances', self.parameters[1]]"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
+
+                    <state id="">
+                        <onentry>
+                            <raise event="request">
+                                <parameter expr="['']"/>
+                            </raise>
+                        </onentry>
+
+                        <transition cond="self.expect_response_partial('Success: ', pop=False)" target="../../wait_for_action/history">
+                            <raise event="result">
+                                <parameter expr="self.split_response(self.responses.pop(0))"/>
+                            </raise>
+                        </transition>
+                    </state>
                 </state>
 
                 <state id="wait_for_action" initial="disconnected">
@@ -718,6 +1496,12 @@
                             </script>
                         </transition>
 
+                        <transition cond="self.expect_action(self.context, 'element_list_nice')" target="../../operations/element_list_nice">
+                            <script>
+                                self.load_action(self.context)
+                            </script>
+                        </transition>
+
                         <transition cond="self.expect_action(self.context, 'types')" target="../../operations/types">
                             <script>
                                 self.load_action(self.context)