ソースを参照

Remove RAMify phase and do this automatically now

Yentl Van Tendeloo 8 年 前
コミット
df45bd2367

+ 79 - 179
bootstrap/core_algorithm.alc

@@ -784,7 +784,6 @@ String function cmd_help(user_id : String):
 	result = result + ("    verify                          -- Check whether a model conforms to its metamodel\n")
 	result = result + ("\n")
 	result = result + ("Transformation-specific operations\n")
-	result = result + ("    transformation_add_MT_language  -- Create a RAMified metamodel of a set of models\n")
 	result = result + ("    transformation_add_MT           -- Initialize a new model transformation\n")
 	result = result + ("    transformation_add_AL           -- Initialize a new action language transformation\n")
 	result = result + ("    transformation_add_MANUAL       -- Initialize a new manual transformation\n")
@@ -792,7 +791,6 @@ String function cmd_help(user_id : String):
 	result = result + ("    transformation_list             -- List all model transformations\n")
 	result = result + ("    transformation_list_full        -- List all model transformations with permissions\n")
 	result = result + ("    transformation_detail           -- List transformation details\n")
-	result = result + ("    transformation_RAMify           -- RAMify a metamodel (again)\n")
 	result = result + ("    transformation_between          -- List all transformations between two metamodels\n")
 	result = result + ("\n")
 	result = result + ("Process operations\n")
@@ -1192,106 +1190,6 @@ String function cmd_model_list_full():
 
 	return result!
 
-String function cmd_transformation_add_MT_language(user_id : String, model_names : Element, RAMified_name : String):
-	// Create a model transformation language from a set of input and output formalisms
-	String model_name
-	String model_id
-	Element source
-	Element target
-	Element all_formalisms
-	Element merged_formalism
-	Element ramified_formalism
-	String type_id
-	String location
-	String new_model_id
-	String type_name
-
-	// Read involved formalisms
-	all_formalisms = create_node()
-	while (read_nr_out(model_names) > 0):
-		model_name = set_pop(model_names)
-		model_id = get_model_id(model_name)
-		if (model_id != ""):
-			if (allow_read(user_id, model_id)):
-				type_name = read_attribute(core, set_pop(allAssociationDestinations(core, model_id, "instanceOf")), "name")
-				type_id = get_model_id(type_name)
-				if (type_name != "SimpleClassDiagrams"):
-					return "Can only RAMify models of type SimpleClassDiagrams"!
-				else:
-					set_add(all_formalisms, create_tuple(model_name, get_full_model(model_id)))
-			else:
-				return "Permission denied to model: " + model_name!
-		else:
-			return "Model not found: " + model_name!
-
-	// Merge all into a single metamodel
-	if (read_nr_out(all_formalisms) > 0):
-		if (get_model_id(RAMified_name) == ""):
-			String merged_formalism_id
-			String ramified_formalism_id
-			String source_formalism_id
-			String tracability_link
-
-			// New location is available, so write
-			merged_formalism = model_fuse(set_copy(all_formalisms))
-			model_create(merged_formalism, "__merged_" + RAMified_name, user_id, type_id, "Model")
-			merged_formalism_id = get_model_id("__merged_" + RAMified_name)
-
-			// Add tracability links at this level
-			while (read_nr_out(all_formalisms) > 0):
-				source_formalism_id = get_model_id(list_read(set_pop(all_formalisms), 0))
-				tracability_link = instantiate_link(core, "tracability", "", merged_formalism_id, source_formalism_id)
-				instantiate_attribute(core, tracability_link, "type", "merged")
-
-			// Merge complete, now RAMify!
-			ramified_formalism = ramify(merged_formalism)
-			model_create(ramified_formalism, RAMified_name, user_id, type_id, "Model")
-			ramified_formalism_id = get_model_id(RAMified_name)
-
-			// Add tracability link at this level
-			tracability_link = instantiate_link(core, "tracability", "", ramified_formalism_id, merged_formalism_id)
-			instantiate_attribute(core, tracability_link, "type", "RAMified")
-
-			return "Success"!
-		else:
-			return "Model exists: " + RAMified_name!
-	else:
-		return "At least one formalism is required"!
-
-String function cmd_transformation_RAMify(user_id : String, merged_model_name : String, target_model_name : String):
-	// RAMify a metamodel
-	String merged_model_id
-	String target_model_id
-	Element target_model
-	String tracability_link
-
-	merged_model_id = get_model_id(merged_model_name)
-	if (merged_model_id != ""):
-		if (allow_read(user_id, merged_model_id)):
-			target_model_id = get_model_id(target_model_name)
-			if (target_model_id == ""):
-				// New model, so everything is fine
-				target_model = ramify(get_full_model(merged_model_id))
-				model_create(target_model, target_model_name, user_id, set_pop(allAssociationDestinations(core, merged_model_id, "instanceOf")), "Model")
-				target_model_id = get_model_id(target_model_name)
-				tracability_link = instantiate_link(core, "tracability", "", target_model_id, merged_model_id)
-				instantiate_attribute(core, tracability_link, "type", "RAMified")
-			else:
-				// Existing model, so overwrite
-				if (allow_write(user_id, target_model_id)):
-					target_model = ramify(get_full_model(merged_model_id))
-					model_overwrite(target_model, target_model_id)
-					model_delete_element(core, set_pop(allOutgoingAssociationInstances(core, target_model_id, "tracability")))
-					tracability_link = instantiate_link(core, "tracability", "", target_model_id, merged_model_id)
-					instantiate_attribute(core, tracability_link, "type", "RAMified")
-				else:
-					return "Permission denied to model: " + target_model_name!
-			return "Success"!
-		else:
-			return "Permission denied to model: " + merged_model_name!
-	else:
-		return "Model not found: " + merged_model_name!
-
 String function cmd_transformation_add_MANUAL(user_id : String, source_models : Element, target_models : Element, operation_name : String):
 	return transformation_add(user_id, source_models, target_models, operation_name, "manual")!
 
@@ -1419,10 +1317,11 @@ String function transformation_add(user_id : String, source_models : Element, ta
 	else:
 		return "Model exists: " + operation_name!
 
-String function cmd_transformation_add_MT(user_id : String, RAMified_metamodel_name : String, source_models : Element, target_models : Element, operation_name : String):
+String function cmd_transformation_add_MT(user_id : String, source_models : Element, target_models : Element, operation_name : String):
 	// Add a model transformation model
 	// Just a usual model instantiation, but need to add the source and target links based on user info
 	String ramified_metamodel_id
+	Element ramified_metamodel
 	String model_id
 	Element models
 	Element links
@@ -1434,92 +1333,97 @@ String function cmd_transformation_add_MT(user_id : String, RAMified_metamodel_n
 	String new_model_id
 	String merged_link_id
 	Element links_merged
-	String merged_metamodel_id
+	String merged_formalism
 	Element keys
 	String key
+	String mm
+	Element to_ramify
 
 	source = create_node()
 	target = create_node()
-	supported = create_node()
-	ramified_metamodel_id = get_model_id(RAMified_metamodel_name)
-	if (ramified_metamodel_id != ""):
-		if (allow_read(user_id, ramified_metamodel_id)):
-			links = allOutgoingAssociationInstances(core, ramified_metamodel_id, "tracability")
-			while (read_nr_out(links) > 0):
-				link_id = set_pop(links)
-				merged_metamodel_id = readAssociationDestination(core, link_id)
-				if (value_eq(read_attribute(core, link_id, "type"), "RAMified")):
-					links_merged = allOutgoingAssociationInstances(core, merged_metamodel_id, "tracability")
-					while (read_nr_out(links_merged) > 0):
-						merged_link_id = set_pop(links_merged)
-						if (value_eq(read_attribute(core, merged_link_id, "type"), "merged")):
-							set_add(supported, readAssociationDestination(core, merged_link_id))
-
-			keys = dict_keys(source_models)
-			while (read_nr_out(keys) > 0):
-				key = set_pop(keys)
-				name = source_models[key]
-				model_id = get_model_id(name)
-				if (model_id != ""):
-					if (set_in(supported, model_id)):
-						if (bool_not(dict_in(source, model_id))):
-							dict_add(source, key, model_id)
-						else:
-							return "Model already selected: " + name!
+	to_ramify = create_node()
+
+	keys = dict_keys(source_models)
+	while (read_nr_out(keys) > 0):
+		key = set_pop(keys)
+		name = source_models[key]
+		model_id = get_model_id(name)
+		if (model_id != ""):
+			if (allow_read(user_id, name)):
+				// Check whether or not it is SimpleClassDiagrams
+				mm = read_attribute(core, readAssociationDestination(core, get_instanceOf_link(name)), "name")
+				if (mm == "SimpleClassDiagrams"):
+					if (bool_not(dict_in(source, key))):
+						dict_add(source, key, model_id)
+						dict_add(to_ramify, key, get_full_model(model_id))
 					else:
-						return "Model not supported by RAMified metamodel: " + name!
+						return "Name was already assigned a metamodel: " + key!
 				else:
-					return "Model not found: " + name!
+					return "Model not supported for RAMification: " + name!
+			else:
+				return "Permission denied: " + name!
+		else:
+			return "Model not found: " + name!
 
-			keys = dict_keys(target_models)
-			while (read_nr_out(keys) > 0):
-				key = set_pop(keys)
-				name = target_models[key]
-				model_id = get_model_id(name)
-				if (model_id != ""):
-					if (set_in(supported, model_id)):
-						if (bool_not(dict_in(target, model_id))):
+	keys = dict_keys(target_models)
+	while (read_nr_out(keys) > 0):
+		key = set_pop(keys)
+		name = target_models[key]
+		model_id = get_model_id(name)
+		if (model_id != ""):
+			if (allow_read(user_id, name)):
+				mm = read_attribute(core, readAssociationDestination(core, get_instanceOf_link(name)), "name")
+				if (mm == "SimpleClassDiagrams"):
+					if (bool_not(dict_in(target, key))):
+						if (bool_not(dict_in(to_ramify, key))):
 							dict_add(target, key, model_id)
+							dict_add(to_ramify, key, get_full_model(model_id))
 						else:
-							return "Model already selected: " + name!
+							return "Name in output cannot have different type than input: " + key!
 					else:
-						return "Model not supported by RAMified metamodel: " + name!
+						return "Name was already assigned a metamodel: " + key!
 				else:
-					return "Model not found: " + name!
-				
-			if (get_model_id(operation_name) == ""):
-				String new_model
-				// Finished with all information, now create the model itself!
-				output("Waiting for model constructors...")
-				new_model = construct_model_raw(get_full_model(ramified_metamodel_id))
-				model_create(new_model, operation_name, user_id, ramified_metamodel_id, "ModelTransformation")
-				model_id = get_model_id(operation_name)
-
-				// Extend metadata with info on source and target
-				String link
-				String dst
-
-				keys = dict_keys(source)
-				while (read_nr_out(keys) > 0):
-					key = set_pop(keys)
-					dst = source[key]
-					link = instantiate_link(core, "transformInput", "", model_id, dst)
-					instantiate_attribute(core, link, "name", key)
-
-				keys = dict_keys(target)
-				while (read_nr_out(keys) > 0):
-					key = set_pop(keys)
-					dst = target[key]
-					link = instantiate_link(core, "transformOutput", "", model_id, dst)
-					instantiate_attribute(core, link, "name", key)
-
-				return "Success"!
+					return "Model not supported for RAMification: " + name!
 			else:
-				return "Model exists: " + operation_name!
+				return "Permission denied: " + name!
 		else:
-			return "Permission denied to model: " + operation_name!
+			return "Model not found: " + name!
+
+	merged_formalism = model_fuse(to_ramify)
+	ramified_metamodel = ramify(merged_formalism)
+	model_create(ramified_metamodel, "__RAM_" + operation_name, user_id, get_model_id("SimpleClassDiagrams"), "Model")
+	ramified_metamodel_id = get_model_id("__RAM_" + operation_name)
+	
+	// Now use the RAMified model to create the instance
+	if (get_model_id(operation_name) == ""):
+		String new_model
+		// Finished with all information, now create the model itself!
+		output("Waiting for model constructors...")
+		new_model = construct_model_raw(get_full_model(ramified_metamodel_id))
+		model_create(new_model, operation_name, user_id, ramified_metamodel_id, "ModelTransformation")
+		model_id = get_model_id(operation_name)
+
+		// Extend metadata with info on source and target
+		String link
+		String dst
+
+		keys = dict_keys(source)
+		while (read_nr_out(keys) > 0):
+			key = set_pop(keys)
+			dst = source[key]
+			link = instantiate_link(core, "transformInput", "", model_id, dst)
+			instantiate_attribute(core, link, "name", key)
+
+		keys = dict_keys(target)
+		while (read_nr_out(keys) > 0):
+			key = set_pop(keys)
+			dst = target[key]
+			link = instantiate_link(core, "transformOutput", "", model_id, dst)
+			instantiate_attribute(core, link, "name", key)
+
+		return "Success"!
 	else:
-		return "Model not found: " + operation_name!
+		return "Model exists: " + operation_name!
 
 String function cmd_transformation_list():
 	// List all models
@@ -1856,16 +1760,12 @@ Void function user_function_skip_init(user_id : String):
 			output(cmd_model_list())
 		elif (cmd == "model_list_full"):
 			output(cmd_model_list_full())
-		elif (cmd == "transformation_add_MT_language"):
-			output(cmd_transformation_add_MT_language(user_id, set_input("Metamodel names?"), single_input("RAMified metamodel name?")))
-		elif (cmd == "transformation_RAMify"):
-			output(cmd_transformation_RAMify(user_id, single_input("Metamodel name?"), single_input("Target metamodel name?")))
 		elif (cmd == "transformation_add_MANUAL"):
 			output(cmd_transformation_add_MANUAL(user_id, dict_input("Source model names?"), dict_input("Target model names?"), single_input("Operation name?")))
 		elif (cmd == "transformation_add_AL"):
 			output(cmd_transformation_add_AL(user_id, dict_input("Source model names?"), dict_input("Target model names?"), single_input("Operation name?")))
 		elif (cmd == "transformation_add_MT"):
-			output(cmd_transformation_add_MT(user_id, single_input("RAMified metamodel name?"), dict_input("Source model names?"), dict_input("Target models?"), single_input("Operation name?")))
+			output(cmd_transformation_add_MT(user_id, dict_input("Source model names?"), dict_input("Target models?"), single_input("Operation name?")))
 		elif (cmd == "transformation_list"):
 			output(cmd_transformation_list())
 		elif (cmd == "transformation_list_full"):

+ 45 - 64
integration/test_mvc.py

@@ -68,26 +68,13 @@ class TestModelverseCore(unittest.TestCase):
         instantiate("Empty", "Class", ID="B")
         assert element_list("Empty") == set([("B", "Class")])
 
-    def test_transform_add_MT_language(self):
+    def test_transform_add_MT(self):
         model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/petrinets.mvc", "r").read())
         assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams")])
-        transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
+        transformation_add_MT({"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
         assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
-                                                                ("PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("__merged_PetriNet_RAM", "SimpleClassDiagrams")])
-
-    def test_transform_add_MT_instance(self):
-        model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/petrinets.mvc", "r").read())
-        assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams")])
-        transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
-        assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
-                                                                ("PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("__merged_PetriNet_RAM", "SimpleClassDiagrams")])
-        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
-        assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
-                                                                ("PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("__merged_PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("print_pn", "PetriNet_RAM")])
+                                                                ("__RAM_print_pn", "SimpleClassDiagrams"),
+                                                                ("print_pn", "__RAM_print_pn")])
         assert transformation_list() == set([("ModelTransformation", "print_pn")])
 
     def test_transform_add_MT_pn_print_exec(self):
@@ -100,17 +87,11 @@ class TestModelverseCore(unittest.TestCase):
         model_add("my_pn", "PetriNet", open("integration/code/pn_runtime_model.mvc", "r").read())
         assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
                                                                 ("my_pn", "PetriNet")])
-        transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
-        assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
-                                                                ("my_pn", "PetriNet"),
-                                                                ("PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("__merged_PetriNet_RAM", "SimpleClassDiagrams")])
-        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
+        transformation_add_MT({"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
         assert model_list() == set(list(expected_model_list) + [("PetriNet", "SimpleClassDiagrams"),
                                                                 ("my_pn", "PetriNet"),
-                                                                ("PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("__merged_PetriNet_RAM", "SimpleClassDiagrams"),
-                                                                ("print_pn", "PetriNet_RAM")])
+                                                                ("__RAM_print_pn", "SimpleClassDiagrams"),
+                                                                ("print_pn", "__RAM_print_pn")])
         assert transformation_list() == set([("ModelTransformation", "print_pn")])
         assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
 
@@ -142,17 +123,18 @@ class TestModelverseCore(unittest.TestCase):
 
         model_add("my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
 
-        transformation_add_MT_language(["PetriNet", "PetriNet_Runtime"], "PetriNet_RAM")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
-        transformation_RAMify("__merged_PetriNet_RAM", "PetriNet_RAM")
+        def add_tracability_D2R():
+            instantiate(None, "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
+            instantiate(None, "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
+
+        def add_tracability_R2D():
+            instantiate(None, "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
+            instantiate(None, "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
 
         transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
-        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_design_to_runtime", open("integration/code/pn_design_to_runtime.mvc").read())
+        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_design_to_runtime", open("integration/code/pn_design_to_runtime.mvc").read(), add_tracability_D2R)
         transformation_add_MT("PetriNet_RAM", {"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_simulate", open("integration/code/pn_simulate.mvc").read())
-        transformation_add_MT("PetriNet_RAM", {"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet": "PetriNet"}, "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read())
+        transformation_add_MT("PetriNet_RAM", {"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet": "PetriNet"}, "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read(), add_tracability_R2D)
 
         log = []
         assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
@@ -181,17 +163,18 @@ class TestModelverseCore(unittest.TestCase):
 
         model_add("my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
 
-        transformation_add_MT_language(["PetriNet", "PetriNet_Runtime"], "PetriNet_RAM")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
-        transformation_RAMify("__merged_PetriNet_RAM", "PetriNet_RAM")
+        def add_tracability_D2R():
+            instantiate(None, "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
+            instantiate(None, "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
 
-        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
-        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_design_to_runtime", open("integration/code/pn_design_to_runtime.mvc").read())
+        def add_tracability_R2D():
+            instantiate(None, "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
+            instantiate(None, "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
+
+        transformation_add_MT({"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
+        transformation_add_MT({"PetriNet": "PetriNet"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_design_to_runtime", open("integration/code/pn_design_to_runtime.mvc").read(), add_tracability_D2R)
         transformation_add_AL({"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_simulate", open("integration/code/pn_simulate.alc").read())
-        transformation_add_MT("PetriNet_RAM", {"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet": "PetriNet"}, "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read())
+        transformation_add_MT({"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet": "PetriNet"}, "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read(), add_tracability_R2D)
 
         log = []
         assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
@@ -240,17 +223,18 @@ class TestModelverseCore(unittest.TestCase):
 
         model_add("my_pn", "PetriNet", open("integration/code/pn_design_model.mvc", "r").read())
 
-        transformation_add_MT_language(["PetriNet", "PetriNet_Runtime"], "PetriNet_RAM")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
-        instantiate("__merged_PetriNet_RAM", "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
-        transformation_RAMify("__merged_PetriNet_RAM", "PetriNet_RAM")
+        def add_tracability_D2R():
+            instantiate(None, "Association", ("PetriNet/Place", "PetriNet_Runtime/Place"), ID="D2R_PlaceLink")
+            instantiate(None, "Association", ("PetriNet/Transition", "PetriNet_Runtime/Transition"), ID="D2R_TransitionLink")
 
-        transformation_add_MT("PetriNet_RAM", {"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
-        transformation_add_MANUAL({"PetriNet": "PetriNet"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_design_to_runtime")
+        def add_tracability_R2D():
+            instantiate(None, "Association", ("PetriNet_Runtime/Place", "PetriNet/Place"), ID="R2D_PlaceLink")
+            instantiate(None, "Association", ("PetriNet_Runtime/Transition", "PetriNet/Transition"), ID="R2D_TransitionLink")
+
+        transformation_add_MT({"PetriNet": "PetriNet"}, {}, "print_pn", open("integration/code/pn_print.mvc").read())
+        transformation_add_MANUAL({"PetriNet": "PetriNet"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_design_to_runtime", add_tracability_D2R)
         transformation_add_AL({"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet_Runtime": "PetriNet_Runtime"}, "pn_simulate", open("integration/code/pn_simulate.alc").read())
-        transformation_add_MT("PetriNet_RAM", {"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet": "PetriNet"}, "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read())
+        transformation_add_MT({"PetriNet_Runtime": "PetriNet_Runtime"}, {"PetriNet": "PetriNet"}, "pn_runtime_to_design", open("integration/code/pn_runtime_to_design.mvc").read(), add_tracability_R2D)
 
         log = []
         assert transformation_execute_MT("print_pn", {"PetriNet": "my_pn"}, {}, callback) == True
@@ -272,12 +256,10 @@ class TestModelverseCore(unittest.TestCase):
         model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())
         model_add("ReachabilityGraph", "SimpleClassDiagrams", open("integration/code/reachability_graph.mvc", "r").read())
         model_add("pn_reachability", "ProcessModel", open("integration/code/pm_pn_reachability.mvc", "r").read())
-        transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
-        transformation_add_MT_language(["ReachabilityGraph"], "ReachabilityGraph_RAM")
-        transformation_add_MT("PetriNet_RAM", {}, {"PetriNet": "PetriNet"}, "initialize_PN", open("integration/code/initialize_PN.mvc", "r").read())
+        transformation_add_MT({}, {"PetriNet": "PetriNet"}, "initialize_PN", open("integration/code/initialize_PN.mvc", "r").read())
         transformation_add_MANUAL({"PetriNet": "PetriNet"}, {"PetriNet": "PetriNet"}, "refine_PN")
         transformation_add_AL({"PetriNet": "PetriNet"}, {"ReachabilityGraph": "ReachabilityGraph"}, "reachability", open("integration/code/reachability.alc", "r").read())
-        transformation_add_MT("ReachabilityGraph_RAM", {"ReachabilityGraph": "ReachabilityGraph"}, {}, "reachability_print", open("integration/code/reachabilitygraph_print.mvc", 'r').read())
+        transformation_add_MT({"ReachabilityGraph": "ReachabilityGraph"}, {}, "reachability_print", open("integration/code/reachabilitygraph_print.mvc", 'r').read())
 
         def callback_refine_PN():
             p1 = instantiate(None, "PetriNet/Place")
@@ -304,12 +286,10 @@ class TestModelverseCore(unittest.TestCase):
         model_add("PetriNet", "SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())
         model_add("ReachabilityGraph", "SimpleClassDiagrams", open("integration/code/reachability_graph.mvc", "r").read())
         model_add("pn_reachability", "ProcessModel", open("integration/code/pm_pn_reachability.mvc", "r").read())
-        transformation_add_MT_language(["PetriNet"], "PetriNet_RAM")
-        transformation_add_MT_language(["ReachabilityGraph"], "ReachabilityGraph_RAM")
-        transformation_add_MT("PetriNet_RAM", {}, {"PetriNet": "PetriNet"}, "initialize_PN", open("integration/code/initialize_PN.mvc", "r").read())
+        transformation_add_MT({}, {"PetriNet": "PetriNet"}, "initialize_PN", open("integration/code/initialize_PN.mvc", "r").read())
         transformation_add_MANUAL({"PetriNet": "PetriNet"}, {"PetriNet": "PetriNet"}, "refine_PN")
         transformation_add_AL({"PetriNet": "PetriNet"}, {"ReachabilityGraph": "ReachabilityGraph"}, "reachability", open("integration/code/reachability_subfunction.alc", "r").read())
-        transformation_add_MT("ReachabilityGraph_RAM", {"ReachabilityGraph": "ReachabilityGraph"}, {}, "reachability_print", open("integration/code/reachabilitygraph_print.mvc", 'r').read())
+        transformation_add_MT({"ReachabilityGraph": "ReachabilityGraph"}, {}, "reachability_print", open("integration/code/reachabilitygraph_print.mvc", 'r').read())
 
         def callback_refine_PN():
             p1 = instantiate(None, "PetriNet/Place")
@@ -332,14 +312,15 @@ class TestModelverseCore(unittest.TestCase):
                            '"1": {"p1": 0, }',
                            '"0" --["t1"]--> "1"'])
 
+    """
     def test_render(self):
         model_add("CausalBlockDiagrams", "SimpleClassDiagrams", open("integration/code/cbd_design.mvc", 'r').read())
         model_add("MM_rendered_graphical", "SimpleClassDiagrams", open("models/MM_rendered_graphical.mvc", 'r').read())
         model_add("my_CBD", "CausalBlockDiagrams", open("integration/code/my_cbd.mvc", 'r').read())
 
-        transformation_add_MT_language(["CausalBlockDiagrams", "MM_rendered_graphical"], "CBD_RAM")
-        instantiate("__merged_CBD_RAM", "Association", ("CausalBlockDiagrams/Block", "MM_rendered_graphical/Group"), ID="TracabilityLink")
-        transformation_RAMify("__merged_CBD_RAM", "CBD_RAM")
+        def add_tracability():
+            instantiate(None, "Association", ("CausalBlockDiagrams/Block", "MM_rendered_graphical/Group"), ID="TracabilityLink")
 
-        transformation_add_MT("CBD_RAM", {"CausalBlockDiagrams": "CausalBlockDiagrams", "MM_rendered_graphical": "MM_rendered_graphical"}, {"MM_rendered_graphical": "MM_rendered_graphical"}, "render_graphical_CBD", open("models/CBD_mapper.mvc", 'r').read())
+        transformation_add_MT({"CausalBlockDiagrams": "CausalBlockDiagrams", "MM_rendered_graphical": "MM_rendered_graphical"}, {"MM_rendered_graphical": "MM_rendered_graphical"}, "render_graphical_CBD", open("models/CBD_mapper.mvc", 'r').read(), add_tracability)
         model_render("my_CBD", "render_graphical_CBD")
+    """

+ 2 - 4
interface/graphical/upload_mappers.py

@@ -13,9 +13,7 @@ model_add("MM_rendered_graphical", "SimpleClassDiagrams", open("models/MM_render
 model_add("MM_rendered_plot", "SimpleClassDiagrams", open("models/MM_rendered_plot.mvc", 'r').read())
 model_add("my_CBD", "CausalBlockDiagrams", open("integration/code/my_cbd.mvc", 'r').read())
 model_add("trace_example", "Trace", open("models/trace_example.mvc", 'r').read())
-transformation_add_MT_language(["CausalBlockDiagrams", "Trace", "MM_rendered_graphical", "MM_rendered_plot"], "CBD_RAM")
 instantiate("__merged_CBD_RAM", "Association", ("CausalBlockDiagrams/Block", "MM_rendered_graphical/Group"), ID="TracabilityGraphical")
 instantiate("__merged_CBD_RAM", "Association", ("Trace/Signal", "MM_rendered_plot/Dataset"), ID="TracabilityPlot")
-transformation_RAMify("__merged_CBD_RAM", "CBD_RAM")
-transformation_add_MT("CBD_RAM", {"CausalBlockDiagrams": "CausalBlockDiagrams", "MM_rendered_graphical": "MM_rendered_graphical"}, {"CausalBlockDiagrams": "CausalBlockDiagrams", "MM_rendered_graphical": "MM_rendered_graphical"}, "render_graphical_CBD", open("models/CBD_mapper.mvc", 'r').read())
-transformation_add_MT("CBD_RAM", {"Trace": "Trace", "MM_rendered_plot": "MM_rendered_plot"}, {"Trace": "Trace", "MM_rendered_plot": "MM_rendered_plot"}, "render_plot_trace", open("models/trace_mapper.mvc", 'r').read())
+transformation_add_MT({"CausalBlockDiagrams": "CausalBlockDiagrams", "MM_rendered_graphical": "MM_rendered_graphical"}, {"CausalBlockDiagrams": "CausalBlockDiagrams", "MM_rendered_graphical": "MM_rendered_graphical"}, "render_graphical_CBD", open("models/CBD_mapper.mvc", 'r').read())
+transformation_add_MT({"Trace": "Trace", "MM_rendered_plot": "MM_rendered_plot"}, {"Trace": "Trace", "MM_rendered_plot": "MM_rendered_plot"}, "render_plot_trace", open("models/trace_mapper.mvc", 'r').read())

+ 2 - 16
wrappers/modelverse.py

@@ -433,14 +433,7 @@ def transformation_between(source, target):
         return set([])
     lst = set([v for v in output.split("\n")])
 
-def transformation_add_MT_language(metamodels, RAMified_name):
-    """Create a new Model Transformation language out of a set of metamodels."""
-    _goto_mode(MODE_MODELLING)
-
-    _input(["transformation_add_MT_language"] + metamodels + ["", RAMified_name])
-    _handle_output("Success")
-
-def transformation_add_MT(RAMified_metamodel, source_metamodels, target_metamodels, operation_name, code):
+def transformation_add_MT(source_metamodels, target_metamodels, operation_name, code):
     """Create a new model transformation."""
     _goto_mode(MODE_MODELLING)
 
@@ -450,7 +443,7 @@ def transformation_add_MT(RAMified_metamodel, source_metamodels, target_metamode
         raise CompilationError(e)
 
     mv_dict_rep = _dict_to_list(source_metamodels) + [""] + _dict_to_list(target_metamodels) + [""]
-    _input(["transformation_add_MT", RAMified_metamodel] + mv_dict_rep + [operation_name])
+    _input(["transformation_add_MT"] + mv_dict_rep + [operation_name])
     _handle_output("Waiting for model constructors...")
     _input(compiled)
     _handle_output("Success")
@@ -572,13 +565,6 @@ def transformation_list():
 
     return lst
 
-def transformation_RAMify(metamodel_name, RAMified_metamodel_name):
-    """Ramify an existing metamodel."""
-    _goto_mode(MODE_MODELLING)
-
-    _input(["transformation_RAMify", metamodel_name, RAMified_metamodel_name])
-    _handle_output("Success")
-
 def process_execute(process_name, prefix, callbacks):
     """Execute a process model."""
     global mode