Wodel applied to BPEL. [BPEL Ecore]
Identifier mutation.
Replaces a variable identifier by another of the same type [isv]:
v1 = select one Variable where {type <> null}
v2 = select one Variable where {self <> v1 and type = v1->type and name <> v1.name}
modify v1 with {copy (name, v2.name)}
Concurrent activity mutation.
Changes the createInstance attribute from an inbound message activity to no [aci]:
modify one Receive where {createInstance = true} with {createInstance = false}
Replaces a sequential forEach activity by a parallel one [afp]:
modify one ForEach where {parallel = false} with {parallel = true}
Replaces a sequence activity by a flow activity [asf]:
retype one Sequence as Flow
Changes the isolated attribute of a scope to no [ais]:
modify one Scope where {isolated = true} with {isolated = false}
Non-concurrent activity mutation.
Deletes an activity [ael]:
remove one Activity
Deletes an elseif element from an if activity [aie1]:
if1 = select one If where {elseIf <> null}
remove one ElseIf from if1->elseIf
Deletes an else element from an if activity [aie2]:
if2 = select one If where {else <> null}
remove one Else from if2->else
Replaces a while activity by a repeatUntil activity [awr1]:
retype one While as RepeatUntil
Replaces a repeatUntil activity by a while activity [awr2]:
retype one RepeatUntil as While
Removes the joinCondition attribute from an activity [ajc]:
modify one Activity with {unset(suppressJoinFailure)}
Exchanges the order of two child activities in a sequence activity [asi]:
s2 = select one Sequence where {activities <> null}
a1 = select one Activity in s2->activities
modify s2 with {activities -= a1, activities += a1}
Removes an onMessage element from a pick activity [apm]:
p1 = select one Pick where {messages <> null}
m1 = select one OnMessage in p1->messages
remove m1
Removes the onAlarm element from a pick activity [apa1]:
p2 = select one Pick where {alarm <> null}
a2 = select one OnAlarm in p2->alarm
remove a2
Removes the onAlarm element from an event handler [apa2]:
ev1 = select one EventHandler where {alarm <> null}
a3 = select one OnAlarm in ev1->alarm
remove a3
Exception and event mutation.
Removes a catch element from a fault handler [xmf1]:
fh1 = select one FaultHandler where {catchAll <> null}
c1 = select one CatchAll in fh1->catchAll
remove c1
Removes the catchAll element from a fault handler [xmf2]:
fh2 = select one FaultHandler where {catch <> null}
c2 = select one Catch in fh2->catch
remove c2
Removes a compensation handler definition [xmc]:
remove one CompensationHandler
Removes a termination handler definition [xmt]:
remove one TerminationHandler
Replaces the fault thrown by a throw activity [xtf]:
t1 = select one Throw where {faultVariable <> null}
fv1 = select one Variable in t1->faultVariable
fv2 = select one Variable where {self <> fv1}
modify t1 with {faultVariable -= fv1, faultVariable += fv2}
Removes a rethrow activity [xer]:
remove one Rethrow
Removes an onEvent element from an event handler [xee]:
ev2 = select one EventHandler where {events <> null}
event = select one OnEvent in ev2->events
remove event
Here you can download all these examples of Wodel applied to BPEL.
BPEL samples .zip
BPEL samples .tar.gz
Acknowledgements
This work has been funded by the Spanish Ministry of Science (RTI2018-095255-B-I00, project "MASSIVE") and the R&D programme of Madrid (P2018/TCS-4314, project "FORTE").