Browse Source

Fixed power window tests

Yentl Van Tendeloo 8 years ago
parent
commit
69f9e63b5c

+ 20 - 8
bootstrap/core_algorithm.alc

@@ -582,6 +582,12 @@ Element function execute_operation(operation_id : String, input_models : Element
 
 			result = model_split(merged_model, model_tuples, tracability)
 
+			//log("Split up model")
+			keys = dict_keys(result)
+			while (read_nr_out(keys) > 0):
+				key = set_pop(keys)
+				//log((cast_v2s(key) + " --> ") + cast_v2s(read_nr_out(result[key]["model"])))
+
 			if (tracability):
 				Element new_tracability_model
 				new_tracability_model = result["__tracability"]
@@ -1194,6 +1200,7 @@ String function transformation_add(user_id : String, source_models : Element, ta
 	Element target
 	String name
 	Element all_formalisms
+	Element formalism_map
 	Element merged_formalism
 	String merged_formalism_id
 	String source_formalism_id
@@ -1206,6 +1213,7 @@ String function transformation_add(user_id : String, source_models : Element, ta
 	source = create_node()
 	target = create_node()
 	all_formalisms = create_node()
+	formalism_map = create_node()
 
 	type_id = ""
 	old_type_id = ""
@@ -1225,12 +1233,14 @@ String function transformation_add(user_id : String, source_models : Element, ta
 					if (bool_or(old_type_id == "", type_id == old_type_id)):
 						old_type_id = type_id
 						dict_add(source, key, model_id)
-						set_add(all_formalisms, create_tuple(name, get_full_model(model_id)))
+						set_add(formalism_map, create_tuple(key, get_full_model(model_id)))
+						if (bool_not(set_in(all_formalisms, model_id))):
+							set_add(all_formalisms, model_id)
 					elif (old_type_id != type_id):
 						// Already have a previous type_id and now another: CLASH
-						return "Cannot add model as type not compatible with previous models: " + name!
+						return "Cannot add model as type not compatible with previous models: " + key!
 				else:
-					return "Model already selected as source: " + name!
+					return "Name already selected for source: " + key!
 			else:
 				return "Permission denied to model: " + name!
 		else:
@@ -1248,12 +1258,14 @@ String function transformation_add(user_id : String, source_models : Element, ta
 					if (bool_or(old_type_id == "", type_id == old_type_id)):
 						old_type_id = type_id
 						dict_add(target, key, model_id)
-						set_add(all_formalisms, create_tuple(name, get_full_model(model_id)))
+						set_add(formalism_map, create_tuple(key, get_full_model(model_id)))
+						if (bool_not(set_in(all_formalisms, model_id))):
+							set_add(all_formalisms, model_id)
 					elif (old_type_id != type_id):
 						// Already have a previous type_id and now another: CLASH
-						return "Cannot add mdoel as type not compatible with previous models: " + name!
+						return "Cannot add model as type not compatible with previous models: " + key!
 				else:
-					return "Model already selected as target: " + name!
+					return "Name already selected for target: " + key!
 			else:
 				return "Permission denied to model: " + name!
 		else:
@@ -1262,7 +1274,7 @@ String function transformation_add(user_id : String, source_models : Element, ta
 	if (get_model_id(operation_name) == ""):
 		// Write out a merged metamodel containing all these models: this is the MM for the manual operation
 		// New location is available, so write
-		merged_formalism = model_fuse(set_copy(all_formalisms))
+		merged_formalism = model_fuse(set_copy(formalism_map))
 		modify(merged_formalism, True)
 
 		if (operation_type == "manual"):
@@ -1282,7 +1294,7 @@ String function transformation_add(user_id : String, source_models : Element, ta
 
 		// 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))
+			source_formalism_id = set_pop(all_formalisms)
 			tracability_link = instantiate_link(core, "tracability", "", merged_formalism_id, source_formalism_id)
 			instantiate_attribute(core, tracability_link, "type", "merged")
 

+ 2 - 1
doc/wrappers.rst

@@ -80,7 +80,8 @@ Functions
 
 .. function:: model_overwrite(model_name, new_model_code=None)
 
-   Expl
+   Overwrites the model previously known under the name *model_name* with the model code in *new_model_code*.
+   This operation differs from first deleting the model and then recreating it, as all metadata of the model is kept, such as access permissions.
 
 .. function:: user_logout()
 

+ 76 - 54
integration/test_powerwindow.py

@@ -46,34 +46,41 @@ class TestPowerWindow(unittest.TestCase):
                 ("ActionLanguage", "SimpleClassDiagrams"),
                 ("ProcessModel", "SimpleClassDiagrams"),
                 ("Tracability", "SimpleClassDiagrams"),
+                ("conformance_mv", "ActionLanguage"),
                 ("core", "CoreFormalism"),])
 
-        transformation_add_MT_language(["PetriNet", "Encapsulated_PetriNet", "PW_Plant", "PW_Control", "PW_Environment", "Requirements", "ReachabilityGraph", "Query", "Architecture"], "All_RAM")
-        instantiate("__merged_All_RAM", "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
-        instantiate("__merged_All_RAM", "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
-        instantiate("__merged_All_RAM", "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
-        instantiate("__merged_All_RAM", "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
-        instantiate("__merged_All_RAM", "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
-        instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
-        instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
-        transformation_RAMify("__merged_All_RAM", "All_RAM")
-
-        transformation_add_MANUAL(["Requirements"], ["Requirements"], "revise_req")
-        transformation_add_MANUAL(["Requirements", "PW_Environment"], ["PW_Environment"], "revise_environment")
-        transformation_add_MANUAL(["Requirements", "PW_Plant"], ["PW_Plant"], "revise_plant")
-        transformation_add_MANUAL(["Requirements", "PW_Control"], ["PW_Control"], "revise_control")
-        transformation_add_MANUAL(["Requirements", "Query"], ["Query"], "revise_query")
-        transformation_add_MANUAL(["Requirements", "Architecture"], ["Architecture"], "revise_architecture")
-
-        transformation_add_MT("All_RAM", [], ["PW_Plant", "PW_Environment", "PW_Control", "Query", "Architecture", "Requirements"], "make_initial_models", open("models/initialize.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["PW_Plant"], ["Encapsulated_PetriNet"], "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["PW_Control"], ["Encapsulated_PetriNet"], "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["PW_Environment"], ["Encapsulated_PetriNet"], "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["Encapsulated_PetriNet", "Architecture"], ["Encapsulated_PetriNet"], "combine_EPN", open("models/combine_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["ReachabilityGraph", "Query"], [], "match", open("models/matches.mvc", 'r').read())
-
-        transformation_add_AL(["PetriNet"], ["ReachabilityGraph"], "reachability", open("models/reachability.alc", 'r').read())
-        transformation_add_AL(["ReachabilityGraph"], [], "bfs", open("models/bfs.alc", 'r').read())
+        transformation_add_MANUAL({"Requirements": "Requirements"}, {"Requirements": "Requirements"}, "revise_req")
+        transformation_add_MANUAL({"Requirements": "Requirements", "PW_Environment": "PW_Environment"}, {"PW_Environment": "PW_Environment"}, "revise_environment")
+        transformation_add_MANUAL({"Requirements": "Requirements", "PW_Plant": "PW_Plant"}, {"PW_Plant": "PW_Plant"}, "revise_plant")
+        transformation_add_MANUAL({"Requirements": "Requirements", "PW_Control": "PW_Control"}, {"PW_Control": "PW_Control"}, "revise_control")
+        transformation_add_MANUAL({"Requirements": "Requirements", "Query": "Query"}, {"Query": "Query"}, "revise_query")
+        transformation_add_MANUAL({"Requirements": "Requirements", "Architecture": "Architecture"}, {"Architecture": "Architecture"}, "revise_architecture")
+
+        def tracability_CTRL2EPN():
+            instantiate(None, "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
+            instantiate(None, "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
+
+        def tracability_PLANT2EPN():
+            instantiate(None, "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
+            instantiate(None, "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
+
+        def tracability_ENV2EPN():
+            instantiate(None, "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
+
+        def tracability_EPN2PN():
+            instantiate(None, "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
+            instantiate(None, "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
+
+        transformation_add_MT({}, {"PW_Plant": "PW_Plant", "PW_Environment": "PW_Environment", "PW_Control": "PW_Control", "Query": "Query", "Architecture": "Architecture", "Requirements": "Requirements"}, "make_initial_models", open("models/initialize.mvc", 'r').read())
+        transformation_add_MT({"PW_Plant": "PW_Plant"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read(), tracability_PLANT2EPN)
+        transformation_add_MT({"PW_Control": "PW_Control"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read(), tracability_CTRL2EPN)
+        transformation_add_MT({"PW_Environment": "PW_Environment"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read(), tracability_ENV2EPN)
+        transformation_add_MT({"Encapsulated_PetriNet": "Encapsulated_PetriNet", "Architecture": "Architecture"}, {"PetriNet": "PetriNet"}, "combine_EPN", open("models/combine_EPN.mvc", 'r').read(), tracability_EPN2PN)
+        transformation_add_MT({"ReachabilityGraph": "ReachabilityGraph", "Query": "Query"}, {}, "match", open("models/matches.mvc", 'r').read())
+
+        transformation_add_AL({"PetriNet": "PetriNet"}, {"ReachabilityGraph": "ReachabilityGraph"}, "reachability", open("models/reachability.alc", 'r').read())
+        transformation_add_AL({"ReachabilityGraph": "ReachabilityGraph"}, {}, "bfs", open("models/bfs.alc", 'r').read())
+        transformation_add_AL({"EPN_Plant": "Encapsulated_PetriNet", "EPN_Control": "Encapsulated_PetriNet", "EPN_Environment": "Encapsulated_PetriNet"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "merge_EPN", open("models/merge_EPN.alc", 'r').read())
 
         global called
         called = 0
@@ -104,7 +111,11 @@ class TestPowerWindow(unittest.TestCase):
                 "revise_architecture": cb_arch,
             }
 
-        process_execute("pm_powerwindow", "pm_", callbacks)
+        try:
+            process_execute("pm_powerwindow", "pm_", callbacks)
+        except:
+            import traceback
+            print(traceback.format_exc())
 
     @slow
     def test_process_powerwindow_debug(self):
@@ -138,34 +149,41 @@ class TestPowerWindow(unittest.TestCase):
                 ("ActionLanguage", "SimpleClassDiagrams"),
                 ("ProcessModel", "SimpleClassDiagrams"),
                 ("Tracability", "SimpleClassDiagrams"),
+                ("conformance_mv", "ActionLanguage"),
                 ("core", "CoreFormalism"),])
 
-        transformation_add_MT_language(["PetriNet", "Encapsulated_PetriNet", "PW_Plant", "PW_Control", "PW_Environment", "Requirements", "ReachabilityGraph", "Query", "Architecture"], "All_RAM")
-        instantiate("__merged_All_RAM", "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
-        instantiate("__merged_All_RAM", "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
-        instantiate("__merged_All_RAM", "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
-        instantiate("__merged_All_RAM", "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
-        instantiate("__merged_All_RAM", "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
-        instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
-        instantiate("__merged_All_RAM", "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
-        transformation_RAMify("__merged_All_RAM", "All_RAM")
-
-        transformation_add_MANUAL(["Requirements"], ["Requirements"], "revise_req")
-        transformation_add_MANUAL(["Requirements", "PW_Environment"], ["PW_Environment"], "revise_environment")
-        transformation_add_MANUAL(["Requirements", "PW_Plant"], ["PW_Plant"], "revise_plant")
-        transformation_add_MANUAL(["Requirements", "PW_Control"], ["PW_Control"], "revise_control")
-        transformation_add_MANUAL(["Requirements", "Query"], ["Query"], "revise_query")
-        transformation_add_MANUAL(["Requirements", "Architecture"], ["Architecture"], "revise_architecture")
-
-        transformation_add_MT("All_RAM", [], ["PW_Plant", "PW_Environment", "PW_Control", "Query", "Architecture", "Requirements"], "make_initial_models", open("models/initialize.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["PW_Plant"], ["Encapsulated_PetriNet"], "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["PW_Control"], ["Encapsulated_PetriNet"], "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["PW_Environment"], ["Encapsulated_PetriNet"], "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["Encapsulated_PetriNet", "Architecture"], ["Encapsulated_PetriNet"], "combine_EPN", open("models/combine_EPN.mvc", 'r').read())
-        transformation_add_MT("All_RAM", ["ReachabilityGraph", "Query"], [], "match", open("models/matches.mvc", 'r').read())
-
-        transformation_add_AL(["PetriNet"], ["ReachabilityGraph"], "reachability", open("models/reachability.alc", 'r').read())
-        transformation_add_AL(["ReachabilityGraph"], [], "bfs", open("models/bfs.alc", 'r').read())
+        transformation_add_MANUAL({"Requirements": "Requirements"}, {"Requirements": "Requirements"}, "revise_req")
+        transformation_add_MANUAL({"Requirements": "Requirements", "PW_Environment": "PW_Environment"}, {"PW_Environment": "PW_Environment"}, "revise_environment")
+        transformation_add_MANUAL({"Requirements": "Requirements", "PW_Plant": "PW_Plant"}, {"PW_Plant": "PW_Plant"}, "revise_plant")
+        transformation_add_MANUAL({"Requirements": "Requirements", "PW_Control": "PW_Control"}, {"PW_Control": "PW_Control"}, "revise_control")
+        transformation_add_MANUAL({"Requirements": "Requirements", "Query": "Query"}, {"Query": "Query"}, "revise_query")
+        transformation_add_MANUAL({"Requirements": "Requirements", "Architecture": "Architecture"}, {"Architecture": "Architecture"}, "revise_architecture")
+
+        def tracability_CTRL2EPN():
+            instantiate(None, "Association", ("PW_Control/State", "Encapsulated_PetriNet/Place"), ID="CTRL2EPN_link")
+            instantiate(None, "Association", ("PW_Control/Transition", "Encapsulated_PetriNet/Transition"), ID="CTRL2EPN_tlink")
+
+        def tracability_PLANT2EPN():
+            instantiate(None, "Association", ("PW_Plant/State", "Encapsulated_PetriNet/Place"), ID="PLANT2EPN_link")
+            instantiate(None, "Association", ("PW_Plant/Transition", "Encapsulated_PetriNet/Transition"), ID="PLANT2EPN_tlink")
+
+        def tracability_ENV2EPN():
+            instantiate(None, "Association", ("PW_Environment/Event", "Encapsulated_PetriNet/Place"), ID="ENV2EPN_link")
+
+        def tracability_EPN2PN():
+            instantiate(None, "Association", ("Encapsulated_PetriNet/Place", "PetriNet/Place"), ID="EPN2PN_transition_link")
+            instantiate(None, "Association", ("Encapsulated_PetriNet/Transition", "PetriNet/Transition"), ID="EPN2PN_place_link")
+
+        transformation_add_MT({}, {"PW_Plant": "PW_Plant", "PW_Environment": "PW_Environment", "PW_Control": "PW_Control", "Query": "Query", "Architecture": "Architecture", "Requirements": "Requirements"}, "make_initial_models", open("models/initialize.mvc", 'r').read())
+        transformation_add_MT({"PW_Plant": "PW_Plant"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "plant_to_EPN", open("models/plant_to_EPN.mvc", 'r').read(), tracability_PLANT2EPN)
+        transformation_add_MT({"PW_Control": "PW_Control"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "control_to_EPN", open("models/control_to_EPN.mvc", 'r').read(), tracability_CTRL2EPN)
+        transformation_add_MT({"PW_Environment": "PW_Environment"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "environment_to_EPN", open("models/environment_to_EPN.mvc", 'r').read(), tracability_ENV2EPN)
+        transformation_add_MT({"Encapsulated_PetriNet": "Encapsulated_PetriNet", "Architecture": "Architecture"}, {"PetriNet": "PetriNet"}, "combine_EPN", open("models/combine_EPN.mvc", 'r').read(), tracability_EPN2PN)
+        transformation_add_MT({"ReachabilityGraph": "ReachabilityGraph", "Query": "Query"}, {}, "match", open("models/matches.mvc", 'r').read())
+
+        transformation_add_AL({"PetriNet": "PetriNet"}, {"ReachabilityGraph": "ReachabilityGraph"}, "reachability", open("models/reachability.alc", 'r').read())
+        transformation_add_AL({"ReachabilityGraph": "ReachabilityGraph"}, {}, "bfs", open("models/bfs.alc", 'r').read())
+        transformation_add_AL({"EPN_Plant": "Encapsulated_PetriNet", "EPN_Control": "Encapsulated_PetriNet", "EPN_Environment": "Encapsulated_PetriNet"}, {"Encapsulated_PetriNet": "Encapsulated_PetriNet"}, "merge_EPN", open("models/merge_EPN.alc", 'r').read())
 
         global called
         called = 0
@@ -198,7 +216,11 @@ class TestPowerWindow(unittest.TestCase):
                 "revise_architecture": cb_arch,
             }
 
-        process_execute("pm_powerwindow", "pm_", callbacks)
+        try:
+            process_execute("pm_powerwindow", "pm_", callbacks)
+        except:
+            import traceback
+            print(traceback.format_exc())
 
         if called != 11:
             print(called)

+ 21 - 9
models/pm_req_analyse.mvc

@@ -39,6 +39,10 @@ Exec control_to_EPN {
 
 Join join2 {}
 
+Exec merge_EPN {
+    name = "merge_EPN"
+}
+
 Exec combine_EPN {
     name = "combine_EPN"
 }
@@ -91,10 +95,6 @@ Data environment_EPN {
     name = "environment_EPN"
     type = "Encapsulated_PetriNet"
 }
-Data merged_EPN {
-    name = "merged_EPN"
-    type = "Encapsulated_PetriNet"
-}
 Data pn {
     name = "pn"
     type = "PetriNet"
@@ -111,6 +111,10 @@ Data architecture {
     name = "architecture"
     type = "Architecture"
 }
+Data merged_EPN {
+    name = "merged_EPN"
+    type = "Encapsulated_PetriNet"
+}
 
 Next (start, make_initial_models) {}
 Next (make_initial_models, revise_req) {}
@@ -127,7 +131,8 @@ Next (plant_to_EPN, join2) {}
 Next (environment_to_EPN, join2) {}
 Next (control_to_EPN, join2) {}
 Next (revise_architecture, join2) {}
-Next (join2, combine_EPN) {}
+Next (join2, merge_EPN) {}
+Next (merge_EPN, combine_EPN) {}
 Next (combine_EPN, analyse) {}
 Next (analyse, join3) {}
 Next (revise_query, join3) {}
@@ -229,13 +234,20 @@ Produces (control_to_EPN, control_EPN) {
     name = "Encapsulated_PetriNet"
 }
 
-Consumes (combine_EPN, plant_EPN) {
-    name = "Encapsulated_PetriNet"
+Consumes (merge_EPN, environment_EPN) {
+    name = "EPN_Environment"
 }
-Consumes (combine_EPN, environment_EPN) {
+Consumes (merge_EPN, control_EPN) {
+    name = "EPN_Control"
+}
+Consumes (merge_EPN, plant_EPN) {
+    name = "EPN_Plant"
+}
+Produces (merge_EPN, merged_EPN) {
     name = "Encapsulated_PetriNet"
 }
-Consumes (combine_EPN, control_EPN) {
+
+Consumes (combine_EPN, merged_EPN) {
     name = "Encapsulated_PetriNet"
 }
 Consumes (combine_EPN, architecture) {

+ 21 - 5
models/pm_req_analyse_debug.mvc

@@ -48,6 +48,10 @@ Exec print_control_EPN{
 
 Join join2 {}
 
+Exec merge_EPN {
+    name = "merge_EPN"
+}
+
 Exec combine_EPN {
     name = "combine_EPN"
 }
@@ -124,6 +128,10 @@ Data architecture {
     name = "architecture"
     type = "Architecture"
 }
+Data merged_EPN {
+    name = "merged_EPN"
+    type = "Encapsulated_PetriNet"
+}
 
 Next (start, make_initial_models) {}
 Next (make_initial_models, revise_req) {}
@@ -143,7 +151,8 @@ Next (print_env_EPN, join2) {}
 Next (control_to_EPN, print_control_EPN) {}
 Next (print_control_EPN, join2) {}
 Next (revise_architecture, join2) {}
-Next (join2, combine_EPN) {}
+Next (join2, merge_EPN) {}
+Next (merge_EPN, combine_EPN) {}
 Next (combine_EPN, print_pn) {}
 Next (print_pn, analyse) {}
 Next (analyse, join3) {}
@@ -246,13 +255,20 @@ Produces (control_to_EPN, control_EPN) {
     name = "Encapsulated_PetriNet"
 }
 
-Consumes (combine_EPN, plant_EPN) {
-    name = "Encapsulated_PetriNet"
+Consumes (merge_EPN, environment_EPN) {
+    name = "EPN_Environment"
+}
+Consumes (merge_EPN, control_EPN) {
+    name = "EPN_Control"
 }
-Consumes (combine_EPN, environment_EPN) {
+Consumes (merge_EPN, plant_EPN) {
+    name = "EPN_Plant"
+}
+Produces (merge_EPN, merged_EPN) {
     name = "Encapsulated_PetriNet"
 }
-Consumes (combine_EPN, control_EPN) {
+
+Consumes (combine_EPN, merged_EPN) {
     name = "Encapsulated_PetriNet"
 }
 Consumes (combine_EPN, architecture) {