petrinet_ports.mvc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. include "primitives.alh"
  2. SimpleClassDiagrams PetriNetsPorts {
  3. SimpleAttribute Integer{
  4. constraint = $
  5. String function constraint(model : Element, name : String):
  6. if (is_physical_int(model["model"][name])):
  7. return "OK"!
  8. else:
  9. return "Integer has non-integer value"!
  10. $
  11. }
  12. SimpleAttribute String{
  13. constraint = $
  14. String function constraint(model : Element, name : String):
  15. if (is_physical_string(model["model"][name])):
  16. return "OK"!
  17. else:
  18. return "String has non-string value"!
  19. $
  20. }
  21. SimpleAttribute PlaceOrTransition{
  22. constraint = $
  23. String function constraint(model : Element, name : String):
  24. if (is_physical_string(model["model"][name])):
  25. if (bool_or(value_eq(model["model"][name], "transition"), value_eq(model["model"][name], "place"))):
  26. return "OK"!
  27. else:
  28. return "PlaceOrTransition does not contain either 'place' or 'transition'"!
  29. else:
  30. return "PlaceOrTransition has non-string value"!
  31. $
  32. }
  33. Class Positionable {
  34. x : Integer
  35. y : Integer
  36. }
  37. Class Named {
  38. name : String
  39. }
  40. Class Boundary : Named, Positionable {}
  41. Class Place : Positionable, Named {
  42. nbTokens : Integer
  43. }
  44. Class Transition : Positionable, Named {}
  45. Class Port : Named, Positionable {
  46. sourceType : PlaceOrTransition
  47. targetType : PlaceOrTransition
  48. }
  49. Association Has1 (Boundary, Place) {}
  50. Association Has2 (Boundary, Transition) {}
  51. Association Has3 (Boundary, Port) {}
  52. Association P2T (Place, Transition) {}
  53. Association T2P (Transition, Place) {}
  54. Association PortTransition (Port, Transition) {}
  55. Association PortPlace (Port, Place) {}
  56. }