|
@@ -395,6 +395,9 @@ 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):
|
|
@@ -456,6 +459,61 @@ 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
|
|
@@ -1088,8 +1146,8 @@ 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) + mapper_name
|
|
|
- tracability_name = ("tracability/" + model_name) + mapper_name
|
|
|
+ rendered_name = "rendered/" + model_name
|
|
|
+ tracability_name = "tracability/" + model_name
|
|
|
|
|
|
// Take the abstract syntax model and the previously rendered model
|
|
|
inputs = dict_create()
|
|
@@ -1108,7 +1166,7 @@ String function cmd_model_render(model_name : String, mapper_name : String):
|
|
|
Element rendered
|
|
|
rendered = get_full_model(get_entry_id(output_map["rendered"]), get_entry_id("formalisms/SimpleClassDiagrams"))
|
|
|
if (element_eq(rendered, read_root())):
|
|
|
- return "Rendered metamodel cannot conform to formalisms/SimpleClassDiagrams"!
|
|
|
+ return "Rendered metamodel doesn't conform to formalisms/SimpleClassDiagrams"!
|
|
|
|
|
|
rendered_model = instantiate_model(rendered)
|
|
|
|
|
@@ -1125,11 +1183,22 @@ 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"]))
|
|
|
- model_overwrite(result["abstract"], get_entry_id(model_name), get_entry_id(output_map["abstract"]))
|
|
|
+ // 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"))
|