Entity: NamedElement 101 43 null * abstract name String 3 false true false Entity: Transition 38 164 NamedElement * Entity: Place 231 166 NamedElement * Entity: State 467 19 null * abstract name String 3 false false false Entity: HyperEdge 384 126 State * Entity: Basic 493 134 State * Entity: Compound 647 88 State * abstract Entity: AND 596 197 Compound * Entity: OR 657 200 Compound * orId String 3 false true false Association: Transition Place 0 101 165 232 169 0 postp pret Association: Transition Place 0 98 185 232 187 0 prep postt Association: State State 0 469 22 469 52 0 next rnext 402 22 403 51 Association: Compound State -1 703 88 552 24 0 contains rcontains 703 26 Generalisation: NamedElement Transition 94 165 104 81 Generalisation: NamedElement Place 273 166 238 81 Generalisation: State HyperEdge 448 126 470 56 Generalisation: State Basic 504 135 501 56 Generalisation: State Compound 648 96 538 57 541 92 Generalisation: Compound AND 636 198 650 112 Generalisation: Compound OR 712 201 711 111 Entity: Statechart 411 209 null * Association: Statechart AND -1 474 217 597 202 1 topState null Constraint: null true HyperEdge->isUnique(name) HyperEdge false Constraint: null true Basic->isUnique(name) Basic false GeneralUseCase: initialise Constraint: null true Basic->exists( b | b.name = name & OR->exists( r | r.name = name & r.orId = name & b : r.contains ) ) Place initialise false Constraint: null true HyperEdge->exists( h | h.name = name ) Transition initialise false Constraint: t : postt null HyperEdge[t.name] : Basic[name].next Place initialise false Constraint: p : postp null Basic[p.name] : HyperEdge[name].next Transition initialise false GeneralUseCase: pn2sc Constraint: q : prep r : postp & prep.size = 1 & postp.size = 1 & ( q.pret /\ r.pret )->size() = 0 & ( q.postt /\ r.postt )->size() = 0 OR->exists( p | p.name = q.name + "_OR_" + r.name & p.orId = q.name + "_OR_" + r.name & OR[q.name].contains <: p.contains & OR[r.name].contains <: p.contains & r.pret <: q.pret & r.postt <: q.postt & q.name = p.name & r->isDeleted() & self->isDeleted() & ( "OR on " + p.name )->display() ) Transition pn2sc false Constraint: p1 : prep prep.size > 1 & prep->forAll( p2 | p1.pret = p2.pret & p1.postt = p2.postt ) AND->exists( a | OR->exists( p | p.name = "AND1_" + self.name & a : p.contains & OR[prep.name] <: a.contains & p.orId = "AND1_" + self.name & a.name = "a1_" + self.name & p1.name = p.name ) ) & ( prep - Set{p1} )->isDeleted() & prep = Set{p1} & ( "AND-pre on " + self.name )->display() Transition pn2sc false Constraint: p1 : postp postp.size > 1 & postp->forAll( p2 | p1.pret = p2.pret & p1.postt = p2.postt ) AND->exists( a | OR->exists( p | p.name = "AND2_" + self.name & a : p.contains & OR[postp.name] <: a.contains & p.orId = "AND2_" + self.name & a.name = "a2_" + self.name & p1.name = p.name ) ) & ( postp - Set{p1} )->isDeleted() & postp = Set{p1} & ( "AND-post on " + self.name )->display() Transition pn2sc false GeneralUseCase: cleanup Constraint: contains.size = 0 null self->isDeleted() OR cleanup false Constraint: v = OR->select( rcontains.size = 0 ) v.size = 1 & ox : v AND->exists( a | a.name = "__TOPSTATE" & ox : a.contains ) null cleanup false Constraint: w = AND->select( rcontains.size = 0 ) w.size = 1 & ax : w Statechart->exists( s | s.topState = ax ) null cleanup false