Przeglądaj źródła

Added the possibility to add a Manual Operation as model transformation

Yentl Van Tendeloo 8 lat temu
rodzic
commit
ed85bc3323
2 zmienionych plików z 118 dodań i 0 usunięć
  1. 85 0
      core/core_algorithm.alc
  2. 33 0
      integration/test_mvc.py

+ 85 - 0
core/core_algorithm.alc

@@ -111,6 +111,22 @@ Void function main():
 	instantiate_link(core, "group", "", al_model, admin_group)
 	instantiate_link(core, "owner", "", al_model, admin_user)
 
+	// Add the Manual Operation formalism
+	Element manual
+	String manual_model
+	manual = instantiate_model(scd)
+	manual_model = instantiate_node(core, "Model", "")
+	export_node("models/ManualOperation", manual)
+	instantiate_attribute(core, manual_model, "name", "ManualOperation")
+	instantiate_attribute(core, manual_model, "location", "models/ManualOperation/model")
+	instantiate_attribute(core, manual_model, "permissions", "221")
+	instance_of = instantiate_link(core, "instanceOf", "", manual_model, scd_model)
+	instantiate_attribute(core, instance_of, "type_mapping", create_node())
+
+	// Make necessary links for the formalism to the owners
+	instantiate_link(core, "group", "", manual_model, admin_group)
+	instantiate_link(core, "owner", "", manual_model, admin_user)
+
 	// Add the core formalism already
 	core_formalism_model = instantiate_node(core, "Model", "")
 	instantiate_attribute(core, core_formalism_model, "name", "CoreFormalism")
@@ -910,6 +926,75 @@ Void function user_function_skip_init(user_id : String):
 			else:
 				output("No such model")
 
+		elif (cmd == "transformation_add_MANUAL"):
+			// Add a manual transformation model
+			output("Which metamodels do you want to use as source for the manual operation (empty string to finish)?")
+			String model_id
+			Element models
+			Element source
+			Element target
+			String name
+
+			name = input()
+			source = create_node()
+			target = create_node()
+
+			while (name != ""):
+				model_id = get_model_id(name)
+				if (model_id != ""):
+					if (bool_not(set_in(source, model_id))):
+						set_add(source, model_id)
+						output("Model added as source")
+					else:
+						output("Model already selected as source")
+				else:
+					output("No such model; try again")
+				
+				name = input()
+
+			output("Which metamodels do you want to use as target for the manual operation (empty string to finish)?")
+			name = input()
+			while (name != ""):
+				model_id = get_model_id(name)
+				if (model_id != ""):
+					if (bool_not(set_in(target, model_id))):
+						set_add(target, model_id)
+						output("Model added as target")
+					else:
+						output("Model already selected as target")
+				else:
+					output("No such model; try again")
+				
+				name = input()
+
+			output("Name of Manual operation model?")
+			name = input()
+
+			if (get_model_id(name) == ""):
+				// Finished with all information, now create the model itself!
+				model_create(instantiate_model(get_full_model(get_model_id("ManualOperation"))), name, user_id, get_model_id("ManualOperation"), "ManualOperation")
+				model_id = get_model_id(name)
+
+				// Extend metadata with info on source and target
+				String link
+				String dst
+
+				log("Adding inputs")
+				while (read_nr_out(source) > 0):
+					dst = set_pop(source)
+					log(" for " + dst)
+					link = instantiate_link(core, "transformInput", "", model_id, dst)
+					instantiate_attribute(core, link, "name", read_attribute(core, dst, "name"))
+
+				log("Adding outputs")
+				while (read_nr_out(target) > 0):
+					dst = set_pop(target)
+					log(" for " + dst)
+					link = instantiate_link(core, "transformOutput", "", model_id, dst)
+					instantiate_attribute(core, link, "name", read_attribute(core, dst, "name"))
+			else:
+				output("Model already exists")
+
 		elif (cmd == "transformation_add_AL"):
 			// Add an action language transformation model
 			output("Which metamodels do you want to use as source for the action code (empty string to finish)?")

+ 33 - 0
integration/test_mvc.py

@@ -34,6 +34,7 @@ class TestModelverseCore(unittest.TestCase):
                 "Ready for command...",
                 set(["  SimpleClassDiagrams : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
                      "  core : CoreFormalism"]),
             ]))
@@ -53,6 +54,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
             ]))
 
@@ -82,12 +84,14 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  SimpleClassDiagrams : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  Empty : SimpleClassDiagrams",
                      "  core : CoreFormalism"]),
                 "Ready for command...",
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   Empty : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
             ]))
@@ -125,12 +129,14 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  SimpleClassDiagrams : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
                      "  Empty : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
                      "  core : CoreFormalism"]),
                 "Ready for command...",
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   Empty : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
@@ -147,6 +153,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   Empty : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
             ]))
@@ -200,6 +207,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   Empty : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
                 "Which model do you want to modify?",
@@ -215,6 +223,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   Empty : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
                 "Which model to overwrite?",
@@ -225,6 +234,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   Empty : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
                 "Which model do you want to modify?",
@@ -268,6 +278,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
@@ -277,6 +288,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets_RAM : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
@@ -324,6 +336,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
@@ -335,6 +348,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
                      "  200  root nobody   __merged_PetriNets_RAM : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets_RAM : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
@@ -353,6 +367,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
                      "  200  root nobody   __merged_PetriNets_RAM : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets_RAM : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets_Print : PetriNets_RAM",
@@ -403,6 +418,7 @@ class TestModelverseCore(unittest.TestCase):
                 "Ready for command...",
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
@@ -415,6 +431,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  200  root nobody   __merged_PetriNets_RAM : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets_RAM : SimpleClassDiagrams",
                      "  200  root admin   core : CoreFormalism"]),
                 "Ready for command...",
@@ -486,6 +503,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  221  root admin   SimpleClassDiagrams : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
                      "  200  root nobody   my_pn : PetriNets",
                      "  200  root admin   core : CoreFormalism"]),
@@ -497,6 +515,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  221  root admin   ActionLanguage : SimpleClassDiagrams",
                      "  221  root admin   CoreFormalism : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets : SimpleClassDiagrams",
+                     "  221  root admin   ManualOperation : SimpleClassDiagrams",
                      "  200  root nobody   __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  200  root nobody   PetriNets_RAM : SimpleClassDiagrams",
                      "  200  root nobody   my_pn : PetriNets",
@@ -659,6 +678,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  SimpleClassDiagrams : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
                      "  PetriNets_Runtime : SimpleClassDiagrams",
@@ -673,6 +693,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  ActionLanguage : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
                      "  PetriNets_Runtime : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  PetriNets_RAM : SimpleClassDiagrams",
@@ -779,6 +800,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  PetriNets : SimpleClassDiagrams",
                      "  pn_print : PetriNets_RAM",
                      "  pn_design_to_runtime : PetriNets_RAM",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  pn_runtime_to_design : PetriNets_RAM",
                      "  pn_step : PetriNets_RAM",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
@@ -992,6 +1014,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  PetriNets : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
                      "  ActionLanguage : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  PetriNets_Runtime : SimpleClassDiagrams",
                      "  core : CoreFormalism"]),
                 "Ready for command...",
@@ -1005,6 +1028,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  PetriNets_Runtime : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  PetriNets_RAM : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
@@ -1112,6 +1136,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  pn_print : PetriNets_RAM",
                      "  pn_design_to_runtime : PetriNets_RAM",
                      "  pn_runtime_to_design : PetriNets_RAM",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  pn_step : PetriNets_RAM",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  PetriNets_RAM : SimpleClassDiagrams",
@@ -1274,6 +1299,7 @@ class TestModelverseCore(unittest.TestCase):
                 # model_list
                 set(["  SimpleClassDiagrams : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
@@ -1288,6 +1314,7 @@ class TestModelverseCore(unittest.TestCase):
                 set(["  SimpleClassDiagrams : SimpleClassDiagrams",
                      "  ActionLanguage : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  PetriNets_Runtime : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
@@ -1390,6 +1417,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  pn_print : PetriNets_RAM",
                      "  pn_design_to_runtime : PetriNets_RAM",
                      "  pn_runtime_to_design : PetriNets_RAM",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  pn_step : ActionLanguage",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  PetriNets_RAM : SimpleClassDiagrams",
@@ -1440,6 +1468,7 @@ class TestModelverseCore(unittest.TestCase):
                 "Ready for command...",
             ]))
 
+    """
     def test_powerwindow(self):
         self.assertTrue(run_file(all_files,
             [ "root", "root", "root", 
@@ -1527,6 +1556,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  CoreFormalism : SimpleClassDiagrams",
                      "  Control_PW : SimpleClassDiagrams",
                      "  Environment_PW : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  Description_PW : SimpleClassDiagrams",
                      "  control_model : Control_PW",
                      "  environment_model : Environment_PW",
@@ -1602,6 +1632,7 @@ class TestModelverseCore(unittest.TestCase):
                      "  ActionLanguage : SimpleClassDiagrams",
                      "  CoreFormalism : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  ReachabilityGraph : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
                      "  core : CoreFormalism"]),
@@ -1626,6 +1657,8 @@ class TestModelverseCore(unittest.TestCase):
                      "  PetriNets : SimpleClassDiagrams",
                      "  my_pn_reachability : ReachabilityGraph",
                      "  ReachabilityGraph : SimpleClassDiagrams",
+                     "  ManualOperation : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
                      "  core : CoreFormalism"]),
             ]))
+    """