Importation allows reusing a model in another by placing all its states and transitions in a state of the importing model. That state of the importing model is called importation state. An importation state is not allowed to have substates prior to importation (and is thus a leaf state). After importation is done, that state becomes a non-importation state.
After importation, some of the importing model's elements must be
changed to reflect the new model with more states and transitions. For
example, the GUIDs of the states in the imported model are modified so
that the new GUIDs still uniquely identify those states after
importation. An implementation of DCharts could choose a prefix and
add it to the head of all the original GUIDs in the imported model.
The (children) function must be changed, since all the states of
the imported model become substates of the importation state (and the
top-level states become its children). The transitions in the imported
model are added to the
set of the importing model, with the GUIDs
of their
and
properties accordingly changed. Other GUIDs
in the imported model must be modified in a similar way.
Importation is a dynamic operation. It is done at run-time when the imported model is needed. This allows recursive importation, where a model explicitly or implicitly imports itself. A theoretically infinite state hierarchy can be created in this way.
The imported model is forbidden to transition to the states of the importing model. This breaks the modularity of the imported model. To interact with the importing model, the imported model should send (i.e., broadcast) events that trigger transitions in the importing model. After the imported model is merged with the importing model, there is no distinction between transitions in the importing model and the imported model any more. An event may be handled by any transition in the combined transition set.
The concept of leaf states becomes relative when importation is
considered. Leaf state may import another model. Since the
importation is done dynamically, it is possible that
is a leaf
state before a transition is fired, while it becomes non-leaf after
that because of an importation. It is assumed that notation
or simply
returns whether or not
is leaf at
a certain point in time (
).
At any time in a simulation or execution, an importation state is always a leaf state. (Be reminded that after a submodel is imported into it, it is no longer called importation state.)