From 80beadfe088566db3054a7f8179691b81b409cc4 Mon Sep 17 00:00:00 2001 From: Joeri Exelmans Date: Thu, 12 Sep 2024 15:37:31 +0200 Subject: [PATCH] PlantUML: Also render 'RAMifies' links between attributes --- experiments/exp_scd.py | 2 +- renderer/plantuml.py | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/experiments/exp_scd.py b/experiments/exp_scd.py index c8e4e10..d9a2e51 100644 --- a/experiments/exp_scd.py +++ b/experiments/exp_scd.py @@ -174,7 +174,7 @@ def main(): print(plantuml.render_package("Meta-Model", plantuml.render_class_diagram(state, dsl_mm_id))) print(plantuml.render_package("RAMified Meta-Model", plantuml.render_class_diagram(state, ramified_mm_id))) - # Render ramification traceability links + # Render RAMification traceability links print(plantuml.render_trace_ramifies(state, dsl_mm_id, ramified_mm_id)) # Render host graph diff --git a/renderer/plantuml.py b/renderer/plantuml.py index 5a10c6a..abfdff7 100644 --- a/renderer/plantuml.py +++ b/renderer/plantuml.py @@ -106,20 +106,21 @@ def render_trace_ramifies(state, mm, ramified_mm): mm_scd = scd.SCD(mm, state) ramified_mm_scd = scd.SCD(ramified_mm, state) - # output = ( - # render_package("original", render_class_diagram(state, mm)) - # + '\n' - # + render_package("RAMified", render_class_diagram(state, ramified_mm)) - # ) - output = "" - # output += "\n" - + # Render RAMifies-edges between classes for ram_name, ram_class_node in ramified_mm_scd.get_classes().items(): original_class, = bottom.read_outgoing_elements(ram_class_node, ramify.RAMIFIES_LABEL) original_name = mm_scd.get_class_name(original_class) - output += f"\n{make_id(ram_class_node)} ..> {make_id(original_class)} #line:green;text:green : RAMifies " + output += f"\n{make_id(ram_class_node)} ..> {make_id(original_class)} #line:green;text:green : RAMifies" + + # and between attributes + for (ram_attr_name, ram_attr_edge) in od.get_attributes(bottom, ram_class_node): + orig_attr_edge, = bottom.read_outgoing_elements(ram_attr_edge, ramify.RAMIFIES_LABEL) + orig_class_node = bottom.read_edge_source(orig_attr_edge) + # dirty AF: + orig_attr_name = mm_scd.get_class_name(orig_attr_edge)[len(original_name)+1:] + output += f"\n{make_id(ram_class_node)}::{ram_attr_name} ..> {make_id(orig_class_node)}::{orig_attr_name} #line:green;text:green : RAMifies" return output @@ -142,12 +143,13 @@ def render_trace_conformance(state, m, mm): def render_trace_match(state, mapping): bottom = Bottom(state) + class_type = od.get_scd_mm_class_node(bottom) output = "" for pattern_el, host_el in mapping.items(): # only render 'match'-edges between objects (= those elements where the type of the type is 'Class'): - if od.get_type(bottom, od.get_type(bottom, pattern_el)) == od.get_scd_mm_class_node(bottom): + if od.get_type(bottom, od.get_type(bottom, pattern_el)) == class_type: output += f"\n{make_id(pattern_el)} ..> {make_id(host_el)} #line:grey;text:grey : matchedWith" return output