90_core_formalism.mvc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import models/SimpleClassDiagrams as SimpleClassDiagrams
  2. include "primitives.alh"
  3. SimpleClassDiagrams CoreFormalism {
  4. SimpleAttribute String {
  5. name = "String"
  6. constraint = $
  7. String function constraint(model : Element, name : String):
  8. if (bool_not(is_physical_string(model["model"][name]))):
  9. return "String has no string value"!
  10. else:
  11. return "OK"!
  12. $
  13. }
  14. SimpleAttribute Permissions {
  15. name = "Permissions"
  16. constraint = $
  17. String function constraint(model : Element, name : String):
  18. Element self
  19. self = model["model"][name]
  20. if (bool_not(is_physical_string(self))):
  21. return "Permissions has no string value"!
  22. if (bool_not(string_len(self) == 3)):
  23. return "Permissions string is not of correct length"!
  24. if (bool_or(cast_integer(string_get(self, 0)) < 0, cast_integer(string_get(self, 0)) > 2)):
  25. return "Owner permission is not in range [0, 2]"!
  26. if (bool_or(cast_integer(string_get(self, 1)) < 0, cast_integer(string_get(self, 1)) > 2)):
  27. return "Group permission is not in range [0, 2]"!
  28. if (bool_or(cast_integer(string_get(self, 2)) < 0, cast_integer(string_get(self, 2)) > 2)):
  29. return "Other permission is not in range [0, 2]"!
  30. return "OK"!
  31. $
  32. }
  33. SimpleAttribute Boolean {
  34. name = "Boolean"
  35. constraint = $
  36. String function constraint(model : Element, name : String):
  37. if (bool_not(is_physical_boolean(model["model"][name]))):
  38. return "Boolean has no bool value"!
  39. else:
  40. return "OK"!
  41. $
  42. }
  43. SimpleAttribute Natural {
  44. name = "Natural"
  45. constraint = $
  46. String function constraint(model : Element, name : String):
  47. if (bool_not(is_physical_int(model["model"][name]))):
  48. return "Natural has no integer value"!
  49. elif (integer_lt(model["model"][name], 0)):
  50. return "Natural has negative value"!
  51. else:
  52. return "OK"!
  53. $
  54. }
  55. Class User {
  56. name = "User"
  57. name : String
  58. password : String
  59. admin : Boolean
  60. }
  61. Class Group {
  62. name = "Group"
  63. name : String
  64. }
  65. Association ownedBy (Group, User) {
  66. name = "ownedBy"
  67. }
  68. Association belongsTo (User, Group) {
  69. name = "belongsTo"
  70. }
  71. Class Entry {
  72. name = "Entry"
  73. name : String
  74. permissions : Permissions
  75. }
  76. Class Folder : Entry {
  77. name = "Folder"
  78. }
  79. Association contains (Folder, Entry) {
  80. name = "contains"
  81. }
  82. Class Model : Entry {
  83. name = "Model"
  84. location : String
  85. }
  86. Class TypeMapping : Model {
  87. name = "TypeMapping"
  88. }
  89. Association instanceOf (Model, Model) {
  90. name = "instanceOf"
  91. }
  92. Association owner (Model, User) {
  93. name = "owner"
  94. target_lower_cardinality = 1
  95. target_upper_cardinality = 1
  96. }
  97. Association group (Model, Group) {
  98. name = "group"
  99. target_lower_cardinality = 1
  100. target_upper_cardinality = 1
  101. }
  102. Class Transformation : Model {
  103. name = "Transformation"
  104. }
  105. Class ModelTransformation : Transformation {
  106. name = "ModelTransformation"
  107. }
  108. Class ActionLanguage : Transformation {
  109. name = "ActionLanguage"
  110. }
  111. Class ManualOperation : Transformation {
  112. name = "ManualOperation"
  113. }
  114. Association transformInput (Model, Transformation) {
  115. name = "transformInput"
  116. name : String
  117. }
  118. Association transformOutput (Transformation, Model) {
  119. name = "transformOutput"
  120. name : String
  121. }
  122. Association tracability (Model, Model) {
  123. name = "tracability"
  124. type : String
  125. }
  126. Association semantics (instanceOf, ActionLanguage) {
  127. name = "semantics"
  128. target_lower_cardinality = 1
  129. target_upper_cardinality = 1
  130. }
  131. Association typing (instanceOf, TypeMapping) {
  132. name = "typing"
  133. target_lower_cardinality = 1
  134. target_upper_cardinality = 1
  135. }
  136. Class Service {
  137. name = "Service"
  138. name : String
  139. port : String
  140. }
  141. }
  142. export CoreFormalism to models/CoreFormalism