|
|
@@ -14,14 +14,29 @@ Boolean function main(model : Element):
|
|
|
Integer text_loc
|
|
|
loc = 10
|
|
|
|
|
|
+ Element to_remove
|
|
|
+ String elem_to_remove
|
|
|
Element groups
|
|
|
- groups = dict_create()
|
|
|
-
|
|
|
Element class_types
|
|
|
Element metamodel
|
|
|
metamodel = model["metamodel"]
|
|
|
String class_type
|
|
|
|
|
|
+ // Construct our own kind of tracability
|
|
|
+ Element cs_to_as
|
|
|
+ Element as_to_cs
|
|
|
+ String asid
|
|
|
+ cs_to_as = dict_create()
|
|
|
+ as_to_cs = dict_create()
|
|
|
+ groups = allInstances(model, "rendered/Group")
|
|
|
+ while (set_len(groups) > 0):
|
|
|
+ group = set_pop(groups)
|
|
|
+ asid = read_attribute(model, group, "__asid")
|
|
|
+ dict_add(cs_to_as, group, "abstract/" + asid)
|
|
|
+ dict_add(as_to_cs, "abstract/" + asid, group)
|
|
|
+
|
|
|
+ // Now render everything
|
|
|
+ groups = dict_create()
|
|
|
class_types = allInstances(metamodel, "Class")
|
|
|
while (set_len(class_types) > 0):
|
|
|
class_type = set_pop(class_types)
|
|
|
@@ -37,13 +52,13 @@ Boolean function main(model : Element):
|
|
|
y = 10
|
|
|
|
|
|
// Check if there is already an associated element
|
|
|
- if (set_len(allOutgoingAssociationInstances(model, class, "TracabilityClass")) > 0):
|
|
|
+ if (dict_in(as_to_cs, class)):
|
|
|
// Yes, but is it still clean?
|
|
|
Element related_groups
|
|
|
Boolean dirty
|
|
|
dirty = False
|
|
|
|
|
|
- related_groups = allAssociationDestinations(model, class, "TracabilityClass")
|
|
|
+ related_groups = as_to_cs[class]
|
|
|
while (set_len(related_groups) > 0):
|
|
|
group = set_pop(related_groups)
|
|
|
if (value_eq(read_attribute(model, group, "dirty"), True)):
|
|
|
@@ -58,21 +73,19 @@ Boolean function main(model : Element):
|
|
|
dict_add(groups, class, group)
|
|
|
continue!
|
|
|
else:
|
|
|
- related_groups = allAssociationDestinations(model, class, "TracabilityClass")
|
|
|
- Element to_remove
|
|
|
- String elem_to_remove
|
|
|
- while (set_len(related_groups) > 0):
|
|
|
- group = set_pop(related_groups)
|
|
|
- to_remove = allAssociationDestinations(model, group, "rendered/contains")
|
|
|
- x = create_value(read_attribute(model, group, "x"))
|
|
|
- y = create_value(read_attribute(model, group, "y"))
|
|
|
- while (set_len(to_remove) > 0):
|
|
|
- elem_to_remove = set_pop(to_remove)
|
|
|
- if (read_type(model, elem_to_remove) == "rendered/Group"):
|
|
|
- set_add(to_remove, elem_to_remove)
|
|
|
- else:
|
|
|
- model_delete_element(model, elem_to_remove)
|
|
|
- model_delete_element(model, group)
|
|
|
+ group = as_to_cs[class]
|
|
|
+ group = set_pop(related_groups)
|
|
|
+ to_remove = allAssociationDestinations(model, group, "rendered/contains")
|
|
|
+ x = create_value(read_attribute(model, group, "x"))
|
|
|
+ y = create_value(read_attribute(model, group, "y"))
|
|
|
+
|
|
|
+ while (set_len(to_remove) > 0):
|
|
|
+ elem_to_remove = set_pop(to_remove)
|
|
|
+ if (read_type(model, elem_to_remove) == "rendered/Group"):
|
|
|
+ set_add(to_remove, elem_to_remove)
|
|
|
+ else:
|
|
|
+ model_delete_element(model, elem_to_remove)
|
|
|
+ model_delete_element(model, group)
|
|
|
|
|
|
attr_keys = dict_keys(getAttributeList(model, class))
|
|
|
text_loc = 5
|
|
|
@@ -87,7 +100,7 @@ Boolean function main(model : Element):
|
|
|
elem = instantiate_node(model, "rendered/Rectangle", "")
|
|
|
instantiate_attribute(model, elem, "x", 0)
|
|
|
instantiate_attribute(model, elem, "y", 0)
|
|
|
- instantiate_attribute(model, elem, "height", 40 + set_len(geteAttributeList(model, class)) * 20)
|
|
|
+ instantiate_attribute(model, elem, "height", 40 + set_len(getAttributeList(model, class)) * 20)
|
|
|
instantiate_attribute(model, elem, "width", 150)
|
|
|
instantiate_attribute(model, elem, "lineWidth", 2)
|
|
|
instantiate_attribute(model, elem, "lineColour", "black")
|
|
|
@@ -99,7 +112,7 @@ Boolean function main(model : Element):
|
|
|
instantiate_attribute(model, elem, "y", 3)
|
|
|
instantiate_attribute(model, elem, "lineWidth", 1)
|
|
|
instantiate_attribute(model, elem, "lineColour", "black")
|
|
|
- instantiate_attribute(model, elem, "text", string_join(class, " : " + list_read(string_split(read_type(model, class)), 1)))
|
|
|
+ instantiate_attribute(model, elem, "text", string_join(class, " : " + cast_v2s(list_read(string_split(read_type(model, class), "/"), 1))))
|
|
|
instantiate_link(model, "rendered/contains", "", group, elem)
|
|
|
|
|
|
elem = instantiate_node(model, "rendered/Line", "")
|
|
|
@@ -125,8 +138,6 @@ Boolean function main(model : Element):
|
|
|
instantiate_link(model, "rendered/contains", "", group, elem)
|
|
|
text_loc = text_loc + 15
|
|
|
|
|
|
- instantiate_link(model, "TracabilityClass", "", class, group)
|
|
|
-
|
|
|
// Flush all associations
|
|
|
elements = allInstances(model, "rendered/ConnectingLine")
|
|
|
while (set_len(elements) > 0):
|