Behavior/GeneralControlFlowPN [ Rules ]

[ Top ] [ Behavior ] [ Rules ]

SUMMARY

Transform a SysML GeneralControlFlow into its HiLeS Petri Net elements. ($Rev: 443 $)

DESCRIPTION

This transformation is for all ControlFlows except the ones leaving a DecisionNode, and the ones leaving/arriving Fork and Join Nodes

SEE ALSO

DOMAIN

SPECIFICATION

        relation GeneralControlFlow
        {
            checkonly domain SysML cf:ControlFlow {
                activity = a:Activity{},
                name = cfn,
                source = cfs:ActivityNode{},
                target = cft:ActivityNode{},
            }
            enforce domain HiLeS t:Transition {
                PetriNet = pn:PetriNet{},
                name = cfn,
            }
            enforce domain HiLeS ain:Arc {
                PetriNet = pn:PetriNet{},
                to_node = t,
                from_node = ainfrom:Node{},
            }
            enforce domain HiLeS aout:Arc {
                PetriNet = pn:PetriNet{},
                from_node = t,
                to_node = aoutto:Node{},
            }
            when {
                ActivityPetriNet(a, pn, arch);
                ( (not cfs->isTypeOf(DecisionNode))
                   and (not cfs->isTypeOf(JoinNode))
                   and (not cfs->isTypeOf(ForkNode))
                   and (not cft->isTypeOf(JoinNode))
                   and (not cft->isTypeOf(ForkNode))
                )
            }
            where {
                if cfs->isTypeOf(CallBehaviorAction) then
                    CallBehaviorPN(node, p1, p2, ainfrom, t1, t2, a1, a4, a6, a3, a5)
                else
                    if cfs->isTypeOf(SysML:!CallBehaviorAction) then
                        CallOperationPN(node, p1, p2, ainfrom, t1, t2, a1, a4, a6, a3, a5)
                    else
                        ainfrom ::= cf.source;
                    endif
                endif
                if cft->isTypeOf(CallBehaviorAction) then
                    CallBehaviorPN(node, aoutto, p2, p3, t1, t2, a1, a4, a6, a3, a5)
                else
                    if cft->isTypeOf(CallBehaviorAction) then
                        CallOperationPN(node, aoutto, p2, p3, t1, t2, a1, a4, a6, a3, a5)
                    else
                        aoutto ::= cf.target;
                    endif
                endif
            }
 *