123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- include "primitives.alh"
- include "modelling.alh"
- include "object_operations.alh"
- Boolean function main(model : Element):
- Element elements
- String class
- Element attrs
- Element attr_keys
- String attr_key
- String group
- String elem
- Integer loc
- Integer text_loc
- loc = 10
- Element locations_x
- Element locations_y
- locations_x = dict_create()
- locations_y = dict_create()
- elements = allInstances(model, "abstract/Class")
- while (set_len(elements) > 0):
- class = set_pop(elements)
- attr_keys = dict_keys(getAttributeList(model, class))
- text_loc = 5
- group = instantiate_node(model, "rendered/Group", "")
- instantiate_attribute(model, group, "x", loc)
- instantiate_attribute(model, group, "y", 10)
- dict_add(locations_x, class, loc)
- dict_add(locations_y, class, 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_attribute(model, elem, "arrow", False)
- 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", "")
- 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
- elements = allInstances(model, "abstract/Association")
- while (set_len(elements) > 0):
- class = set_pop(elements)
- attr_keys = dict_keys(getAttributeList(model, class))
- group = instantiate_node(model, "rendered/Group", "")
- instantiate_attribute(model, group, "x", 0)
- instantiate_attribute(model, group, "y", 0)
- elem = instantiate_node(model, "rendered/Line", "")
- instantiate_attribute(model, elem, "x", locations_x[readAssociationSource(model, class)])
- instantiate_attribute(model, elem, "y", locations_y[readAssociationSource(model, class)])
- instantiate_attribute(model, elem, "targetX", locations_x[readAssociationSource(model, class)])
- instantiate_attribute(model, elem, "targetY", locations_y[readAssociationDestination(model, class)])
- instantiate_attribute(model, elem, "lineWidth", 1)
- instantiate_attribute(model, elem, "lineColour", "black")
- instantiate_attribute(model, elem, "arrow", False)
- instantiate_link(model, "rendered/contains", "", group, elem)
- elem = instantiate_node(model, "rendered/Line", "")
- instantiate_attribute(model, elem, "x", locations_x[readAssociationSource(model, class)])
- instantiate_attribute(model, elem, "y", locations_y[readAssociationDestination(model, class)])
- instantiate_attribute(model, elem, "targetX", locations_x[readAssociationDestination(model, class)])
- instantiate_attribute(model, elem, "targetY", locations_y[readAssociationDestination(model, class)])
- instantiate_attribute(model, elem, "lineWidth", 1)
- instantiate_attribute(model, elem, "lineColour", "black")
- instantiate_attribute(model, elem, "arrow", True)
- instantiate_link(model, "rendered/contains", "", group, elem)
- while (set_len(attr_keys) > 0):
- attr_key = set_pop(attr_keys)
- log(((" " + attr_key) + " = ") + cast_v2s(read_attribute(model, class, attr_key)))
- return True!
|