90_core_formalism.mvc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. Element self
  17. self = model["model"][name]
  18. if (bool_not(is_physical_string(self))):
  19. return "Permissions has no string value"!
  20. if (bool_not(string_len(self) == 3)):
  21. return "Permissions string is not of correct length"!
  22. if (bool_or(cast_s2i(string_get(self, 0)) < 0, cast_s2i(string_get(self, 0)) > 2)):
  23. return "Owner permission is not in range [0, 2]"!
  24. if (bool_or(cast_s2i(string_get(self, 1)) < 0, cast_s2i(string_get(self, 1)) > 2)):
  25. return "Group permission is not in range [0, 2]"!
  26. if (bool_or(cast_s2i(string_get(self, 2)) < 0, cast_s2i(string_get(self, 2)) > 2)):
  27. return "Other permission is not in range [0, 2]"!
  28. return "OK"!
  29. $
  30. }
  31. SimpleAttribute Boolean {
  32. constraint = $
  33. String function constraint(model : Element, name : String):
  34. if (bool_not(is_physical_boolean(model["model"][name]))):
  35. return "Boolean has no bool value"!
  36. else:
  37. return "OK"!
  38. $
  39. }
  40. SimpleAttribute Natural {
  41. constraint = $
  42. String function constraint(model : Element, name : String):
  43. if (bool_not(is_physical_int(model["model"][name]))):
  44. return "Natural has no integer value"!
  45. elif (integer_lt(model["model"][name], 0)):
  46. return "Natural has negative value"!
  47. else:
  48. return "OK"!
  49. $
  50. }
  51. Class User {
  52. name : String
  53. password : String
  54. admin : Boolean
  55. }
  56. Class Group {
  57. name : String
  58. }
  59. Association ownedBy (Group, User) {}
  60. Association belongsTo (User, Group) {}
  61. Class Model {
  62. name : String
  63. location : String
  64. permissions : Permissions
  65. }
  66. Class TypeMapping : Model {}
  67. Association instanceOf (Model, Model) {
  68. }
  69. Association owner (Model, User) {
  70. target_lower_cardinality = 1
  71. target_upper_cardinality = 1
  72. }
  73. Association group (Model, Group) {
  74. target_lower_cardinality = 1
  75. target_upper_cardinality = 1
  76. }
  77. Class Transformation : Model {}
  78. Class ModelTransformation : Transformation {}
  79. Class ActionLanguage : Transformation {}
  80. Class ManualOperation : Transformation {}
  81. Association transformInput (Model, Transformation) {
  82. name : String
  83. }
  84. Association transformOutput (Transformation, Model) {
  85. name : String
  86. }
  87. Association tracability (Model, Model) {
  88. type : String
  89. }
  90. Association semantics (instanceOf, ActionLanguage) {
  91. target_lower_cardinality = 1
  92. target_upper_cardinality = 1
  93. }
  94. Association typing (instanceOf, TypeMapping) {
  95. target_lower_cardinality = 1
  96. target_upper_cardinality = 1
  97. }
  98. Class Service {
  99. name : String
  100. port : String
  101. }
  102. }
  103. export CoreFormalism to models/CoreFormalism