瀏覽代碼

Fixes to model transformations

Yentl Van Tendeloo 8 年之前
父節點
當前提交
cc9389b888
共有 1 個文件被更改,包括 14 次插入1 次删除
  1. 14 1
      bootstrap/core_algorithm.alc

+ 14 - 1
bootstrap/core_algorithm.alc

@@ -34,6 +34,8 @@ String function get_instanceOf_link(model_id : String, metamodel_id : String):
 		log("WARNING: multiple instanceOf relations were detected for this model; picking one at random!")
 	elif (read_nr_out(all_links) == 0):
 		log("ERROR: untyped model; crashing")
+		log("Instance model: " + cast_v2s(read_attribute(core, model_id, "name")))
+		log("Type model: " + cast_v2s(read_attribute(core, metamodel_id, "name")))
 	
 	choice = set_pop(all_links)
 
@@ -389,7 +391,14 @@ Element function execute_operation(operation_id : String, input_models : Element
 	// 3) Transform
 
 	if (exact_type == "ModelTransformation"):
-		result = transform(merged_model, get_full_model(operation_id, merged_metamodel_id))
+		trace_links = allOutgoingAssociationInstances(core, merged_metamodel_id, "tracability")
+		ramified_metamodel_id = ""
+		while (read_nr_out(trace_links) > 0):
+			trace_link_id = set_pop(trace_links)
+			if (value_eq(read_attribute(core, trace_link_id, "type"), "RAMified")):
+				ramified_metamodel_id = readAssociationDestination(core, trace_link_id)
+
+		result = transform(merged_model, get_full_model(operation_id, ramified_metamodel_id))
 	elif (exact_type == "ManualOperation"):
 		output("Please perform manual operation " + cast_v2s(read_attribute(core, operation_id, "name")))
 		modify(merged_model, True)
@@ -1253,6 +1262,10 @@ String function cmd_transformation_add_MT(user_id : String, source_models : Elem
 		tracability_link = instantiate_link(core, "tracability", "", model_id, merged_formalism_id)
 		instantiate_attribute(core, tracability_link, "type", "operatesOn")
 
+		// Add tracability links at this level
+		tracability_link = instantiate_link(core, "tracability", "", merged_formalism_id, ramified_metamodel_id)
+		instantiate_attribute(core, tracability_link, "type", "RAMified")
+
 		// Extend metadata with info on source and target
 		String link
 		String dst