include "primitives.alh" include "modelling.alh" include "object_operations.alh" Boolean function main(model : Element): log("Got model to render!") log("Classes:") Element elements String class 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 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("") log("Associations:") elements = allInstances(model, "abstract/Association") while (set_len(elements) > 0): class = set_pop(elements) attr_keys = dict_keys(getAttributeList(model, class)) while (set_len(attr_keys) > 0): attr_key = set_pop(attr_keys) log(((" " + attr_key) + " = ") + cast_v2s(read_attribute(model, class, attr_key))) attrs = getInstantiatableAttributes(model, class, "abstract/AttributeLink") attr_keys = dict_keys(attrs) while (dict_len(attr_keys) > 0): attr_key = set_pop(attr_keys) log(((" " + attr_key) + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1))) log("") return True!