Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Henshin/Units"
(→Conditional Unit: Fill in missing information.) |
(Change style of uniform unit description.) |
||
Line 30: | Line 30: | ||
[[Image:Henshin_Sequential_Unit.png|right]] | [[Image:Henshin_Sequential_Unit.png|right]] | ||
− | + | * '''Number of sub-units:''' arbitrary (0..*) | |
− | : arbitrary (0..*) | + | * '''Available Flags/Properties:''' strict, rollback (both of type boolean) |
− | + | * '''Execution successful if:''' | |
− | : of type boolean | + | ** '''strict=true:''' all sub-units successful |
− | + | ** '''strict=false:''' at least one sub-unit successful or no sub-units existing | |
− | + | * '''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. | |
− | + | ||
− | : | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | : The sub-units are executed in the given order. | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Priority Unit === | === Priority Unit === | ||
Line 61: | Line 47: | ||
[[Image:Henshin_Priority_Unit.png|right]] | [[Image:Henshin_Priority_Unit.png|right]] | ||
− | + | * '''Number of sub-units:''' arbitrary (0..*) | |
− | : arbitrary (0..*) | + | * '''Available Flags/Properties:''' ''none'' |
− | + | * '''Execution successful if:''' one sub-unit successful | |
− | : ''none'' | + | * '''Execution unsuccessful if:''' 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. | |
− | : one sub-unit successful | + | |
− | + | ||
− | : no sub-unit successful | + | |
− | + | ||
− | : The sub-units are checked in the given order for executability. The first sub-unit found to be executable is executed. | + | |
=== Independent Unit === | === Independent Unit === | ||
Line 76: | Line 57: | ||
[[Image:Henshin_Independent_Unit.png|right]] | [[Image:Henshin_Independent_Unit.png|right]] | ||
− | + | * '''Number of sub-units:''' arbitrary (0..*) | |
− | : arbitrary (0..*) | + | * '''Available Flags/Properties:''' ''none'' |
− | + | * '''Execution successful:''' one sub-unit succesful | |
− | : ''none'' | + | * '''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. | |
− | : one sub-unit succesful | + | |
− | + | ||
− | : no sub-unit successful | + | |
− | + | ||
− | : The sub-units are checked in nondeterministic order for executability. The first sub-unit found to be executable is executed. | + | |
== Unary Units == | == Unary Units == | ||
Line 93: | Line 69: | ||
[[Image:Henshin_Loop_Unit.png|right]] | [[Image:Henshin_Loop_Unit.png|right]] | ||
− | + | * '''Number of sub-units:''' 1 | |
− | : 1 | + | * '''Available Flags/Properties:''' ''none'' |
− | + | * '''Execution successful:''' always | |
− | : ''none'' | + | * '''Execution unsuccessful:''' never |
− | + | * '''Control flow:''' The sub-unit is executed as often as it is executable. | |
− | : always | + | |
− | + | ||
− | : never | + | |
− | + | ||
− | : The sub-unit is executed as often as it is executable. | + | |
=== Iterated Unit === | === Iterated Unit === | ||
Line 108: | Line 79: | ||
[[Image:Henshin_Iterated_Unit.png|right]] | [[Image:Henshin_Iterated_Unit.png|right]] | ||
− | + | * '''Number of sub-units:''' 1 | |
− | : 1 | + | * '''Available Flags/Properties:''' iterations (integer), strict, rollback (both of type boolean) |
− | + | * '''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. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | : | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | : The sub-unit is executed as often as specified in the ''iterations'' property. | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Conditional Unit === | === Conditional Unit === | ||
Line 141: | Line 96: | ||
[[Image:Henshin_Conditional_Unit.png|right]] | [[Image:Henshin_Conditional_Unit.png|right]] | ||
− | + | * '''Number of sub-units:''' 2 or 3 | |
− | : 2 or 3 | + | * '''Available Flags/Properties:''' ''none'' |
− | + | * '''Execution successful if:''' ''if'' unit and ''then'' unit are successful or ''if'' unit is unsuccessful while ''then'' unit is successful or not present. | |
− | : ''none'' | + | * '''Execution unsuccessful if:''' ''if'' unit is successful while ''then'' unit is unsuccessful or ''if'' unit and ''then'' unit are unsuccessful. |
− | + | * '''Control flow:''' If a match for the ''if'' unit can be found, the ''then'' unit is executed. Otherwise, if present, the ''else'' unit is executed. | |
− | : ''if'' unit and ''then'' unit are successful or ''if'' unit is unsuccessful while ''then'' unit is successful or not present. | + | |
− | + | ||
− | : ''if'' unit is successful while ''then'' unit is unsuccessful or ''if'' unit and ''then'' unit are unsuccessful. | + | |
− | + | ||
− | : If a match for the ''if'' unit can be found, the ''then'' unit is executed. Otherwise, if present, the ''else'' unit is executed. | + |
Revision as of 14:39, 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: strict, rollback (both of type boolean)
- Execution successful if:
- strict=true: all sub-units successful
- strict=false: at least one sub-unit successful or no sub-units existing
- 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 if: one sub-unit successful
- Execution unsuccessful if: 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: always
- Execution unsuccessful: never
- Control flow: The sub-unit is executed as often as it is executable.
Iterated Unit
- Number of sub-units: 1
- Available Flags/Properties: iterations (integer), strict, rollback (both of type boolean)
- 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 if: if unit and then unit are successful or if unit is unsuccessful while then unit is successful or not present.
- Execution unsuccessful if: if unit is successful while then unit is unsuccessful or if unit and then unit are unsuccessful.
- Control flow: If a match for the if unit can be found, the then unit is executed. Otherwise, if present, the else unit is executed.