ECT has built-in support for defining and executing rule-based reconfigurations. This document describes how to use the reconfiguration tools.
A reconfiguration rule is a high-level description of a set of primitive reconfiguration steps. Rules have names and are saved in ordinary *.reo files. To add, remove or edit rules, open a *.reo file in the graphical Reo editor, click on the background panel, open the Properties view and click on the Reconfiguration tab. The following screenshot shows this user interface.
If you select one of the rules in the list, the associated rule actions will be highlighted in the editor. An action is an annotation to an element in a connector or network. A rule is basically just a set of actions. An example reconfiguration rule is depicted in the following screenshot.
Different colors mean different actions. Green indicates that an element is created by the rule. Red means that it is deleted. The default color indicates that the element is not changed by the rule. The above example rule replaces a single FIFO by two FIFOs. To set the action for an element (for the currently selected rule), select the element and open again the Reconfiguration tab in the Properties view. Now the view looks as in the following screenshot.
Rules can be applied in two different modes: either local or global. If you add or edit a rule, you can specify whether a rule should be exported, making it globally available. If it is not exported, it is local. Local rules are available only within in a single *.reo file, and they are applied exactly where they are defined. Global rules are those rules that are externally defined, i.e. in other currently opened *.reo files.
To apply local or global reconfiguration rules, open the reconfiguration tab for the module again (see first screenshot) and choose whether you want to apply a local or a global rule. Then select one of the rules in the list and click on Apply.
Local and global rule applications have different execution semantics. A local rule is applied exactly where it is defined. The reconfiguration engine first checks whether any negative application conditions can be matched. If yes, the rule cannot be applied. It then tries to match elements that are marked for deletion. If there are such elements and the engine cannot match them to existing elements, the rule cannot be applied. If none of the preconditions is violated, the engine first removes all elements that are matched by the delete patterns. It then adds the elements that are marked for creation.
Applying global rules is a bit different. Since global rules are defined externally, they cannot be applied where they were defined, since this would effectively change the rule itself. Global rules are defined in separate *.reo files and they are applied to the complete content of another file. Moreover, global rules are applied for all found matches. That means wherever the rule pattern is found, the rule is applied.
- Support for joining nodes / connectors (introduce a join action).
- Additional application conditions, e.g. "node has no further source / sink ends" or "match state" for FIFOs.