|
@@ -395,9 +395,6 @@ String function export_typing(model : Element, name : String):
|
|
|
instance_of = instantiate_link(core, "instanceOf", "", result, get_entry_id("formalisms/TypeMapping"))
|
|
|
instantiate_link(core, "semantics", "", instance_of, get_entry_id("models/conformance_mv"))
|
|
|
|
|
|
- log("Created type mapping " + result)
|
|
|
- log(" for " + name)
|
|
|
-
|
|
|
return result!
|
|
|
|
|
|
Void function model_create(model : Element, name : String, type_id : String, kind : String):
|
|
@@ -459,61 +456,6 @@ Void function model_overwrite(model : Element, model_id : String, metamodel_id :
|
|
|
|
|
|
return!
|
|
|
|
|
|
-Void function model_overwrite2(model : Element, model_id : String, metamodel_id : String):
|
|
|
- // TODO this should be more elegant than just hiding the old elements
|
|
|
-
|
|
|
- String location
|
|
|
- String instanceOf_link
|
|
|
-
|
|
|
- log("Rendering1: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
- location = "models/" + cast_id2s(model)
|
|
|
- export_node(location, model["model"])
|
|
|
- log("Rendering2: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
-
|
|
|
- // Change location in meta-data
|
|
|
- unset_attribute(core, model_id, "location")
|
|
|
- instantiate_attribute(core, model_id, "location", location)
|
|
|
- log("Changed location of model to " + location)
|
|
|
- log("Changing model " + model_id)
|
|
|
- log("With name: " + cast_v2s(read_attribute(core, model_id, "name")))
|
|
|
- log("Rendering3: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
-
|
|
|
- // Update the instanceOf relation of the context in which we are working
|
|
|
- String choice
|
|
|
- choice = get_instanceOf_link(model_id, metamodel_id)
|
|
|
- log("Rendering4: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
- if (element_neq(choice, read_root())):
|
|
|
- // There was a link, so we remove it
|
|
|
-
|
|
|
- // First remove the type mapping it referred to
|
|
|
- Element tl
|
|
|
- tl = allAssociationDestinations(core, choice, "typing")
|
|
|
- String e
|
|
|
- log("Rendering5: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
- while (set_len(tl) > 0):
|
|
|
- e = set_pop(tl)
|
|
|
- model_delete_element(core, e)
|
|
|
- log("Deleting type mapping... " + cast_id2s(e))
|
|
|
- log("Rendering6: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
-
|
|
|
- // Now delete the element itself
|
|
|
- model_delete_element(core, choice)
|
|
|
- log("Deleting choice itself " + choice)
|
|
|
- log("Rendering7: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
-
|
|
|
- // Create a new instanceOf relation now
|
|
|
- String instance_of
|
|
|
- log("Created new link")
|
|
|
- log("Rendering8: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
- instance_of = instantiate_link(core, "instanceOf", "", model_id, metamodel_id)
|
|
|
- instantiate_link(core, "semantics", "", instance_of, get_entry_id("models/conformance_mv"))
|
|
|
- log("Update semantics")
|
|
|
- instantiate_link(core, "typing", "", instance_of, export_typing(model, full_name(model_id)))
|
|
|
- log("Rendering9: " + cast_id2s(get_full_model(get_entry_id("rendered/formalisms/MM_render"), get_entry_id("formalisms/MM_render"))))
|
|
|
- log("Update typing")
|
|
|
-
|
|
|
- return!
|
|
|
-
|
|
|
Boolean function check_conformance(model_id : String):
|
|
|
// TODO check if it actually conforms, considering that instanceOf link
|
|
|
// --> in-depth check
|
|
@@ -1123,10 +1065,44 @@ String function cmd_transformation_between(source_name : String, target_name : S
|
|
|
else:
|
|
|
return "Model not found: " + source_name!
|
|
|
|
|
|
-String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
+String function cmd_model_rendered(model_name : String, mapper_name : String):
|
|
|
+ Element trace_links
|
|
|
+ String rendered
|
|
|
+ String trace_link_id
|
|
|
+ String allowed_rendered
|
|
|
+ Element trace_links_2
|
|
|
+ String trace_link_2_id
|
|
|
+
|
|
|
+ allowed_rendered = "Success: "
|
|
|
+ log("Find outgoing for AS " + model_name)
|
|
|
+ trace_links = allOutgoingAssociationInstances(core, get_entry_id(model_name), "tracability")
|
|
|
+ while (set_len(trace_links) > 0):
|
|
|
+ trace_link_id = set_pop(trace_links)
|
|
|
+ if (value_eq(read_attribute(core, trace_link_id, "type"), "CS_perceptualized")):
|
|
|
+ rendered = readAssociationDestination(core, trace_link_id)
|
|
|
+ log("Got rendered version: " + rendered)
|
|
|
+
|
|
|
+ log("Find outgoing for CS " + rendered)
|
|
|
+ trace_links_2 = allOutgoingAssociationInstances(core, rendered, "tracability")
|
|
|
+ while (set_len(trace_links_2) > 0):
|
|
|
+ trace_link_2_id = set_pop(trace_links_2)
|
|
|
+ log("Checking " + trace_link_2_id)
|
|
|
+ log("Read destination " + readAssociationDestination(core, trace_link_2_id))
|
|
|
+ log("Expect " + get_entry_id(mapper_name))
|
|
|
+ log("Name: " + cast_v2s(read_attribute(core, readAssociationDestination(core, trace_link_2_id), "name")))
|
|
|
+ log("Mapper name: " + mapper_name)
|
|
|
+ if (value_eq(read_attribute(core, readAssociationDestination(core, trace_link_2_id), "name"), mapper_name)):
|
|
|
+ log("Check link type: " + cast_v2s(read_attribute(core, trace_link_2_id, "type")))
|
|
|
+ if (value_eq(read_attribute(core, trace_link_2_id, "type"), "CS_mapper")):
|
|
|
+ log("Found rendered: " + rendered)
|
|
|
+ allowed_rendered = string_join(allowed_rendered, read_attribute(core, rendered, "name")) + "\n"
|
|
|
+ log("Unusable link")
|
|
|
+
|
|
|
+ return allowed_rendered!
|
|
|
+
|
|
|
+String function cmd_model_render(model_name : String, mapper_name : String, rendered_name : String):
|
|
|
String model_ID
|
|
|
String mapper_ID
|
|
|
- String rendered_name
|
|
|
String tracability_name
|
|
|
Element inputs
|
|
|
Element output_map
|
|
@@ -1138,6 +1114,10 @@ String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
|
|
|
model_ID = get_entry_id(model_name)
|
|
|
|
|
|
+ log("Render AS: " + model_name)
|
|
|
+ log("Mapper: " + mapper_name)
|
|
|
+ log("Render CS: " + rendered_name)
|
|
|
+
|
|
|
if (model_ID != ""):
|
|
|
mapper_ID = get_entry_id(mapper_name)
|
|
|
|
|
@@ -1146,8 +1126,7 @@ String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
if (allow_read(current_user_id, mapper_ID)):
|
|
|
// Everything is fine; start the actual operation
|
|
|
// Find metamodel to render to
|
|
|
- rendered_name = "rendered/" + model_name
|
|
|
- tracability_name = "tracability/" + model_name
|
|
|
+ tracability_name = "tracability/" + rendered_name
|
|
|
|
|
|
// Take the abstract syntax model and the previously rendered model
|
|
|
inputs = dict_create()
|
|
@@ -1183,22 +1162,10 @@ String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
return "Tracability model not typed by Tracability metamodel: " + tracability_name!
|
|
|
|
|
|
// Do the operation itself!
|
|
|
- log("PERCEPTUALIZING...")
|
|
|
result = execute_operation(mapper_ID, inputs, tracability_model)
|
|
|
- log("Generated perceptualized model")
|
|
|
|
|
|
// Overwrite the previous rendered model
|
|
|
- log("RENDERED:")
|
|
|
- log("Model name: " + rendered_name)
|
|
|
- log("Entry_id: " + get_entry_id(rendered_name))
|
|
|
model_overwrite(result["rendered"], get_entry_id(rendered_name), get_entry_id(output_map["rendered"]))
|
|
|
- // TODO the following line causes rendering to fail:
|
|
|
- // nonetheless, it is necessary to allow the GUI to link back to the AS elements
|
|
|
- log("ABSTRACT:")
|
|
|
- log("Model name: " + model_name)
|
|
|
- log("Entry_id: " + get_entry_id(model_name))
|
|
|
- //model_overwrite2(result["abstract"], get_entry_id(model_name), get_entry_id(output_map["abstract"]))
|
|
|
- log("Overwrite OK")
|
|
|
|
|
|
// Tracability updated in-place
|
|
|
model_overwrite(tracability_model, get_entry_id(tracability_name), get_entry_id("formalisms/Tracability"))
|
|
@@ -1206,6 +1173,18 @@ String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
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
|
|
|
+ log("Create TL CS_perceptualized from " + model_name)
|
|
|
+ log(" to " + rendered_name)
|
|
|
+ tr_link = instantiate_link(core, "tracability", "", get_entry_id(model_name), get_entry_id(rendered_name))
|
|
|
+ instantiate_attribute(core, tr_link, "type", "CS_perceptualized")
|
|
|
+ log("Create TL CS_mapper from " + rendered_name)
|
|
|
+ log(" to " + mapper_name)
|
|
|
+ log(" ID " + get_entry_id(mapper_name))
|
|
|
+ tr_link = instantiate_link(core, "tracability", "", get_entry_id(rendered_name), 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"])))!
|
|
|
else:
|
|
@@ -1217,6 +1196,13 @@ String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
else:
|
|
|
return "Model not found: " + model_name!
|
|
|
|
|
|
+ //trace_links = allOutgoingAssociationInstances(core, operation_id, "tracability")
|
|
|
+ //merged_metamodel_id = ""
|
|
|
+ //while (set_len(trace_links) > 0):
|
|
|
+ // trace_link_id = set_pop(trace_links)
|
|
|
+ // if (value_eq(read_attribute(core, trace_link_id, "type"), "operatesOn")):
|
|
|
+ // merged_metamodel_id = readAssociationDestination(core, trace_link_id)
|
|
|
+
|
|
|
String function cmd_transformation_execute(transformation_name : String, source_models : Element, target_models : Element):
|
|
|
// Execute a transformation, whatever type it is
|
|
|
// First we detect the type, so we know how to prepare for invocation
|
|
@@ -2150,7 +2136,9 @@ Void function user_function_skip_init(user_id : String):
|
|
|
elif (cmd == "transformation_between"):
|
|
|
output(cmd_transformation_between(single_input("Source type?"), single_input("Target type?")))
|
|
|
elif (cmd == "model_render"):
|
|
|
- output(cmd_model_render(single_input("Model name?"), single_input("Mapper name?")))
|
|
|
+ output(cmd_model_render(single_input("Model name?"), single_input("Mapper name?"), single_input("Rendered name?")))
|
|
|
+ elif (cmd == "model_rendered"):
|
|
|
+ output(cmd_model_rendered(single_input("Model name?"), single_input("Mapper name?")))
|
|
|
elif (cmd == "transformation_execute"):
|
|
|
output(cmd_transformation_execute(single_input("Transformation name?"), dict_input("Source models?"), dict_input("Target models?")))
|
|
|
elif (cmd == "verify"):
|