|
@@ -110,9 +110,11 @@ Element function get_full_model(model_id : String, metamodel_id : String):
|
|
|
dict_add(m, "metamodel", mm)
|
|
|
|
|
|
if (element_neq(choice, read_root())):
|
|
|
- if (set_len(allAssociationDestinations(core, choice, "typing")) == 1):
|
|
|
+ Element types
|
|
|
+ types = allAssociationDestinations(core, choice, "typing")
|
|
|
+ if (set_len(types) == 1):
|
|
|
// Add the preferred original type mapping
|
|
|
- set_type_mapping(m, import_node(read_attribute(core, set_pop(allAssociationDestinations(core, choice, "typing")), "location")))
|
|
|
+ set_type_mapping(m, import_node(read_attribute(core, set_pop(types), "location")))
|
|
|
else:
|
|
|
// Start from scratch
|
|
|
new_type_mapping(m)
|
|
@@ -639,7 +641,7 @@ Element function execute_operation(operation_id : String, input_models : Element
|
|
|
while (set_len(iter) > 0):
|
|
|
edge = set_pop(iter)
|
|
|
dict_add(output_metamodels, read_attribute(core, edge, "name"), full_name(readAssociationDestination(core, edge)))
|
|
|
-
|
|
|
+
|
|
|
// 1) Find merged metamodel
|
|
|
|
|
|
exact_type = read_type(core, operation_id)
|
|
@@ -835,7 +837,6 @@ Boolean function enact_action(pm : Element, element : String, prefix : String):
|
|
|
Void function enact_PM(pm : Element, prefix : String):
|
|
|
Element worklist
|
|
|
String element
|
|
|
- String start
|
|
|
String type
|
|
|
Boolean result
|
|
|
Element tuple
|
|
@@ -1100,6 +1101,12 @@ String function cmd_model_render(model_name : String, mapper_name : String, rend
|
|
|
Element out_links
|
|
|
String link
|
|
|
|
|
|
+ String ID_rendered_M
|
|
|
+ String ID_rendered_MM
|
|
|
+ String ID_SCD
|
|
|
+ String ID_tracability_MM
|
|
|
+ String ID_tracability_M
|
|
|
+
|
|
|
model_ID = get_entry_id(model_name)
|
|
|
|
|
|
if (model_ID != ""):
|
|
@@ -1124,24 +1131,33 @@ String function cmd_model_render(model_name : String, mapper_name : String, rend
|
|
|
link = set_pop(out_links)
|
|
|
dict_add(output_map, read_attribute(core, link, "name"), full_name(readAssociationDestination(core, link)))
|
|
|
|
|
|
- if (get_entry_id(rendered_name) == ""):
|
|
|
+ ID_rendered_MM = get_entry_id(output_map["rendered"])
|
|
|
+ ID_SCD = get_entry_id("formalisms/SimpleClassDiagrams")
|
|
|
+ ID_tracability_MM = get_entry_id("formalisms/Tracability")
|
|
|
+ ID_tracability_M = get_entry_id(tracability_name)
|
|
|
+ ID_rendered_M = get_entry_id(rendered_name)
|
|
|
+
|
|
|
+ if (ID_rendered_M == ""):
|
|
|
// Instantiate
|
|
|
Element rendered
|
|
|
- rendered = get_full_model(get_entry_id(output_map["rendered"]), get_entry_id("formalisms/SimpleClassDiagrams"))
|
|
|
+ rendered = get_full_model(ID_rendered_MM, ID_SCD)
|
|
|
if (element_eq(rendered, read_root())):
|
|
|
return "Rendered metamodel doesn't conform to formalisms/SimpleClassDiagrams"!
|
|
|
|
|
|
rendered_model = instantiate_model(rendered)
|
|
|
|
|
|
- model_create(rendered_model, rendered_name, get_entry_id(output_map["rendered"]), "Model")
|
|
|
+ model_create(rendered_model, rendered_name, ID_rendered_MM, "Model")
|
|
|
|
|
|
// Tracability model won't exist either
|
|
|
- tracability_model = instantiate_model(get_full_model(get_entry_id("formalisms/Tracability"), get_entry_id("formalisms/SimpleClassDiagrams")))
|
|
|
- model_create(tracability_model, tracability_name, get_entry_id("formalisms/Tracability"), "Model")
|
|
|
+ tracability_model = instantiate_model(get_full_model(ID_tracability_MM, ID_SCD))
|
|
|
+ model_create(tracability_model, tracability_name, ID_tracability_MM, "Model")
|
|
|
+
|
|
|
+ ID_rendered_M = get_entry_id(rendered_name)
|
|
|
+ ID_tracability_M = get_entry_id(tracability_name)
|
|
|
|
|
|
else:
|
|
|
// Read out tracability model
|
|
|
- tracability_model = get_full_model(get_entry_id(tracability_name), get_entry_id("formalisms/Tracability"))
|
|
|
+ tracability_model = get_full_model(ID_tracability_M, ID_tracability_MM)
|
|
|
if (element_eq(tracability_model, read_root())):
|
|
|
return "Tracability model not typed by Tracability metamodel: " + tracability_name!
|
|
|
|
|
@@ -1149,23 +1165,24 @@ String function cmd_model_render(model_name : String, mapper_name : String, rend
|
|
|
result = execute_operation(mapper_ID, inputs, tracability_model)
|
|
|
|
|
|
// Overwrite the previous rendered model
|
|
|
- model_overwrite(result["rendered"], get_entry_id(rendered_name), get_entry_id(output_map["rendered"]))
|
|
|
+ model_overwrite(result["rendered"], ID_rendered_M, ID_rendered_MM)
|
|
|
|
|
|
// Tracability updated in-place
|
|
|
- model_overwrite(tracability_model, get_entry_id(tracability_name), get_entry_id("formalisms/Tracability"))
|
|
|
- tracability_model = get_full_model(get_entry_id(tracability_name), get_entry_id("formalisms/Tracability"))
|
|
|
+ model_overwrite(tracability_model, ID_tracability_M, ID_tracability_MM)
|
|
|
if (element_eq(tracability_model, read_root())):
|
|
|
return "Tracability model not typed by Tracability metamodel: " + tracability_name!
|
|
|
|
|
|
// Link all information in the megamodel
|
|
|
String tr_link
|
|
|
- tr_link = instantiate_link(core, "tracability", "", get_entry_id(model_name), get_entry_id(rendered_name))
|
|
|
+ tr_link = instantiate_link(core, "tracability", "", get_entry_id(model_name), ID_rendered_M)
|
|
|
instantiate_attribute(core, tr_link, "type", "CS_perceptualized")
|
|
|
- tr_link = instantiate_link(core, "tracability", "", get_entry_id(rendered_name), get_entry_id(mapper_name))
|
|
|
+ tr_link = instantiate_link(core, "tracability", "", ID_rendered_M, get_entry_id(mapper_name))
|
|
|
instantiate_attribute(core, tr_link, "type", "CS_mapper")
|
|
|
|
|
|
- // Also output the resulting model
|
|
|
- return "Success: " + JSON_print(get_full_model(get_entry_id(rendered_name), get_entry_id(output_map["rendered"])))!
|
|
|
+ // Output the resulting model
|
|
|
+ String value
|
|
|
+ value = JSON_print(result["rendered"])
|
|
|
+ return ("Success: " + value) !
|
|
|
else:
|
|
|
return "Permission denied to model: " + mapper_name!
|
|
|
else:
|