core_formalism.mvc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import models/SimpleClassDiagrams as SimpleClassDiagrams
  2. include "primitives.alh"
  3. SimpleClassDiagrams CoreFormalism {
  4. SimpleAttribute String {
  5. constraint = $
  6. String function constraint(model : Element, name : String):
  7. if (bool_not(is_physical_string(model["model"][name]))):
  8. return "String has no string value"!
  9. else:
  10. return "OK"!
  11. $
  12. }
  13. SimpleAttribute Permissions {
  14. constraint = $
  15. String function constraint(model : Element, name : String):
  16. if (bool_not(is_physical_string(model["model"][name]))):
  17. return "Permissions has no string value"!
  18. else:
  19. return "OK"!
  20. $
  21. }
  22. SimpleAttribute Boolean {
  23. constraint = $
  24. String function constraint(model : Element, name : String):
  25. if (bool_not(is_physical_boolean(model["model"][name]))):
  26. return "Boolean has no bool value"!
  27. else:
  28. return "OK"!
  29. $
  30. }
  31. SimpleAttribute Natural {
  32. constraint = $
  33. String function constraint(model : Element, name : String):
  34. if (bool_not(is_physical_int(model["model"][name]))):
  35. return "Natural has no integer value"!
  36. elif (integer_lt(model["model"][name], 0)):
  37. return "Natural has negative value"!
  38. else:
  39. return "OK"!
  40. $
  41. }
  42. SimpleAttribute TypeMapping {
  43. constraint = $
  44. String function constraint(model : Element, name : String):
  45. Element self
  46. self = model["model"][name]
  47. if (has_value(self)):
  48. return "TypeMapping cannot have a value for root node!"!
  49. Element keys
  50. String key
  51. keys = dict_keys(self)
  52. while (read_nr_out(keys) > 0):
  53. key = set_pop(keys)
  54. if (bool_not(is_physical_string(key))):
  55. return ("Key on type mapping is not a string: " + cast_e2s(key))!
  56. elif (bool_not(is_physical_string(self[key]))):
  57. return ("Value on type mapping is not a string for key " + cast_e2s(key))!
  58. return "OK"!
  59. $
  60. }
  61. Class User {
  62. name : String
  63. password : String
  64. admin : Boolean
  65. }
  66. Class Group {
  67. name : String
  68. }
  69. Association ownedBy (Group, User) {}
  70. Association belongsTo (User, Group) {}
  71. Class Model {
  72. name : String
  73. location : String
  74. permissions : Permissions
  75. }
  76. Association instanceOf (Model, Model) {
  77. type_mapping : TypeMapping
  78. }
  79. Association owner (Model, User) {
  80. target_lower_cardinality = 1
  81. target_upper_cardinality = 1
  82. }
  83. Association group (Model, Group) {
  84. target_lower_cardinality = 1
  85. target_upper_cardinality = 1
  86. }
  87. Class Transformation : Model {
  88. name : String
  89. location : String
  90. }
  91. Class ModelTransformation : Transformation {}
  92. Class ActionLanguage : Transformation {}
  93. Class ExternalTool : Transformation {}
  94. Class ManualTransformation : Transformation {}
  95. Association transformInput (Model, Transformation) {
  96. name : String
  97. }
  98. Association transformOutput (Transformation, Model) {
  99. name : String
  100. }
  101. Association tracability (Model, Model) {
  102. type : String
  103. }
  104. }
  105. export CoreFormalism to models/CoreFormalism