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!