Browse Source

Merge branch 'master' into testing

Yentl Van Tendeloo 7 years ago
parent
commit
c5eff4e8f8

+ 21 - 3
bootstrap/core_algorithm.alc

@@ -1235,7 +1235,7 @@ String function cmd_model_render(model_name : String, mapper_name : String, rend
 	//	if (value_eq(read_attribute(core, trace_link_id, "type"), "operatesOn")):
 	//		merged_metamodel_id = readAssociationDestination(core, trace_link_id)
 
-String function cmd_transformation_execute(transformation_name : String, source_models : Element, target_models : Element):
+String function cmd_transformation_execute(transformation_name : String, source_models : Element, target_models : Element, tracability_name : String):
 	// Execute a transformation, whatever type it is
 	// First we detect the type, so we know how to prepare for invocation
 	String transformation_id
@@ -1317,7 +1317,25 @@ String function cmd_transformation_execute(transformation_name : String, source_
 				else:
 					output("Success: ready for MT execution")
 
-				result = execute_operation(transformation_id, inputs, read_root())
+				// Do tracability
+				Element tracability_model
+				if (tracability_name != ""):
+					// Check if exists
+					if (get_entry_id(tracability_name) == ""):
+						// No, so create
+						tracability_model = instantiate_model(get_full_model(get_entry_id("formalisms/Tracability"), get_entry_id("formalisms/SimpleClassDiagrams")))
+						model_create(tracability_model, tracability_name, get_entry_id("formalisms/Tracability"), "Model")
+					else:
+						// Yes, so read out
+						tracability_model = get_full_model(get_entry_id(tracability_name), get_entry_id("formalisms/Tracability"))
+				else:
+					tracability_model = read_root()
+
+				result = execute_operation(transformation_id, inputs, tracability_model)
+
+				// Flush tracability again, just to be sure
+				if (tracability_name != ""):
+					model_overwrite(tracability_model, get_entry_id(tracability_name), get_entry_id("formalisms/Tracability"))
 
 				// Now write out the models again
 				if (element_eq(result, read_root())):
@@ -2179,7 +2197,7 @@ Void function user_function_skip_init(user_id : String):
 		elif (cmd == "model_rendered"):
 			output(cmd_model_rendered(single_input("Model name?"), single_input("Mapper name?")))
 		elif (cmd == "transformation_execute"):
-			output(cmd_transformation_execute(single_input("Transformation name?"), dict_input("Source models?"), dict_input("Target models?")))
+			output(cmd_transformation_execute(single_input("Transformation name?"), dict_input("Source models?"), dict_input("Target models?"), single_input("Tracability model?")))
 		elif (cmd == "verify"):
 			result = cmd_verify(single_input("Model name?"), single_input("Metamodel name?"))
 			if (result != ""):

+ 1 - 0
bootstrap/initial_code_task.alc

@@ -24,5 +24,6 @@ Void mutable function __main():
 	exec(root["bootstrap/conformance_finding.alc"]["initializers"])
 	exec(root["bootstrap/typing.alc"]["initializers"])
 	exec(root["bootstrap/compiler.alc"]["initializers"])
+	exec(root["bootstrap/json.alc"]["initializers"])
 	new_task()
 	return!

+ 117 - 0
bootstrap/json.alc

@@ -0,0 +1,117 @@
+include "primitives.alh"
+include "services.alh"
+include "constructors.alh"
+include "modelling.alh"
+
+String function json_connect():
+	String port
+	port = ""
+	while (port == ""):
+		port = comm_connect("JSON")
+	return port!
+
+Void function json_send_data(port : String, data : Element):
+	// Send the current value to the service
+	// First determine what it is!
+
+	if (has_value(data)):
+		// Primitive value, so send as-is
+		comm_set(port, "P")
+		comm_set(port, data)
+
+	else:
+		// Is a dict or list
+		// Problem is that we don't know which it is, as everything is a dictionary in the Modelverse...
+		// We will do a simple check: if it is a dictionary with keys the contiguous range of integers from 0 to length - 1, it is a list!
+		Element keys
+		Element expected
+		Element copy
+		Element entry
+		Element key
+
+		keys = dict_keys(data)
+		expected = list_to_set(range(dict_len(data)))
+		if (set_equality(keys, expected)):
+			// Equal, so we are (most likely...) dealing with a list
+			comm_set(port, "L")
+			comm_set(port, list_len(data))
+			
+			copy = list_copy(data)
+			while (list_len(copy) > 0):
+				entry = list_pop(copy, 0)
+				json_send_data(port, entry)
+		else:
+			// Not equal, so we are surely dealing with a dict
+			comm_set(port, "D")
+			comm_set(port, dict_len(data))
+
+			while (set_len(keys) > 0):
+				key = set_pop(keys)
+				comm_set(port, key)
+				json_send_data(port, data[key])
+	return!
+
+Element function process_JSON_data(port : String):
+	String type
+	Element result
+	type = comm_get(port)
+
+	if (type == "P"):
+		// Primitive data type, so just return as-is
+		result = comm_get(port)
+	elif (type == "L"):
+		// List, so fetch elements in turn
+		Integer length
+
+		length = comm_get(port)
+		result = list_create()
+		while (length > 0):
+			list_append(result, process_JSON_data(port))
+			length = length - 1
+	elif (type == "D"):
+		// Dict, so fetch elements in turn
+		Integer length
+
+		length = comm_get(port)
+		result = dict_create()
+		while (length > 0):
+			dict_add(result, comm_get(port), process_JSON_data(port))
+			length = length - 1
+	return result!
+
+String function json_serialize(data : Element):
+	String port
+	String response
+	port = json_connect()
+	comm_set(port, "encode")
+	response = comm_get(port)
+
+	if (response == "OK"):
+		// Send data to the service...
+		json_send_data(port, data)
+		response = comm_get(port)
+		comm_close(port)
+		return response!
+	else:
+		log("Error: " + response)
+		comm_close(port)
+		return ""!
+
+Element function json_deserialize(str : String):
+	String port
+	String response
+	Element rval
+	port = json_connect()
+	comm_set(port, "decode")
+
+	response = comm_get(port)
+
+	if (response == "OK"):
+		comm_set(port, str)
+		rval = process_JSON_data(port)
+		comm_close(port)
+		return rval!
+	else:
+		log("Error: " + response)
+		comm_close(port)
+		return read_root()!

+ 37 - 0
bootstrap/semi_primitives.alc

@@ -314,6 +314,19 @@ Element function dict_copy(d : Element):
 
 	return result!
 
+Element function list_copy(lst : Element):
+	Integer counter
+	Element result
+
+	result = list_create()
+	counter = 0
+
+	while (counter < list_len(lst)):
+		list_append(result, lst[counter])
+		counter = counter + 1
+
+	return result!
+
 Element function set_to_list(s : Element):
 	Element result
 	Element tmp
@@ -325,6 +338,18 @@ Element function set_to_list(s : Element):
 
 	return result!
 
+Element function list_to_set(s : Element):
+	Element result
+	Integer i
+
+	i = 0
+	result = set_create()
+	while (i < list_len(s)):
+		set_add(result, s[i])
+		i = i + 1
+
+	return result!
+
 Void function dict_overwrite(d : Element, key : Element, value : Element):
 	if (dict_in(d, key)):
 		dict_delete(d, key)
@@ -449,3 +474,15 @@ Void function set_subtract(set1 : Element, set2 : Element):
 		if (set_in(set1, elem)):
 			set_remove(set1, elem)
 	return!
+
+Element function range(max : Integer):
+	Element result
+	Integer counter
+	result = list_create()
+	counter = 0
+
+	while (counter < max):
+		list_append(result, counter)
+		counter = counter + 1
+
+	return result!

+ 2 - 0
interface/HUTN/includes/json.alh

@@ -0,0 +1,2 @@
+String function json_serialize(data : Element)
+Element function json_deserialize(str : String)

+ 3 - 0
interface/HUTN/includes/primitives.alh

@@ -114,6 +114,8 @@ Void function set_subtract(sa : Element, sb : Element)
 Element function dict_eq(da : Element, db : Element)
 Element function dict_copy(dict : Element)
 Element function set_to_list(s : Element)
+Element function list_to_set(s : Element)
+Element function list_copy(list : Element)
 Element function create_tuple(a : Element, b : Element)
 Void function dict_overwrite(a : Element, b : Element, c : Element)
 Void function set_merge(sa : Element, sb : Element)
@@ -125,3 +127,4 @@ String function reverseKeyLookup(a: Element, b: Element)
 Element function reverseKeyLookupMulti(a: Element, b: Element)
 Element function dict_values(dict : Element)
 Boolean function is_error(a : Element)
+Element function range(max : Integer)

+ 5 - 0
scripts/run_local_modelverse.py

@@ -11,6 +11,7 @@ else:
 # Start up the HUTN compilation service already
 try:
     hutn = subprocess.Popen([sys.executable, "scripts/HUTN_service.py", "127.0.0.1:%s" % port])
+    json = subprocess.Popen([sys.executable, "scripts/JSON_service.py", "127.0.0.1:%s" % port])
 
     os.chdir("hybrid_server")
     subprocess.check_call([sys.executable, "-m", "sccd.compiler.sccdc", "-p", "threads", "server.xml"])
@@ -33,3 +34,7 @@ finally:
         hutn.terminate()
     except:
         pass
+    try:
+        json.terminate()
+    except:
+        pass

+ 3 - 3
wrappers/classes/modelverse.xml

@@ -640,7 +640,7 @@
                             <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])"/>
+                                        <parameter expr="['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2]) + [self.parameters[3]]"/>
                                     </raise>
                                 </onentry>
 
@@ -681,7 +681,7 @@
                             <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])"/>
+                                        <parameter expr="['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2]) + [self.parameters[3]]"/>
                                     </raise>
                                 </onentry>
 
@@ -722,7 +722,7 @@
                             <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])"/>
+                                        <parameter expr="['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2]) + ['']"/>
                                     </raise>
 
                                     <script>

+ 7 - 5
wrappers/modelverse.py

@@ -158,11 +158,11 @@ def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_na
     INPUT("exit", context, [])
     return OUTPUT()
 
-def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, statechart=None):
+def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model=""):
     if statechart is not None:
         port_sc = statechart[0].addOutputListener(statechart[2])
 
-    INPUT("transformation_execute_MT", None, [operation_name, input_models_dict, output_models_dict])
+    INPUT("transformation_execute_MT", None, [operation_name, input_models_dict, output_models_dict, tracability_model])
     context = OUTPUT()
     if statechart is not None:
         while 1:
@@ -192,11 +192,10 @@ def transformation_execute_MT(operation_name, input_models_dict, output_models_d
     else:
         return OUTPUT()
 
-def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, statechart=None):
+def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model=""):
     if statechart is not None:
         port_sc = statechart[0].addOutputListener(statechart[2])
-
-    INPUT("transformation_execute_AL", None, [operation_name, input_models_dict, output_models_dict])
+    INPUT("transformation_execute_AL", None, [operation_name, input_models_dict, output_models_dict, tracability_model])
 
     context = OUTPUT()
     if statechart is not None:
@@ -434,3 +433,6 @@ def process_execute(process_name, prefix, callbacks=None):
             if operation == "Finished":
                 # Finished execution of the process, so exit
                 return None
+
+def get_taskname():
+    raise NotImplementedError("TODO")

+ 249 - 80
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Wed Oct  4 16:24:29 2017
+Date:   Fri Oct 20 11:37:16 2017
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
@@ -44,7 +44,6 @@ class Modelverse(RuntimeClassBase):
         self.context = None
         self.registered_metamodel = {}
         self.inputs = {}
-        self.catch_all = True
     
     def user_defined_destructor(self):
         pass
@@ -332,7 +331,6 @@ class Modelverse(RuntimeClassBase):
         
         # state /initialized/behaviour/operations/store_on_scripted/process_execute/enacting
         self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/enacting"] = State(62, "/initialized/behaviour/operations/store_on_scripted/process_execute/enacting", self)
-        self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/enacting"].setEnter(self._initialized_behaviour_operations_store_on_scripted_process_execute_enacting_enter)
         
         # state /initialized/behaviour/operations/store_on_scripted/process_execute/enacting/sc
         self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/enacting/sc"] = State(63, "/initialized/behaviour/operations/store_on_scripted/process_execute/enacting/sc", self)
@@ -443,110 +441,130 @@ class Modelverse(RuntimeClassBase):
         self.states["/initialized/behaviour/operations/read_attrs"] = State(91, "/initialized/behaviour/operations/read_attrs", self)
         self.states["/initialized/behaviour/operations/read_attrs"].setEnter(self._initialized_behaviour_operations_read_attrs_enter)
         
+        # state /initialized/behaviour/operations/read_defined_attrs
+        self.states["/initialized/behaviour/operations/read_defined_attrs"] = State(92, "/initialized/behaviour/operations/read_defined_attrs", self)
+        self.states["/initialized/behaviour/operations/read_defined_attrs"].setEnter(self._initialized_behaviour_operations_read_defined_attrs_enter)
+        
         # state /initialized/behaviour/operations/instantiate
-        self.states["/initialized/behaviour/operations/instantiate"] = State(92, "/initialized/behaviour/operations/instantiate", self)
+        self.states["/initialized/behaviour/operations/instantiate"] = State(93, "/initialized/behaviour/operations/instantiate", self)
         
         # state /initialized/behaviour/operations/instantiate/decide_node_or_edge
-        self.states["/initialized/behaviour/operations/instantiate/decide_node_or_edge"] = State(93, "/initialized/behaviour/operations/instantiate/decide_node_or_edge", self)
+        self.states["/initialized/behaviour/operations/instantiate/decide_node_or_edge"] = State(94, "/initialized/behaviour/operations/instantiate/decide_node_or_edge", self)
         
         # state /initialized/behaviour/operations/instantiate/created
-        self.states["/initialized/behaviour/operations/instantiate/created"] = State(94, "/initialized/behaviour/operations/instantiate/created", self)
+        self.states["/initialized/behaviour/operations/instantiate/created"] = State(95, "/initialized/behaviour/operations/instantiate/created", self)
         
         # state /initialized/behaviour/operations/delete_element
-        self.states["/initialized/behaviour/operations/delete_element"] = State(95, "/initialized/behaviour/operations/delete_element", self)
+        self.states["/initialized/behaviour/operations/delete_element"] = State(96, "/initialized/behaviour/operations/delete_element", self)
         self.states["/initialized/behaviour/operations/delete_element"].setEnter(self._initialized_behaviour_operations_delete_element_enter)
         
         # state /initialized/behaviour/operations/attr_assign
-        self.states["/initialized/behaviour/operations/attr_assign"] = State(96, "/initialized/behaviour/operations/attr_assign", self)
+        self.states["/initialized/behaviour/operations/attr_assign"] = State(97, "/initialized/behaviour/operations/attr_assign", self)
         self.states["/initialized/behaviour/operations/attr_assign"].setEnter(self._initialized_behaviour_operations_attr_assign_enter)
         
         # state /initialized/behaviour/operations/attr_assign_code
-        self.states["/initialized/behaviour/operations/attr_assign_code"] = State(97, "/initialized/behaviour/operations/attr_assign_code", self)
+        self.states["/initialized/behaviour/operations/attr_assign_code"] = State(98, "/initialized/behaviour/operations/attr_assign_code", self)
         self.states["/initialized/behaviour/operations/attr_assign_code"].setEnter(self._initialized_behaviour_operations_attr_assign_code_enter)
         
         # state /initialized/behaviour/operations/attr_delete
-        self.states["/initialized/behaviour/operations/attr_delete"] = State(98, "/initialized/behaviour/operations/attr_delete", self)
+        self.states["/initialized/behaviour/operations/attr_delete"] = State(99, "/initialized/behaviour/operations/attr_delete", self)
         self.states["/initialized/behaviour/operations/attr_delete"].setEnter(self._initialized_behaviour_operations_attr_delete_enter)
         
+        # state /initialized/behaviour/operations/attr_type
+        self.states["/initialized/behaviour/operations/attr_type"] = State(100, "/initialized/behaviour/operations/attr_type", self)
+        self.states["/initialized/behaviour/operations/attr_type"].setEnter(self._initialized_behaviour_operations_attr_type_enter)
+        
+        # state /initialized/behaviour/operations/attr_name
+        self.states["/initialized/behaviour/operations/attr_name"] = State(101, "/initialized/behaviour/operations/attr_name", self)
+        self.states["/initialized/behaviour/operations/attr_name"].setEnter(self._initialized_behaviour_operations_attr_name_enter)
+        
+        # state /initialized/behaviour/operations/attr_optional
+        self.states["/initialized/behaviour/operations/attr_optional"] = State(102, "/initialized/behaviour/operations/attr_optional", self)
+        self.states["/initialized/behaviour/operations/attr_optional"].setEnter(self._initialized_behaviour_operations_attr_optional_enter)
+        
         # state /initialized/behaviour/operations/read_outgoing
-        self.states["/initialized/behaviour/operations/read_outgoing"] = State(99, "/initialized/behaviour/operations/read_outgoing", self)
+        self.states["/initialized/behaviour/operations/read_outgoing"] = State(103, "/initialized/behaviour/operations/read_outgoing", self)
         self.states["/initialized/behaviour/operations/read_outgoing"].setEnter(self._initialized_behaviour_operations_read_outgoing_enter)
         
         # state /initialized/behaviour/operations/read_incoming
-        self.states["/initialized/behaviour/operations/read_incoming"] = State(100, "/initialized/behaviour/operations/read_incoming", self)
+        self.states["/initialized/behaviour/operations/read_incoming"] = State(104, "/initialized/behaviour/operations/read_incoming", self)
         self.states["/initialized/behaviour/operations/read_incoming"].setEnter(self._initialized_behaviour_operations_read_incoming_enter)
         
         # state /initialized/behaviour/operations/read_association_source
-        self.states["/initialized/behaviour/operations/read_association_source"] = State(101, "/initialized/behaviour/operations/read_association_source", self)
+        self.states["/initialized/behaviour/operations/read_association_source"] = State(105, "/initialized/behaviour/operations/read_association_source", self)
         self.states["/initialized/behaviour/operations/read_association_source"].setEnter(self._initialized_behaviour_operations_read_association_source_enter)
         
         # state /initialized/behaviour/operations/read_association_destination
-        self.states["/initialized/behaviour/operations/read_association_destination"] = State(102, "/initialized/behaviour/operations/read_association_destination", self)
+        self.states["/initialized/behaviour/operations/read_association_destination"] = State(106, "/initialized/behaviour/operations/read_association_destination", self)
         self.states["/initialized/behaviour/operations/read_association_destination"].setEnter(self._initialized_behaviour_operations_read_association_destination_enter)
         
         # state /initialized/behaviour/operations/connections_between
-        self.states["/initialized/behaviour/operations/connections_between"] = State(103, "/initialized/behaviour/operations/connections_between", self)
+        self.states["/initialized/behaviour/operations/connections_between"] = State(107, "/initialized/behaviour/operations/connections_between", self)
         self.states["/initialized/behaviour/operations/connections_between"].setEnter(self._initialized_behaviour_operations_connections_between_enter)
         
         # state /initialized/behaviour/operations/define_attribute
-        self.states["/initialized/behaviour/operations/define_attribute"] = State(104, "/initialized/behaviour/operations/define_attribute", self)
+        self.states["/initialized/behaviour/operations/define_attribute"] = State(108, "/initialized/behaviour/operations/define_attribute", self)
         self.states["/initialized/behaviour/operations/define_attribute"].setEnter(self._initialized_behaviour_operations_define_attribute_enter)
         
+        # state /initialized/behaviour/operations/undefine_attribute
+        self.states["/initialized/behaviour/operations/undefine_attribute"] = State(109, "/initialized/behaviour/operations/undefine_attribute", self)
+        self.states["/initialized/behaviour/operations/undefine_attribute"].setEnter(self._initialized_behaviour_operations_undefine_attribute_enter)
+        
         # state /initialized/behaviour/operations/all_instances
-        self.states["/initialized/behaviour/operations/all_instances"] = State(105, "/initialized/behaviour/operations/all_instances", self)
+        self.states["/initialized/behaviour/operations/all_instances"] = State(110, "/initialized/behaviour/operations/all_instances", self)
         self.states["/initialized/behaviour/operations/all_instances"].setEnter(self._initialized_behaviour_operations_all_instances_enter)
         
         # state /initialized/behaviour/operations/save
-        self.states["/initialized/behaviour/operations/save"] = State(106, "/initialized/behaviour/operations/save", self)
+        self.states["/initialized/behaviour/operations/save"] = State(111, "/initialized/behaviour/operations/save", self)
         self.states["/initialized/behaviour/operations/save"].setEnter(self._initialized_behaviour_operations_save_enter)
         
         # state /initialized/behaviour/wait_for_action
-        self.states["/initialized/behaviour/wait_for_action"] = State(107, "/initialized/behaviour/wait_for_action", self)
+        self.states["/initialized/behaviour/wait_for_action"] = State(112, "/initialized/behaviour/wait_for_action", self)
         
         # state /initialized/behaviour/wait_for_action/disconnected
-        self.states["/initialized/behaviour/wait_for_action/disconnected"] = State(108, "/initialized/behaviour/wait_for_action/disconnected", self)
+        self.states["/initialized/behaviour/wait_for_action/disconnected"] = State(113, "/initialized/behaviour/wait_for_action/disconnected", self)
         
         # state /initialized/behaviour/wait_for_action/connected
-        self.states["/initialized/behaviour/wait_for_action/connected"] = State(109, "/initialized/behaviour/wait_for_action/connected", self)
+        self.states["/initialized/behaviour/wait_for_action/connected"] = State(114, "/initialized/behaviour/wait_for_action/connected", self)
         
         # state /initialized/behaviour/wait_for_action/megamodelling
-        self.states["/initialized/behaviour/wait_for_action/megamodelling"] = State(110, "/initialized/behaviour/wait_for_action/megamodelling", self)
+        self.states["/initialized/behaviour/wait_for_action/megamodelling"] = State(115, "/initialized/behaviour/wait_for_action/megamodelling", self)
         
         # state /initialized/behaviour/wait_for_action/modelling
-        self.states["/initialized/behaviour/wait_for_action/modelling"] = State(111, "/initialized/behaviour/wait_for_action/modelling", self)
+        self.states["/initialized/behaviour/wait_for_action/modelling"] = State(116, "/initialized/behaviour/wait_for_action/modelling", self)
         
         # state /initialized/behaviour/wait_for_action/modelling/recognized
-        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"] = State(112, "/initialized/behaviour/wait_for_action/modelling/recognized", self)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"] = State(117, "/initialized/behaviour/wait_for_action/modelling/recognized", self)
         
         # state /initialized/behaviour/wait_for_action/modelling/recognized/manual
-        self.states["/initialized/behaviour/wait_for_action/modelling/recognized/manual"] = State(113, "/initialized/behaviour/wait_for_action/modelling/recognized/manual", self)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized/manual"] = State(118, "/initialized/behaviour/wait_for_action/modelling/recognized/manual", self)
         
         # state /initialized/behaviour/wait_for_action/modelling/recognized/scripted
-        self.states["/initialized/behaviour/wait_for_action/modelling/recognized/scripted"] = State(114, "/initialized/behaviour/wait_for_action/modelling/recognized/scripted", self)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized/scripted"] = State(119, "/initialized/behaviour/wait_for_action/modelling/recognized/scripted", self)
         
         # state /initialized/behaviour/wait_for_action/finished
-        self.states["/initialized/behaviour/wait_for_action/finished"] = State(115, "/initialized/behaviour/wait_for_action/finished", self)
+        self.states["/initialized/behaviour/wait_for_action/finished"] = State(120, "/initialized/behaviour/wait_for_action/finished", self)
         
         # state /initialized/behaviour/wait_for_action/history
-        self.states["/initialized/behaviour/wait_for_action/history"] = DeepHistoryState(116, "/initialized/behaviour/wait_for_action/history", self)
+        self.states["/initialized/behaviour/wait_for_action/history"] = DeepHistoryState(121, "/initialized/behaviour/wait_for_action/history", self)
         
         # state /initialized/behaviour/going_manual
-        self.states["/initialized/behaviour/going_manual"] = State(117, "/initialized/behaviour/going_manual", self)
+        self.states["/initialized/behaviour/going_manual"] = State(122, "/initialized/behaviour/going_manual", self)
         self.states["/initialized/behaviour/going_manual"].setEnter(self._initialized_behaviour_going_manual_enter)
         
         # state /initialized/behaviour/going_scripted
-        self.states["/initialized/behaviour/going_scripted"] = State(118, "/initialized/behaviour/going_scripted", self)
+        self.states["/initialized/behaviour/going_scripted"] = State(123, "/initialized/behaviour/going_scripted", self)
         self.states["/initialized/behaviour/going_scripted"].setEnter(self._initialized_behaviour_going_scripted_enter)
         
         # state /initialized/behaviour/leaving_manual
-        self.states["/initialized/behaviour/leaving_manual"] = State(119, "/initialized/behaviour/leaving_manual", self)
+        self.states["/initialized/behaviour/leaving_manual"] = State(124, "/initialized/behaviour/leaving_manual", self)
         self.states["/initialized/behaviour/leaving_manual"].setEnter(self._initialized_behaviour_leaving_manual_enter)
         
         # state /initialized/queue
-        self.states["/initialized/queue"] = State(120, "/initialized/queue", self)
+        self.states["/initialized/queue"] = State(125, "/initialized/queue", self)
         
         # state /initialized/queue/queue
-        self.states["/initialized/queue/queue"] = State(121, "/initialized/queue/queue", self)
+        self.states["/initialized/queue/queue"] = State(126, "/initialized/queue/queue", self)
         
         # add children
         self.states[""].addChild(self.states["/init"])
@@ -604,17 +622,22 @@ class Modelverse(RuntimeClassBase):
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/types_full"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_info"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_attrs"])
+        self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_defined_attrs"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/instantiate"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/delete_element"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/attr_assign"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/attr_assign_code"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/attr_delete"])
+        self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/attr_type"])
+        self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/attr_name"])
+        self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/attr_optional"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_outgoing"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_incoming"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_association_source"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/read_association_destination"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/connections_between"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/define_attribute"])
+        self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/undefine_attribute"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/all_instances"])
         self.states["/initialized/behaviour/operations"].addChild(self.states["/initialized/behaviour/operations/save"])
         self.states["/initialized/behaviour/operations/login"].addChild(self.states["/initialized/behaviour/operations/login/wait_prompt_1"])
@@ -1249,6 +1272,13 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_read_attrs_0.setGuard(self._initialized_behaviour_operations_read_attrs_0_guard)
         self.states["/initialized/behaviour/operations/read_attrs"].addTransition(_initialized_behaviour_operations_read_attrs_0)
         
+        # transition /initialized/behaviour/operations/read_defined_attrs
+        _initialized_behaviour_operations_read_defined_attrs_0 = Transition(self, self.states["/initialized/behaviour/operations/read_defined_attrs"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_read_defined_attrs_0.setAction(self._initialized_behaviour_operations_read_defined_attrs_0_exec)
+        _initialized_behaviour_operations_read_defined_attrs_0.setTrigger(None)
+        _initialized_behaviour_operations_read_defined_attrs_0.setGuard(self._initialized_behaviour_operations_read_defined_attrs_0_guard)
+        self.states["/initialized/behaviour/operations/read_defined_attrs"].addTransition(_initialized_behaviour_operations_read_defined_attrs_0)
+        
         # transition /initialized/behaviour/operations/instantiate/decide_node_or_edge
         _initialized_behaviour_operations_instantiate_decide_node_or_edge_0 = Transition(self, self.states["/initialized/behaviour/operations/instantiate/decide_node_or_edge"], [self.states["/initialized/behaviour/operations/instantiate/created"]])
         _initialized_behaviour_operations_instantiate_decide_node_or_edge_0.setAction(self._initialized_behaviour_operations_instantiate_decide_node_or_edge_0_exec)
@@ -1296,6 +1326,27 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_attr_delete_0.setGuard(self._initialized_behaviour_operations_attr_delete_0_guard)
         self.states["/initialized/behaviour/operations/attr_delete"].addTransition(_initialized_behaviour_operations_attr_delete_0)
         
+        # transition /initialized/behaviour/operations/attr_type
+        _initialized_behaviour_operations_attr_type_0 = Transition(self, self.states["/initialized/behaviour/operations/attr_type"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_attr_type_0.setAction(self._initialized_behaviour_operations_attr_type_0_exec)
+        _initialized_behaviour_operations_attr_type_0.setTrigger(None)
+        _initialized_behaviour_operations_attr_type_0.setGuard(self._initialized_behaviour_operations_attr_type_0_guard)
+        self.states["/initialized/behaviour/operations/attr_type"].addTransition(_initialized_behaviour_operations_attr_type_0)
+        
+        # transition /initialized/behaviour/operations/attr_name
+        _initialized_behaviour_operations_attr_name_0 = Transition(self, self.states["/initialized/behaviour/operations/attr_name"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_attr_name_0.setAction(self._initialized_behaviour_operations_attr_name_0_exec)
+        _initialized_behaviour_operations_attr_name_0.setTrigger(None)
+        _initialized_behaviour_operations_attr_name_0.setGuard(self._initialized_behaviour_operations_attr_name_0_guard)
+        self.states["/initialized/behaviour/operations/attr_name"].addTransition(_initialized_behaviour_operations_attr_name_0)
+        
+        # transition /initialized/behaviour/operations/attr_optional
+        _initialized_behaviour_operations_attr_optional_0 = Transition(self, self.states["/initialized/behaviour/operations/attr_optional"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_attr_optional_0.setAction(self._initialized_behaviour_operations_attr_optional_0_exec)
+        _initialized_behaviour_operations_attr_optional_0.setTrigger(None)
+        _initialized_behaviour_operations_attr_optional_0.setGuard(self._initialized_behaviour_operations_attr_optional_0_guard)
+        self.states["/initialized/behaviour/operations/attr_optional"].addTransition(_initialized_behaviour_operations_attr_optional_0)
+        
         # transition /initialized/behaviour/operations/read_outgoing
         _initialized_behaviour_operations_read_outgoing_0 = Transition(self, self.states["/initialized/behaviour/operations/read_outgoing"], [self.states["/initialized/behaviour/wait_for_action/history"]])
         _initialized_behaviour_operations_read_outgoing_0.setAction(self._initialized_behaviour_operations_read_outgoing_0_exec)
@@ -1338,6 +1389,13 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_define_attribute_0.setGuard(self._initialized_behaviour_operations_define_attribute_0_guard)
         self.states["/initialized/behaviour/operations/define_attribute"].addTransition(_initialized_behaviour_operations_define_attribute_0)
         
+        # transition /initialized/behaviour/operations/undefine_attribute
+        _initialized_behaviour_operations_undefine_attribute_0 = Transition(self, self.states["/initialized/behaviour/operations/undefine_attribute"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_undefine_attribute_0.setAction(self._initialized_behaviour_operations_undefine_attribute_0_exec)
+        _initialized_behaviour_operations_undefine_attribute_0.setTrigger(None)
+        _initialized_behaviour_operations_undefine_attribute_0.setGuard(self._initialized_behaviour_operations_undefine_attribute_0_guard)
+        self.states["/initialized/behaviour/operations/undefine_attribute"].addTransition(_initialized_behaviour_operations_undefine_attribute_0)
+        
         # transition /initialized/behaviour/operations/all_instances
         _initialized_behaviour_operations_all_instances_0 = Transition(self, self.states["/initialized/behaviour/operations/all_instances"], [self.states["/initialized/behaviour/wait_for_action/history"]])
         _initialized_behaviour_operations_all_instances_0.setAction(self._initialized_behaviour_operations_all_instances_0_exec)
@@ -1637,6 +1695,13 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_2.setGuard(self._initialized_behaviour_operations_2_guard)
         self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_2)
         
+        # transition /initialized/behaviour/operations/store_on_scripted/transformation_add_MT
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_MT"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0.setAction(self._initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0_exec)
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0.setTrigger(None)
+        _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0.setGuard(self._initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0_guard)
+        self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add_MT"].addTransition(_initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0)
+        
         # transition /initialized/behaviour/operations/store_on_scripted/process_execute/enacting
         _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_0 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/enacting"], [self.states["/initialized/behaviour/operations/store_on_scripted/process_execute/executing"]])
         _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_0.setTrigger(None)
@@ -1696,76 +1761,101 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_wait_for_action_modelling_recognized_5.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_5.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_5_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_5)
-        _initialized_behaviour_wait_for_action_modelling_recognized_6 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/instantiate"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_6 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_defined_attrs"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_6.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_6_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_6.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_6.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_6_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_6)
-        _initialized_behaviour_wait_for_action_modelling_recognized_7 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/delete_element"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_7 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/instantiate"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_7.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_7_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_7.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_7.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_7_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_7)
-        _initialized_behaviour_wait_for_action_modelling_recognized_8 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_assign"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_8 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/delete_element"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_8.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_8_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_8.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_8.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_8_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_8)
-        _initialized_behaviour_wait_for_action_modelling_recognized_9 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/model_upload"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_9 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_assign"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_9.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_9_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_9.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_9.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_9_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_9)
-        _initialized_behaviour_wait_for_action_modelling_recognized_10 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_assign_code"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_10 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/model_upload"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_10.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_10_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_10.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_10.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_10_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_10)
-        _initialized_behaviour_wait_for_action_modelling_recognized_11 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_delete"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_11 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_assign_code"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_11.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_11_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_11.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_11.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_11_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_11)
-        _initialized_behaviour_wait_for_action_modelling_recognized_12 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_outgoing"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_12 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_delete"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_12.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_12_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_12.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_12.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_12_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_12)
-        _initialized_behaviour_wait_for_action_modelling_recognized_13 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_incoming"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_13 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_name"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_13.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_13_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_13.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_13.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_13_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_13)
-        _initialized_behaviour_wait_for_action_modelling_recognized_14 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_association_source"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_14 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_type"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_14.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_14_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_14.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_14.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_14_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_14)
-        _initialized_behaviour_wait_for_action_modelling_recognized_15 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_association_destination"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_15 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/attr_optional"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_15.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_15_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_15.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_15.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_15_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_15)
-        _initialized_behaviour_wait_for_action_modelling_recognized_16 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/connections_between"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_16 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_outgoing"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_16.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_16_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_16.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_16.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_16_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_16)
-        _initialized_behaviour_wait_for_action_modelling_recognized_17 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/define_attribute"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_17 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_incoming"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_17.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_17_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_17.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_17.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_17_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_17)
-        _initialized_behaviour_wait_for_action_modelling_recognized_18 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/all_instances"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_18 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_association_source"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_18.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_18_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_18.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_18.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_18_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_18)
-        _initialized_behaviour_wait_for_action_modelling_recognized_19 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/save"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_19 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/read_association_destination"]])
         _initialized_behaviour_wait_for_action_modelling_recognized_19.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_19_exec)
         _initialized_behaviour_wait_for_action_modelling_recognized_19.setTrigger(None)
         _initialized_behaviour_wait_for_action_modelling_recognized_19.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_19_guard)
         self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_19)
+        _initialized_behaviour_wait_for_action_modelling_recognized_20 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/connections_between"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_20.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_20_exec)
+        _initialized_behaviour_wait_for_action_modelling_recognized_20.setTrigger(None)
+        _initialized_behaviour_wait_for_action_modelling_recognized_20.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_20_guard)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_20)
+        _initialized_behaviour_wait_for_action_modelling_recognized_21 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/define_attribute"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_21.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_21_exec)
+        _initialized_behaviour_wait_for_action_modelling_recognized_21.setTrigger(None)
+        _initialized_behaviour_wait_for_action_modelling_recognized_21.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_21_guard)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_21)
+        _initialized_behaviour_wait_for_action_modelling_recognized_22 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/undefine_attribute"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_22.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_22_exec)
+        _initialized_behaviour_wait_for_action_modelling_recognized_22.setTrigger(None)
+        _initialized_behaviour_wait_for_action_modelling_recognized_22.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_22_guard)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_22)
+        _initialized_behaviour_wait_for_action_modelling_recognized_23 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/all_instances"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_23.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_23_exec)
+        _initialized_behaviour_wait_for_action_modelling_recognized_23.setTrigger(None)
+        _initialized_behaviour_wait_for_action_modelling_recognized_23.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_23_guard)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_23)
+        _initialized_behaviour_wait_for_action_modelling_recognized_24 = Transition(self, self.states["/initialized/behaviour/wait_for_action/modelling/recognized"], [self.states["/initialized/behaviour/operations/save"]])
+        _initialized_behaviour_wait_for_action_modelling_recognized_24.setAction(self._initialized_behaviour_wait_for_action_modelling_recognized_24_exec)
+        _initialized_behaviour_wait_for_action_modelling_recognized_24.setTrigger(None)
+        _initialized_behaviour_wait_for_action_modelling_recognized_24.setGuard(self._initialized_behaviour_wait_for_action_modelling_recognized_24_guard)
+        self.states["/initialized/behaviour/wait_for_action/modelling/recognized"].addTransition(_initialized_behaviour_wait_for_action_modelling_recognized_24)
     
     def _initialized_enter(self):
         self.raiseInternalEvent(Event("ready", None, []))
@@ -1781,9 +1871,6 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_verify_enter(self):
         self.raiseInternalEvent(Event("request", None, [['verify', self.parameters[0], self.parameters[1]]]))
     
-    def _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_enter(self):
-        self.catch_all = False
-    
     def _init_enter(self):
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'http_client', 'HTTPClient']))
         self.big_step.outputEventOM(Event("create_instance", None, [self, 'http_client', 'HTTPClient']))
@@ -1822,7 +1909,6 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("request", None, ['self-destruct']))
     
     def _initialized_behaviour_operations_model_render_enter(self):
-        print("RENDERING with parameters: " + str(self.parameters))
         self.raiseInternalEvent(Event("request", None, [['model_render', self.parameters[0], self.parameters[1], self.parameters[2]]]))
     
     def _initialized_behaviour_operations_model_rendered_enter(self):
@@ -1858,13 +1944,13 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("result", None, [self.context]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_AL_send_operation_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2])]))
+        self.raiseInternalEvent(Event("request", None, [['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2]) + [self.parameters[3]]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_MT_send_operation_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2])]))
+        self.raiseInternalEvent(Event("request", None, [['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2]) + [self.parameters[3]]]))
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_MANUAL_send_metadata_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2])]))
+        self.raiseInternalEvent(Event("request", None, [['transformation_execute', self.parameters[0]] + self.dict_to_list(self.parameters[1]) + self.dict_to_list(self.parameters[2]) + ['']]))
         self.context = str(uuid.uuid4())
         self.actions[self.context] = []
         self.raiseInternalEvent(Event("result", None, [self.context]))
@@ -1927,10 +2013,10 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("request", None, [['JSON']]))
     
     def _initialized_behaviour_operations_types_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['types', self.parameters[1]]]))
+        self.raiseInternalEvent(Event("request", None, [['types']]))
     
     def _initialized_behaviour_operations_types_full_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['types_full', self.parameters[1]]]))
+        self.raiseInternalEvent(Event("request", None, [['types_full']]))
     
     def _initialized_behaviour_operations_read_info_enter(self):
         self.raiseInternalEvent(Event("request", None, [['read_info', self.parameters[1]]]))
@@ -1938,8 +2024,11 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_read_attrs_enter(self):
         self.raiseInternalEvent(Event("request", None, [['read_attrs', self.parameters[1]]]))
     
+    def _initialized_behaviour_operations_read_defined_attrs_enter(self):
+        self.raiseInternalEvent(Event("request", None, [['read_defined_attrs', self.parameters[1]]]))
+    
     def _initialized_behaviour_operations_delete_element_enter(self):
-        self.raiseInternalEvent(Event("request", None, [['delete_element', self.parameters[1]]]))
+        self.raiseInternalEvent(Event("request", None, [['delete', self.parameters[1]]]))
     
     def _initialized_behaviour_operations_attr_assign_enter(self):
         self.raiseInternalEvent(Event("request", None, [['attr_add', self.parameters[1], self.parameters[2], self.parameters[3]]]))
@@ -1950,6 +2039,15 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_attr_delete_enter(self):
         self.raiseInternalEvent(Event("request", None, [['attr_delete', self.parameters[1], self.parameters[2]]]))
     
+    def _initialized_behaviour_operations_attr_type_enter(self):
+        self.raiseInternalEvent(Event("request", None, [['attr_type', self.parameters[1], self.parameters[2], self.parameters[3]]]))
+    
+    def _initialized_behaviour_operations_attr_name_enter(self):
+        self.raiseInternalEvent(Event("request", None, [['attr_name', self.parameters[1], self.parameters[2], self.parameters[3]]]))
+    
+    def _initialized_behaviour_operations_attr_optional_enter(self):
+        self.raiseInternalEvent(Event("request", None, [['attr_optional', self.parameters[1], self.parameters[2], self.parameters[3]]]))
+    
     def _initialized_behaviour_operations_read_outgoing_enter(self):
         self.raiseInternalEvent(Event("request", None, [['read_outgoing', self.parameters[1], self.parameters[2]]]))
     
@@ -1968,6 +2066,9 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_define_attribute_enter(self):
         self.raiseInternalEvent(Event("request", None, [['define_attribute', self.parameters[1], self.parameters[2], self.parameters[3]]]))
     
+    def _initialized_behaviour_operations_undefine_attribute_enter(self):
+        self.raiseInternalEvent(Event("request", None, [['undefine_attribute', self.parameters[1], self.parameters[2]]]))
+    
     def _initialized_behaviour_operations_all_instances_enter(self):
         self.raiseInternalEvent(Event("request", None, [['all_instances', self.parameters[1]]]))
     
@@ -2000,11 +2101,16 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('No conformance relation can be found ', pop=False)
     
     def _initialized_behaviour_operations_2_exec(self, parameters):
-        print("UNKNOWN ERROR: " + self.responses[0])
         self.raiseInternalEvent(Event("exception", None, ['UnknownError', 'Error: %s' % self.responses.pop(0)]))
     
     def _initialized_behaviour_operations_2_guard(self, parameters):
-        return self.catch_all and self.expect_response_partial('', pop=False)
+        return self.expect_response_partial('', pop=False)
+    
+    def _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0_exec(self, parameters):
+        print("UNKNOWN RESPONSE received: " + str(self.responses.pop(0)))
+    
+    def _initialized_behaviour_operations_store_on_scripted_transformation_add_MT_0_guard(self, parameters):
+        return self.expect_response_partial('', pop=False)
     
     def _initialized_behaviour_operations_store_on_scripted_process_execute_enacting_0_guard(self, parameters):
         return self.expect_response('Success', pop=True)
@@ -2069,84 +2175,114 @@ class Modelverse(RuntimeClassBase):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_6_guard(self, parameters):
-        return self.expect_action(self.context, 'instantiate')
+        return self.expect_action(self.context, 'read_defined_attrs')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_7_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_7_guard(self, parameters):
-        return self.expect_action(self.context, 'delete_element')
+        return self.expect_action(self.context, 'instantiate')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_8_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_8_guard(self, parameters):
-        return self.expect_action(self.context, 'attr_assign')
+        return self.expect_action(self.context, 'delete_element')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_9_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_9_guard(self, parameters):
-        return self.expect_action(self.context, 'model_overwrite')
+        return self.expect_action(self.context, 'attr_assign')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_10_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_10_guard(self, parameters):
-        return self.expect_action(self.context, 'attr_assign_code')
+        return self.expect_action(self.context, 'model_overwrite')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_11_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_11_guard(self, parameters):
-        return self.expect_action(self.context, 'attr_delete')
+        return self.expect_action(self.context, 'attr_assign_code')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_12_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_12_guard(self, parameters):
-        return self.expect_action(self.context, 'read_outgoing')
+        return self.expect_action(self.context, 'attr_delete')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_13_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_13_guard(self, parameters):
-        return self.expect_action(self.context, 'read_incoming')
+        return self.expect_action(self.context, 'attr_name')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_14_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_14_guard(self, parameters):
-        return self.expect_action(self.context, 'read_association_source')
+        return self.expect_action(self.context, 'attr_type')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_15_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_15_guard(self, parameters):
-        return self.expect_action(self.context, 'read_association_destination')
+        return self.expect_action(self.context, 'attr_optional')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_16_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_16_guard(self, parameters):
-        return self.expect_action(self.context, 'connections_between')
+        return self.expect_action(self.context, 'read_outgoing')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_17_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_17_guard(self, parameters):
-        return self.expect_action(self.context, 'define_attribute')
+        return self.expect_action(self.context, 'read_incoming')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_18_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_18_guard(self, parameters):
-        return self.expect_action(self.context, 'all_instances')
+        return self.expect_action(self.context, 'read_association_source')
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_19_exec(self, parameters):
         self.load_action(self.context)
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_19_guard(self, parameters):
+        return self.expect_action(self.context, 'read_association_destination')
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_20_exec(self, parameters):
+        self.load_action(self.context)
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_20_guard(self, parameters):
+        return self.expect_action(self.context, 'connections_between')
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_21_exec(self, parameters):
+        self.load_action(self.context)
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_21_guard(self, parameters):
+        return self.expect_action(self.context, 'define_attribute')
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_22_exec(self, parameters):
+        self.load_action(self.context)
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_22_guard(self, parameters):
+        return self.expect_action(self.context, 'undefine_attribute')
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_23_exec(self, parameters):
+        self.load_action(self.context)
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_23_guard(self, parameters):
+        return self.expect_action(self.context, 'all_instances')
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_24_exec(self, parameters):
+        self.load_action(self.context)
+    
+    def _initialized_behaviour_wait_for_action_modelling_recognized_24_guard(self, parameters):
         return self.expect_action(self.context, 'save')
     
     def _init_0_exec(self, parameters):
@@ -2200,6 +2336,7 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_init_waiting_http_client_0_exec(self, parameters):
         self.raiseInternalEvent(Event("request_raw", None, [self.taskname, 'task_manager', self.i]))
         self.i += 1
+        print("READY")
     
     def _initialized_behaviour_init_waiting_http_client_1_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['NetworkException', 'Connection timeout']))
@@ -2404,6 +2541,7 @@ class Modelverse(RuntimeClassBase):
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_MT_dialog_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [True if self.responses.pop(0) == 'Success' else False]))
+        print("FINISHED SC execution")
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_execute_MT_dialog_0_guard(self, parameters):
         return self.expect_response('Success', pop=False) or self.expect_response('Failure', pop=False)
@@ -2592,20 +2730,19 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('Success: ', pop=False)
     
     def _initialized_behaviour_operations_types_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("result", None, [set(self.split_response(self.responses.pop(0)))]))
+        self.raiseInternalEvent(Event("result", None, [set([tuple(entry.strip().split(' : ')) for entry in self.split_response(self.responses.pop(0))])]))
     
     def _initialized_behaviour_operations_types_0_guard(self, parameters):
         return self.expect_response_partial('Success: ', pop=False)
     
     def _initialized_behaviour_operations_types_full_0_exec(self, parameters):
-        self.raiseInternalEvent(Event("result", None, [set(self.split_response(self.responses.pop(0)))]))
+        self.raiseInternalEvent(Event("result", None, [set([tuple(entry.strip().split(' : ')) for entry in self.split_response(self.responses.pop(0))])]))
     
     def _initialized_behaviour_operations_types_full_0_guard(self, parameters):
         return self.expect_response_partial('Success: ', pop=False)
     
     def _initialized_behaviour_operations_read_info_0_exec(self, parameters):
-        response = self.responses.pop(0).strip()
-        _, response = response.split(": ", 1)
+        response = self.responses.pop(0).split(": ", 1)[1].strip()
         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"]))
@@ -2617,8 +2754,7 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('Success: ', pop=False)
     
     def _initialized_behaviour_operations_read_attrs_0_exec(self, parameters):
-        response = self.responses.pop(0).strip()
-        _, response = response.split(": ", 1)
+        response = self.responses.pop(0).split(": ", 1)[1].strip()
         values = {line.split(" : ", 1)[0]: line.split(" : ", 1)[1] for line in response.split("\n")}
         values = {key: values[key].split(" = ", 1)[1] for key in values}
         self.raiseInternalEvent(Event("result", None, [values]))
@@ -2626,6 +2762,15 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_read_attrs_0_guard(self, parameters):
         return self.expect_response_partial('Success: ', pop=False)
     
+    def _initialized_behaviour_operations_read_defined_attrs_0_exec(self, parameters):
+        response = self.responses.pop(0).split(": ", 1)[1].strip()
+        value_mandatory = {line.split(" : ", 1)[0]: line.split(" : ", 1)[1] for line in response.split("\n") if " : " in line}
+        value_optional = {line.split(" ?: ", 1)[0]: line.split(" ?: ", 1)[1] for line in response.split("\n") if " ?: " in line}
+        self.raiseInternalEvent(Event("result", None, [(value_mandatory, value_optional)]))
+    
+    def _initialized_behaviour_operations_read_defined_attrs_0_guard(self, parameters):
+        return self.expect_response_partial('Success: ', pop=False)
+    
     def _initialized_behaviour_operations_instantiate_decide_node_or_edge_0_exec(self, parameters):
         self.raiseInternalEvent(Event("request", None, [['instantiate_node', self.parameters[1], self.parameters[3]]]))
     
@@ -2668,6 +2813,24 @@ class Modelverse(RuntimeClassBase):
     def _initialized_behaviour_operations_attr_delete_0_guard(self, parameters):
         return self.expect_response('Success')
     
+    def _initialized_behaviour_operations_attr_type_0_exec(self, parameters):
+        self.raiseInternalEvent(Event("result", None, [None]))
+    
+    def _initialized_behaviour_operations_attr_type_0_guard(self, parameters):
+        return self.expect_response('Success')
+    
+    def _initialized_behaviour_operations_attr_name_0_exec(self, parameters):
+        self.raiseInternalEvent(Event("result", None, [None]))
+    
+    def _initialized_behaviour_operations_attr_name_0_guard(self, parameters):
+        return self.expect_response('Success')
+    
+    def _initialized_behaviour_operations_attr_optional_0_exec(self, parameters):
+        self.raiseInternalEvent(Event("result", None, [None]))
+    
+    def _initialized_behaviour_operations_attr_optional_0_guard(self, parameters):
+        return self.expect_response('Success')
+    
     def _initialized_behaviour_operations_read_outgoing_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [set(self.split_response(self.responses.pop(0)))]))
     
@@ -2702,7 +2865,13 @@ class Modelverse(RuntimeClassBase):
         self.raiseInternalEvent(Event("result", None, [None]))
     
     def _initialized_behaviour_operations_define_attribute_0_guard(self, parameters):
-        return self.expect_response_partial('Success: ')
+        return self.expect_response('Success')
+    
+    def _initialized_behaviour_operations_undefine_attribute_0_exec(self, parameters):
+        self.raiseInternalEvent(Event("result", None, [None]))
+    
+    def _initialized_behaviour_operations_undefine_attribute_0_guard(self, parameters):
+        return self.expect_response('Success')
     
     def _initialized_behaviour_operations_all_instances_0_exec(self, parameters):
         self.raiseInternalEvent(Event("result", None, [set(self.split_response(self.responses.pop(0)))]))
@@ -2945,7 +3114,7 @@ class Modelverse(RuntimeClassBase):
         return self.expect_action(None, 'model_types')
     
     def _initialized_behaviour_wait_for_action_megamodelling_36_guard(self, parameters):
-        return self.expect_action(None, ['element_list', 'element_list_nice', 'types', 'types_full', 'read_info', 'read_attrs', 'instantiate', 'delete_element', 'attr_assign', 'attr_assign_code', 'attr_delete', 'read_outgoing', 'read_incoming', 'read_association_source', 'read_association_destination', 'connections_between', 'define_attribute', 'all_instances'])
+        return self.expect_action(None, ['element_list', 'element_list_nice', 'types', 'types_full', 'read_info', 'read_attrs', 'read_defined_attrs', 'instantiate', 'delete_element', 'attr_assign', 'attr_assign_code', 'attr_delete', 'read_outgoing', 'read_incoming', 'read_association_source', 'read_association_destination', 'connections_between', 'define_attribute', 'undefine_attribute', 'all_instances', 'attr_optional', 'attr_type', 'attr_name'])
     
     def _initialized_behaviour_wait_for_action_modelling_recognized_manual_0_guard(self, parameters):
         return self.expect_action(self.context, 'exit')

+ 10 - 68
wrappers/test.py

@@ -1,73 +1,15 @@
 from modelverse import *
 import random
 
-def print_mv_with_input(value):
-    if value.startswith("#"):
-        print_mv(value[1:])
-        return
-    if value.startswith("%"):
-        if (value[1:] == "construct_function"):
-            print("Enter your code...")
-            code = \
-                """
-                include "primitives.alh"
-
-                Boolean function bp_1():
-                    log("Breakpoint check!")
-                    return True!
-                """
-            upload_code(code)
-        return
-    print(value)
-    return raw_input()
-
-def print_mv(value):
-    print(value)
-    return None
-
-print("Init")
 init()
-print("Login")
-#login(str(random.random()), str(random.random()))
 login("admin", "admin")
-
-# Add the metamodels for PetriNet and ReachabilityGraph
-print("Add metamodels")
-try:
-    model_add("formalisms/PetriNet", "formalisms/SimpleClassDiagrams", open("models/petrinets.mvc").read())
-except ModelExists:
-    pass
-
-try:
-    model_add("formalisms/ReachabilityGraph", "formalisms/SimpleClassDiagrams", open("models/reachability_graph.mvc").read())
-except ModelExists:
-    pass
-
-print("Add model")
-try:
-    model_add("models/my_pn", "formalisms/PetriNet", open("models/my_pn.mvc").read())
-except ModelExists:
-    pass
-
-# Add the action language code to transform between them
-print("Add AL model")
-try:
-    transformation_add_AL({"PetriNet": "formalisms/PetriNet"}, {"ReachabilityGraph": "formalisms/ReachabilityGraph"}, "models/analyseReachability", open("models/reachability.alc", "r").read())
-except ModelExists:
-    pass
-
-# Add an example model transformation to print the reachability graph
-print("Add MT model")
-try:
-    transformation_add_MT({"ReachabilityGraph": "formalisms/ReachabilityGraph"}, {}, "models/printReachability", open("models/reachabilitygraph_print.mvc").read())
-except ModelExists:
-    pass
-
-# Do the reachability graph generation
-print("Execute AL")
-status = transformation_execute_AL("models/analyseReachability", {"PetriNet": "models/my_pn"}, {"ReachabilityGraph": "models/my_reachability"}, callback=print_mv)
-print("Reachability generation success: " + str(status))
-
-print("Execute MT")
-status = transformation_execute_MT("models/printReachability", {"ReachabilityGraph": "models/my_reachability"}, {}, callback=print_mv)
-print("Reachability printing success: " + str(status))
+model_add("formalisms/PetriNet", "formalisms/SimpleClassDiagrams", open("models/petrinets.mvc").read())
+model_add("formalisms/ReachabilityGraph", "formalisms/SimpleClassDiagrams", open("models/reachability_graph.mvc").read())
+model_add("models/my_pn", "formalisms/PetriNet", open("models/my_pn.mvc").read())
+transformation_add_AL({"PetriNet": "formalisms/PetriNet"}, {"ReachabilityGraph": "formalisms/ReachabilityGraph"}, "models/analyseReachability", open("models/reachability.alc", "r").read())
+transformation_add_MT({"ReachabilityGraph": "formalisms/ReachabilityGraph"}, {}, "models/printReachability", open("models/reachabilitygraph_print.mvc").read())
+transformation_execute_AL("models/analyseReachability", {"PetriNet": "models/my_pn"}, {"ReachabilityGraph": "models/my_reachability"}, tracability_model="trac")
+transformation_execute_MT("models/printReachability", {"ReachabilityGraph": "models/my_reachability"}, {})
+
+time.sleep(5)
+print(model_list(""))