The page is the first concept directly related to the user interface that you will manipulate. It will contain or reference everything displayed in the user interface. Using the Sirius integration, each page will create a new tab in the Properties view.
The semantic candidate expression will have access to two variables
self
and
input
from the view. The result of the semantic candidate expression will be accessible as the new context in the variable
self
for the other expressions of the page and the concept under the page.
The label expression and the precondition expression (along the expressions in the semantic validation rules) will have access to both the variable
input
and the variable
self
which will now contain the value of the semantic candidate expression of the page.
If you have a very complex meta-model, you cannot possibly create the definition of your user interface widgets after widgets. In order to handle those situation, you need more powerful mechanisms. Using the same approach and vocabulary as Eclipse Sirius, you can create in EEF several pages from a single definition using the semantic candidate expression.
The goal of the semantic candidate expression is to let you determine which object will be used as the context of the page. By default, if you do not specify the semantic candidate expression, we will reuse the input of the view. As usual, in our examples we will use expressions based on AQL, with this in mind, not specifying a semantic candidate expression is the same as using
aql:self
. In the semantic candidate expression, the variable
self
is the input of the view.
You could also change the current object used in the page by using the expression
aql:self.anotherObject
. You could type pretty much any valid expressions to navigate to another object but with this mechanism you can also create multiple pages from your semantic candidate expression if this expression returns a collection of objects instead of one object.
If you use the expression
aql:self.otherObjects->select(object | object.isValid())
as the semantic candidate expression, you will create one page for each object returned by your expression. This way, you can have a simple definition which will be able to handle dozens of elements in your domain.