Переглянути джерело

PlantUML: Also render 'RAMifies' links between attributes

Joeri Exelmans 1 рік тому
батько
коміт
80beadfe08
2 змінених файлів з 13 додано та 11 видалено
  1. 1 1
      experiments/exp_scd.py
  2. 12 10
      renderer/plantuml.py

+ 1 - 1
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

+ 12 - 10
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