render_SCD.alc 5.2 KB

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