Browse Source

Many fixes for manual transformations

Yentl Van Tendeloo 8 years ago
parent
commit
c4f4ec77f6
4 changed files with 55 additions and 17 deletions
  1. 2 0
      bootstrap/modelling.alc
  2. 46 13
      core/core_algorithm.alc
  3. 1 1
      core/core_formalism.mvc
  4. 6 3
      integration/test_mvc.py

+ 2 - 0
bootstrap/modelling.alc

@@ -64,6 +64,8 @@ String function model_add_edge(model : Element, name : String, source : String,
 		log("In link " + name)
 		log("In link " + name)
 		log("ERROR: destination of link unknown: " + destination)
 		log("ERROR: destination of link unknown: " + destination)
 		log("Source: " + source)
 		log("Source: " + source)
+		Integer i
+		i = 1/0
 		return ""!
 		return ""!
 
 
 	new_edge = create_edge(model["model"][source], model["model"][destination])
 	new_edge = create_edge(model["model"][source], model["model"][destination])

+ 46 - 13
core/core_algorithm.alc

@@ -112,6 +112,7 @@ Void function main():
 	instantiate_link(core, "owner", "", al_model, admin_user)
 	instantiate_link(core, "owner", "", al_model, admin_user)
 
 
 	// Add the Manual Operation formalism
 	// Add the Manual Operation formalism
+	log("Adding manual model")
 	Element manual
 	Element manual
 	String manual_model
 	String manual_model
 	manual = instantiate_model(scd)
 	manual = instantiate_model(scd)
@@ -122,6 +123,7 @@ Void function main():
 	instantiate_attribute(core, manual_model, "permissions", "221")
 	instantiate_attribute(core, manual_model, "permissions", "221")
 	instance_of = instantiate_link(core, "instanceOf", "", manual_model, scd_model)
 	instance_of = instantiate_link(core, "instanceOf", "", manual_model, scd_model)
 	instantiate_attribute(core, instance_of, "type_mapping", create_node())
 	instantiate_attribute(core, instance_of, "type_mapping", create_node())
+	log("Added manual model")
 
 
 	// Make necessary links for the formalism to the owners
 	// Make necessary links for the formalism to the owners
 	instantiate_link(core, "group", "", manual_model, admin_group)
 	instantiate_link(core, "group", "", manual_model, admin_group)
@@ -714,10 +716,14 @@ Void function user_function_skip_init(user_id : String):
 
 
 							trace_links = allOutgoingAssociationInstances(core, transformation_id, "tracability")
 							trace_links = allOutgoingAssociationInstances(core, transformation_id, "tracability")
 							merged_metamodel_id = ""
 							merged_metamodel_id = ""
+							log("Tracability links: " + cast_v2s(read_nr_out(trace_links)))
 							while (read_nr_out(trace_links) > 0):
 							while (read_nr_out(trace_links) > 0):
 								trace_link_id = set_pop(trace_links)
 								trace_link_id = set_pop(trace_links)
 								if (value_eq(read_attribute(core, trace_link_id, "type"), "operatesOn")):
 								if (value_eq(read_attribute(core, trace_link_id, "type"), "operatesOn")):
 									merged_metamodel_id = readAssociationDestination(core, trace_link_id)
 									merged_metamodel_id = readAssociationDestination(core, trace_link_id)
+								else:
+									output("Unknown tracability link: " + cast_v2s(read_attribute(core, trace_link_id, "type")))
+
 							if (merged_metamodel_id != ""):
 							if (merged_metamodel_id != ""):
 								merged_model = instantiate_model(get_full_model(merged_metamodel_id))
 								merged_model = instantiate_model(get_full_model(merged_metamodel_id))
 
 
@@ -735,7 +741,9 @@ Void function user_function_skip_init(user_id : String):
 
 
 								// 3) Transform
 								// 3) Transform
 
 
+								log("Start modify")
 								modify(merged_model, True)
 								modify(merged_model, True)
+								log("Modify finished")
 
 
 								// 4) Split in different files depending on type
 								// 4) Split in different files depending on type
 
 
@@ -755,7 +763,8 @@ Void function user_function_skip_init(user_id : String):
 									else:
 									else:
 										// Model exists, so we overwrite
 										// Model exists, so we overwrite
 										model_overwrite(split_off_model, get_model_id(outputs[key]))
 										model_overwrite(split_off_model, get_model_id(outputs[key]))
-
+							else:
+								output("Could not find merged metamodel")
 						else:
 						else:
 							output("Did not know how to interpret model of type " + exact_type)
 							output("Did not know how to interpret model of type " + exact_type)
 					else:
 					else:
@@ -992,23 +1001,35 @@ Void function user_function_skip_init(user_id : String):
 			Element merged_formalism
 			Element merged_formalism
 			String merged_formalism_id
 			String merged_formalism_id
 			String source_formalism_id
 			String source_formalism_id
-			String type_id
 			String tracability_link
 			String tracability_link
+			String type_id
+			String old_type_id
 
 
 			name = input()
 			name = input()
 			source = create_node()
 			source = create_node()
 			target = create_node()
 			target = create_node()
 			all_formalisms = create_node()
 			all_formalisms = create_node()
 
 
+			type_id = ""
+			old_type_id = ""
 			while (name != ""):
 			while (name != ""):
 				model_id = get_model_id(name)
 				model_id = get_model_id(name)
 				if (model_id != ""):
 				if (model_id != ""):
-					if (bool_not(set_in(source, model_id))):
-						set_add(source, model_id)
-						set_add(all_formalisms, create_tuple(name, get_full_model(model_id)))
-						output("Model added as source")
+					if (allow_read(user_id, model_id)):
+						if (bool_not(set_in(source, model_id))):
+							type_id = set_pop(allAssociationDestinations(core, model_id, "instanceOf"))
+							if (bool_or(old_type_id == "", type_id == old_type_id)):
+								old_type_id = type_id
+								set_add(source, model_id)
+								set_add(all_formalisms, create_tuple(name, get_full_model(model_id)))
+								output("Model added as source")
+							elif (old_type_id != type_id):
+								// Already have a previous type_id and now another: CLASH
+								output("Cannot add model as types not compatible with previous models; try again")
+						else:
+							output("Model already selected as source")
 					else:
 					else:
-						output("Model already selected as source")
+						output("Permission denied")
 				else:
 				else:
 					output("No such model; try again")
 					output("No such model; try again")
 				
 				
@@ -1019,12 +1040,21 @@ Void function user_function_skip_init(user_id : String):
 			while (name != ""):
 			while (name != ""):
 				model_id = get_model_id(name)
 				model_id = get_model_id(name)
 				if (model_id != ""):
 				if (model_id != ""):
-					if (bool_not(set_in(target, model_id))):
-						set_add(target, model_id)
-						set_add(all_formalisms, create_tuple(name, get_full_model(model_id)))
-						output("Model added as target")
+					if (allow_read(user_id, model_id)):
+						if (bool_not(set_in(target, model_id))):
+							type_id = set_pop(allAssociationDestinations(core, model_id, "instanceOf"))
+							if (bool_or(old_type_id == "", type_id == old_type_id)):
+								old_type_id = type_id
+								set_add(target, model_id)
+								set_add(all_formalisms, create_tuple(name, get_full_model(model_id)))
+								output("Model added as target")
+							elif (old_type_id != type_id):
+								// Already have a previous type_id and now another: CLASH
+								output("Cannot add model as types not compatible with previous models; try again")
+						else:
+							output("Model already selected as target")
 					else:
 					else:
-						output("Model already selected as target")
+						output("Permission denied")
 				else:
 				else:
 					output("No such model; try again")
 					output("No such model; try again")
 				
 				
@@ -1050,7 +1080,10 @@ Void function user_function_skip_init(user_id : String):
 				while (read_nr_out(all_formalisms) > 0):
 				while (read_nr_out(all_formalisms) > 0):
 					source_formalism_id = get_model_id(list_read(set_pop(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)
 					tracability_link = instantiate_link(core, "tracability", "", merged_formalism_id, source_formalism_id)
-					instantiate_attribute(core, tracability_link, "type", "operatesOn")
+					instantiate_attribute(core, tracability_link, "type", "merged")
+
+				tracability_link = instantiate_link(core, "tracability", "", model_id, merged_formalism_id)
+				instantiate_attribute(core, tracability_link, "type", "operatesOn")
 
 
 				// Extend metadata with info on source and target
 				// Extend metadata with info on source and target
 				String link
 				String link

+ 1 - 1
core/core_formalism.mvc

@@ -108,7 +108,7 @@ SimpleClassDiagrams CoreFormalism {
 
 
     Class ExternalTool : Transformation {}
     Class ExternalTool : Transformation {}
 
 
-    Class ManualTransformation : Transformation {}
+    Class ManualOperation : Transformation {}
 
 
     Association transformInput (Model, Transformation) {
     Association transformInput (Model, Transformation) {
         name : String
         name : String

+ 6 - 3
integration/test_mvc.py

@@ -1734,10 +1734,11 @@ class TestModelverseCore(unittest.TestCase):
                      "  PetriNets_Runtime : SimpleClassDiagrams",
                      "  PetriNets_Runtime : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  PetriNets : SimpleClassDiagrams",
                      "  pn_print : PetriNets_RAM",
                      "  pn_print : PetriNets_RAM",
-                     "  pn_design_to_runtime : PetriNets_RAM",
+                     "  pn_design_to_runtime : ManualOperation",
                      "  ManualOperation : SimpleClassDiagrams",
                      "  ManualOperation : SimpleClassDiagrams",
                      "  pn_runtime_to_design : PetriNets_RAM",
                      "  pn_runtime_to_design : PetriNets_RAM",
                      "  pn_step : PetriNets_RAM",
                      "  pn_step : PetriNets_RAM",
+                     "  __merged_pn_design_to_runtime : SimpleClassDiagrams",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  __merged_PetriNets_RAM : SimpleClassDiagrams",
                      "  PetriNets_RAM : SimpleClassDiagrams",
                      "  PetriNets_RAM : SimpleClassDiagrams",
                      "  my_pn : PetriNets",
                      "  my_pn : PetriNets",
@@ -1746,7 +1747,7 @@ class TestModelverseCore(unittest.TestCase):
                 "Ready for command...",
                 "Ready for command...",
                 # transformation_list
                 # transformation_list
                 set(["[ModelTransformation] pn_print : PetriNets_RAM",
                 set(["[ModelTransformation] pn_print : PetriNets_RAM",
-                     "[ModelTransformation] pn_design_to_runtime : PetriNets_RAM",
+                     "[ManualOperation] pn_design_to_runtime : ManualOperation",
                      "[ModelTransformation] pn_runtime_to_design : PetriNets_RAM",
                      "[ModelTransformation] pn_runtime_to_design : PetriNets_RAM",
                      "[ModelTransformation] pn_step : PetriNets_RAM"]),
                      "[ModelTransformation] pn_step : PetriNets_RAM"]),
                 "Ready for command...",
                 "Ready for command...",
@@ -1763,7 +1764,9 @@ class TestModelverseCore(unittest.TestCase):
                 "Which transformation do you want to execute?",
                 "Which transformation do you want to execute?",
                 "Which model to bind for source element PetriNets",
                 "Which model to bind for source element PetriNets",
                 "Which model to create for target element PetriNets_Runtime",
                 "Which model to create for target element PetriNets_Runtime",
-                "Transformation executed with result: True",
+                "Model loaded, ready for commands!",
+                "Use 'help' command for a list of possible commands",
+                "Please give your command.",
                 "Ready for command...",
                 "Ready for command...",
                 # transformation_execute (pn_step)
                 # transformation_execute (pn_step)
                 "Which transformation do you want to execute?",
                 "Which transformation do you want to execute?",