|
@@ -11,22 +11,78 @@ Boolean function main(model : Element):
|
|
|
Element attrs
|
|
|
Element attr_keys
|
|
|
String attr_key
|
|
|
+ String group
|
|
|
+ String elem
|
|
|
+ Integer loc
|
|
|
+ Integer text_loc
|
|
|
+ loc = 10
|
|
|
|
|
|
log("Classes:")
|
|
|
elements = allInstances(model, "abstract/Class")
|
|
|
+
|
|
|
while (set_len(elements) > 0):
|
|
|
class = set_pop(elements)
|
|
|
attr_keys = dict_keys(getAttributeList(model, class))
|
|
|
+ text_loc = 5
|
|
|
|
|
|
- while (set_len(attr_keys) > 0):
|
|
|
- attr_key = set_pop(attr_keys)
|
|
|
- log(((" " + attr_key) + " = ") + cast_v2s(read_attribute(model, class, attr_key)))
|
|
|
+ group = instantiate_node(model, "rendered/Group", "")
|
|
|
+ instantiate_attribute(model, group, "x", loc)
|
|
|
+ instantiate_attribute(model, group, "y", 10)
|
|
|
+ loc = loc + 200
|
|
|
+
|
|
|
+ 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(getInstantiatableAttributes(model, class, "abstract/AttributeLink")) * 20)
|
|
|
+ instantiate_attribute(model, elem, "width", 150)
|
|
|
+ instantiate_attribute(model, elem, "lineWidth", 2)
|
|
|
+ instantiate_attribute(model, elem, "lineColour", "black")
|
|
|
+ instantiate_attribute(model, elem, "fillColour", "white")
|
|
|
+ instantiate_link(model, "rendered/contains", "", group, elem)
|
|
|
+
|
|
|
+ String multiplicities
|
|
|
+ String lower_card
|
|
|
+ String upper_card
|
|
|
+ if (element_eq(read_attribute(model, class, "lower_cardinality"), read_root())):
|
|
|
+ lower_card = "*"
|
|
|
+ else:
|
|
|
+ lower_card = cast_v2s(read_attribute(model, class, "lower_cardinality"))
|
|
|
+ if (element_eq(read_attribute(model, class, "upper_cardinality"), read_root())):
|
|
|
+ upper_card = "*"
|
|
|
+ else:
|
|
|
+ upper_card = cast_v2s(read_attribute(model, class, "upper_cardinality"))
|
|
|
+ multiplicities = ((("[" + lower_card) + "..") + upper_card) + "]"
|
|
|
+
|
|
|
+ elem = instantiate_node(model, "rendered/Text", "")
|
|
|
+ instantiate_attribute(model, elem, "x", 5)
|
|
|
+ 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(list_read(string_split(class, "/"), 1), " " + multiplicities))
|
|
|
+ instantiate_link(model, "rendered/contains", "", group, elem)
|
|
|
+
|
|
|
+ elem = instantiate_node(model, "rendered/Line", "")
|
|
|
+ instantiate_attribute(model, elem, "x", 0)
|
|
|
+ instantiate_attribute(model, elem, "y", 20)
|
|
|
+ instantiate_attribute(model, elem, "targetX", 150)
|
|
|
+ instantiate_attribute(model, elem, "targetY", 20)
|
|
|
+ instantiate_attribute(model, elem, "lineWidth", 1)
|
|
|
+ instantiate_attribute(model, elem, "lineColour", "black")
|
|
|
+ instantiate_link(model, "rendered/contains", "", group, elem)
|
|
|
|
|
|
attrs = getInstantiatableAttributes(model, class, "abstract/AttributeLink")
|
|
|
attr_keys = dict_keys(attrs)
|
|
|
while (dict_len(attr_keys) > 0):
|
|
|
attr_key = set_pop(attr_keys)
|
|
|
+ elem = instantiate_node(model, "rendered/Text", "")
|
|
|
log(((" " + attr_key) + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
|
|
|
+ instantiate_attribute(model, elem, "x", 5)
|
|
|
+ instantiate_attribute(model, elem, "y", text_loc + 20)
|
|
|
+ instantiate_attribute(model, elem, "lineWidth", 1)
|
|
|
+ instantiate_attribute(model, elem, "lineColour", "black")
|
|
|
+ instantiate_attribute(model, elem, "text", (attr_key + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
|
|
|
+ instantiate_link(model, "rendered/contains", "", group, elem)
|
|
|
+ text_loc = text_loc + 15
|
|
|
|
|
|
log("")
|
|
|
|