Programming

<<[Structure of AToM3 Models]  ::: [AToM3 Graphics]>>

3. Specifying Constraints and Actions

Following with the previous example, when you edit a constraint, a dialog window similar to this appears:


Figure 3: Specifying a Python Constraint in AToM3

The "Constraint name" field is mandatory and is the name of the constraint. If Python code is generated later, a method will be created with this name. The left-most radio buttons permit to select the language in which the constraint or action is to be specified. In the current version of AToM3  only Python can be used, future versions will allow also to use OCL. The next column of radio buttons are used to specify whether the code should be evaluated before (PREcondition) or after (POSTcondition) the event(s). The multiple-selection list on the right is used to specify the event(s) in which the code should be evaluated. These are the events that AToM3 handles:
 

Event
Type
Description
EDIT Semantic The entity is clicked to be edited.
SAVE Semantic The model is being saved.
CREATE Semantic The entity is being created.
CONNECT Semantic Two entities are being connected, both entities will receive the event*
DELETE Semantic The entity is being deleted.
DISCONNECT Semantic Two entities are being disconnected.
TRANSFORM Semantic The model is being transformed.
SELECT Graphical An entity is being Selected
DRAG Graphical Beginning of a DRAG operation
DROP Graphical End of a DRAG operation
MOVE Graphical An object is being moved
Table 1: Events handled by AToM3.

(*) Note that if two entities are being connected and an intermediate one has to be created, then:

  1. The newly created entity receives the CREATE event (PRE and POST conditions are evaluated).
  2. The first entity receives the CONNECT event as source (PRE and POST conditions are evaluated).
  3. The newly create entity receives CONNECT event as destination (PRE and POST conditions are evaluated).
  4. The newly create entity receives CONNECT event as source (PRE and POST conditions are evaluated).
  5. The second entity receives the CONNECT event as destination (PRE and POST conditions are evaluated).
Notice also that there are Semantic as well as Graphical events, you can associate constraints to any of them.

The text area is used to write the Python code to be evaluated when the event(s) occurs. In the current version of AToM3 , no syntactical checking is performed, future versions will. As arbitary Python code can be specified here, lateral effects are allowed; if this is the case we call this an Action, as opossed to Constraints, which usually do not have lateral effects. Other important difference between Actions and Constraints is that the latter return a value. The value can be None, meaning that the Constraint has been satisfied, or a 2-valued tuple, meaning that the constraint has not been satisfied. If this is the case, and the constraint is a PREcondition, then the event is not executed, if the constraint is a POSTcondition, then the event is undone. The two-value tuple a constraint can return is composed of a string with the message to be shown in a dialog window, and a pointer to the object which originates the error. If the constraint is a local constraint, then this value will typically be self, which points to the current entity (a child of an ASGNode). If the constraint is global, self points to the graph object, child of ASG, so you will have to return the pointer to the object which caused the error (or None).This value is used to highlight the object when presenting the dialog window with the error. If the second value is set to None, then no highlighting is performed.

When code is generated for this model, a method called "lessThan1000" is created, this method has the following signature:

def lessThan1000(self, params):
Where params is a list, which is usually empty, except for the case of the "CONNECT" event, in which the source object receives a "SOURCE" string and the destination objects receives a "DESTINATION" string.

Constraints imposed on graphical forms will be explained in section: AToM3 Graphics.


<<[Structure of AToM3 Models]  ::: [AToM3 Graphics]>>


Maintained by Juan de Lara. Last modified 22 July 2002.