| context Flowchart { | |
| constraint MustHaveOneStart { | |
| check { | |
| var numberOfStartNodes = self.nodes.select(n|n.isStart()).size(); | |
| return numberOfStartNodes == 1; | |
| } | |
| message : "There must be precisely 1 starting node, but there are " + numberOfStartNodes | |
| } | |
| constraint MustHaveAtLeastOneFinal { | |
| check { | |
| var numberOfFinalNodes = self.nodes.select(n|n.isFinal()).size(); | |
| return numberOfFinalNodes >= 1; | |
| } | |
| message : "There must be at least 1 final node, but there are " + numberOfFinalNodes | |
| } | |
| } | |
| operation Flowchart!Node isStart() : Boolean { | |
| return self.incoming.isEmpty(); | |
| } | |
| operation Flowchart!Node isFinal() : Boolean { | |
| return self.outgoing.isEmpty(); | |
| } |