render_SCD.alc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. include "primitives.alh"
  2. include "modelling.alh"
  3. include "object_operations.alh"
  4. Boolean function main(model : Element):
  5. log("Got model to render!")
  6. log("Classes:")
  7. Element elements
  8. String class
  9. Element attrs
  10. Element attr_keys
  11. String attr_key
  12. String group
  13. String elem
  14. Integer loc
  15. Integer text_loc
  16. loc = 10
  17. log("Classes:")
  18. elements = allInstances(model, "abstract/Class")
  19. while (set_len(elements) > 0):
  20. class = set_pop(elements)
  21. attr_keys = dict_keys(getAttributeList(model, class))
  22. text_loc = 5
  23. group = instantiate_node(model, "rendered/Group", "")
  24. instantiate_attribute(model, group, "x", loc)
  25. instantiate_attribute(model, group, "y", 10)
  26. loc = loc + 200
  27. elem = instantiate_node(model, "rendered/Rectangle", "")
  28. instantiate_attribute(model, elem, "x", 0)
  29. instantiate_attribute(model, elem, "y", 0)
  30. instantiate_attribute(model, elem, "height", 40 + set_len(getInstantiatableAttributes(model, class, "abstract/AttributeLink")) * 20)
  31. instantiate_attribute(model, elem, "width", 150)
  32. instantiate_attribute(model, elem, "lineWidth", 2)
  33. instantiate_attribute(model, elem, "lineColour", "black")
  34. instantiate_attribute(model, elem, "fillColour", "white")
  35. instantiate_link(model, "rendered/contains", "", group, elem)
  36. String multiplicities
  37. String lower_card
  38. String upper_card
  39. if (element_eq(read_attribute(model, class, "lower_cardinality"), read_root())):
  40. lower_card = "*"
  41. else:
  42. lower_card = cast_v2s(read_attribute(model, class, "lower_cardinality"))
  43. if (element_eq(read_attribute(model, class, "upper_cardinality"), read_root())):
  44. upper_card = "*"
  45. else:
  46. upper_card = cast_v2s(read_attribute(model, class, "upper_cardinality"))
  47. multiplicities = ((("[" + lower_card) + "..") + upper_card) + "]"
  48. elem = instantiate_node(model, "rendered/Text", "")
  49. instantiate_attribute(model, elem, "x", 5)
  50. instantiate_attribute(model, elem, "y", 3)
  51. instantiate_attribute(model, elem, "lineWidth", 1)
  52. instantiate_attribute(model, elem, "lineColour", "black")
  53. instantiate_attribute(model, elem, "text", string_join(list_read(string_split(class, "/"), 1), " " + multiplicities))
  54. instantiate_link(model, "rendered/contains", "", group, elem)
  55. elem = instantiate_node(model, "rendered/Line", "")
  56. instantiate_attribute(model, elem, "x", 0)
  57. instantiate_attribute(model, elem, "y", 20)
  58. instantiate_attribute(model, elem, "targetX", 150)
  59. instantiate_attribute(model, elem, "targetY", 20)
  60. instantiate_attribute(model, elem, "lineWidth", 1)
  61. instantiate_attribute(model, elem, "lineColour", "black")
  62. instantiate_link(model, "rendered/contains", "", group, elem)
  63. attrs = getInstantiatableAttributes(model, class, "abstract/AttributeLink")
  64. attr_keys = dict_keys(attrs)
  65. while (dict_len(attr_keys) > 0):
  66. attr_key = set_pop(attr_keys)
  67. elem = instantiate_node(model, "rendered/Text", "")
  68. log(((" " + attr_key) + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
  69. instantiate_attribute(model, elem, "x", 5)
  70. instantiate_attribute(model, elem, "y", text_loc + 20)
  71. instantiate_attribute(model, elem, "lineWidth", 1)
  72. instantiate_attribute(model, elem, "lineColour", "black")
  73. instantiate_attribute(model, elem, "text", (attr_key + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
  74. instantiate_link(model, "rendered/contains", "", group, elem)
  75. text_loc = text_loc + 15
  76. log("")
  77. log("Associations:")
  78. elements = allInstances(model, "abstract/Association")
  79. while (set_len(elements) > 0):
  80. class = set_pop(elements)
  81. attr_keys = dict_keys(getAttributeList(model, class))
  82. while (set_len(attr_keys) > 0):
  83. attr_key = set_pop(attr_keys)
  84. log(((" " + attr_key) + " = ") + cast_v2s(read_attribute(model, class, attr_key)))
  85. attrs = getInstantiatableAttributes(model, class, "abstract/AttributeLink")
  86. attr_keys = dict_keys(attrs)
  87. while (dict_len(attr_keys) > 0):
  88. attr_key = set_pop(attr_keys)
  89. log(((" " + attr_key) + " : ") + cast_v2s(list_read(string_split(attrs[attr_key], "/"), 1)))
  90. log("")
  91. return True!