Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Henshin/Units"
(→Priority Unit: Fill in missing information.) |
(→Independent Unit: Fill in missing information.) |
||
Line 81: | Line 81: | ||
: ''none'' | : ''none'' | ||
; Execution successful | ; Execution successful | ||
− | : | + | : one sub-unit succesful |
; Execution unsuccessful | ; Execution unsuccessful | ||
− | : | + | : no sub-unit successful |
; Control flow | ; Control flow | ||
: The sub-units are checked in nondeterministic order for executability. The first sub-unit found to be executable is executed. | : The sub-units are checked in nondeterministic order for executability. The first sub-unit found to be executable is executed. |
Revision as of 11:31, 3 March 2018
In Henshin, control flow is specified using units. Units have a fixed number of sub-units, allowing for arbitrary nesting. This article describes the available units.
Contents
Usage
Unit creation in graphical editor
To add a unit to a Henshin project in the graphical editor, first open the *.henshin_diagram file. Then select Unit from the Palette on the right of the window. Afterwards left-click any empty space of the Henshin diagram and choose the desired unit from the appearing menu.
If the selected unit is a Multi-Unit, some sub-units have to be added manually. Therefore select Invocation from the Palette and click on the according Multi-Unit. Then type the name of the desired rule or unit.
Unit creation in tree-based editor
To add a unit to a Henshin project in the tree-based editor, first open the *.henshin file. Then right-click on the parent Module. Select New Child and afterwards the desired unit from the context menu. After creation the units can be edited in their Properties view.
Multi-Units
Sequential Unit
- Number of sub-units
- arbitrary (0..*)
- Available Flags/Properties
- of type boolean
- strict
- rollback
- Execution successful
- if
- strict=true
- all sub-units successful
- strict=false
- at least one sub-unit successful or no sub-units
- Execution unsuccessful
- if
- strict=true
- one sub-unit unsuccessful
- strict=false
- none of a non-zero number of sub-units successful
- Control flow
- The sub-units are executed in the given order.
- strict=false, rollback=true/false
- If one of the sub-units cannot be executed, the next sub-unit is executed.
- strict=true, rollback=false
- If one of the sub-units cannot be executed, the execution stops.
- strict=true, rollback=true
- If one of the sub-units cannot be executed, the execution stops and previous executions are reverted.
Priority Unit
- Number of sub-units
- arbitrary (0..*)
- Available Flags/Properties
- none
- Execution successful
- one sub-unit successful
- Execution unsuccessful
- no sub-unit successful
- Control flow
- The sub-units are checked in the given order for executability. The first sub-unit found to be executable is executed.
Independent Unit
- Number of sub-units
- arbitrary (0..*)
- Available Flags/Properties
- none
- Execution successful
- one sub-unit succesful
- Execution unsuccessful
- no sub-unit successful
- Control flow
- The sub-units are checked in nondeterministic order for executability. The first sub-unit found to be executable is executed.
Unary Units
Loop Unit
- Number of sub-units
- 1
- Available Flags/Properties
- none
- Execution successful
- tbd
- Execution unsuccessful
- tbd
- Control flow
- The sub-unit is executed as often as it is executable.
Iterated Unit
- Number of sub-units
- 1
- Available Flags/Properties
- of type positive integer
- iterations
- of type boolean
- strict
- rollback
- Execution successful
- if
- strict=true
- all iterations successful
- strict=false
- at least one iteration successful
- Execution unsuccessful
- if
- strict=true
- one iteration unsuccessful
- strict=false
- no iteration successful
- Control flow
- The sub-unit is executed as often as specified in the iterations property.
- strict=false, rollback=true/false
- If one of the iterations cannot be executed, the next iteration is executed.
- strict=true, rollback=false
- If one of the iterations cannot be executed, the execution stops.
- strict=true, rollback=true
- If one of the iterations cannot be executed, the execution stops and previous executions are reverted.
Conditional Unit
- Number of sub-units
- 2 or 3
- Available Flags/Properties
- none
- Execution successful
- tbd
- Execution unsuccessful
- tbd
- Control flow
- tbd