Skip to main content

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.

Jump to: navigation, search

Difference between revisions of "Henshin/Units"

(Usage: Describe unit creation)
m (Unit creation in graphical editor: Visually separate screenshots)
Line 13: Line 13:
 
Then type the name of the desired rule or unit.
 
Then type the name of the desired rule or unit.
  
[[Image:Henshin_Units_Creation_GraphicalEditor.png|250px]][[Image:Henshin_Units_Add_Invocation.png|250px]]
+
[[Image:Henshin_Units_Creation_GraphicalEditor.png|250px]] [[Image:Henshin_Units_Add_Invocation.png|250px]]
  
 
=== Unit creation in tree-based editor ===
 
=== Unit creation in tree-based editor ===

Revision as of 06:47, 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.

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.

Henshin Units Creation GraphicalEditor.pngHenshin Units Add Invocation.png

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.

Henshin Units Creation TreeEditor.png

Multi-Units

Sequential Unit

Henshin Sequential Unit.png
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

Henshin Priority Unit.png
Number of sub-units
arbitrary (0..*)
Available Flags/Properties
none
Execution successful
tbd
Execution unsuccessful
tbd
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

Henshin Independent Unit.png
Number of sub-units
arbitrary (0..*)
Available Flags/Properties
none
Execution successful
tbd
Execution unsuccessful
tbd
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

Henshin Loop Unit.png
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

Henshin Iterated Unit.png
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

Henshin Conditional Unit.png
Number of sub-units
2 or 3
Available Flags/Properties
none
Execution successful
tbd
Execution unsuccessful
tbd
Control flow
tbd

Back to the top