90_core_formalism.mvc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 Entry {
  62. name : String
  63. permissions : Permissions
  64. }
  65. Class Folder : Entry {
  66. }
  67. Association contains (Folder, Entry) {}
  68. Class Model : Entry {
  69. location : String
  70. }
  71. Class TypeMapping : Model {}
  72. Association instanceOf (Model, Model) {
  73. }
  74. Association owner (Model, User) {
  75. target_lower_cardinality = 1
  76. target_upper_cardinality = 1
  77. }
  78. Association group (Model, Group) {
  79. target_lower_cardinality = 1
  80. target_upper_cardinality = 1
  81. }
  82. Class Transformation : Model {}
  83. Class ModelTransformation : Transformation {}
  84. Class ActionLanguage : Transformation {}
  85. Class ManualOperation : Transformation {}
  86. Association transformInput (Model, Transformation) {
  87. name : String
  88. }
  89. Association transformOutput (Transformation, Model) {
  90. name : String
  91. }
  92. Association tracability (Model, Model) {
  93. type : String
  94. }
  95. Association semantics (instanceOf, ActionLanguage) {
  96. target_lower_cardinality = 1
  97. target_upper_cardinality = 1
  98. }
  99. Association typing (instanceOf, TypeMapping) {
  100. target_lower_cardinality = 1
  101. target_upper_cardinality = 1
  102. }
  103. Class Service {
  104. name : String
  105. port : String
  106. }
  107. }
  108. export CoreFormalism to models/CoreFormalism