13.7.  Constraints Tab

Constraints are one of the extension mechanisms provided for UML. ArgoUML is equipped with a powerful constraint editor based on the Object Constraint Language (OCL) defined in the UML 1.4 standard.

[Caution]Caution

The OCL editor implementation for ArgoUML V0.26 doesn't support OCL constraints for elements other than Classes and Features.

This is something of a general restriction of OCL. Although the UML specification claims that there may be a constraint for every model element, the OCL specification only defines classes/interfaces and operations as allowable contexts.

It is not before OCL 2.0 that a more general definition of allowable contexts is introduced. The key issue is that for each context definition you need to define what is the contextualClassifier, i.e., the classifier that will be associated with the self keyword. The creators of the OCL specification claim that this is not an issue for the OCL specification, but rather for UML or some integration task force. Conversely, it seems that the UML specification people seem to expect this to be defined in the OCL specification (which is why we did a first step in that direction in OCL 2.0).

So, to cut a long story short, it appeared that the simplest solution for ArgoUML at the moment would be to enable the OCL property panel only for those model elements for which there actually exists a definition of the contextualClassifier in OCL 1.4. These are (s. above) Class/Interface and Feature.

The standard pre-defines a small number of constraints (for example the xor constraint over a set of associations indicating that only one may be manifest for any particular instance).

The standard also envisages a number of circumstances where general purpose constraints may be useful:

Figure 13.14, “ A typical Constraints tab on the details pane shows a typical constraint tab for a model element in ArgoUML (in this case a class).

Figure 13.14.  A typical Constraints tab on the details pane

A typical Constraints tab on the details pane

Along the top of the tab are a series of icons.

The main body of the constraints tab comprises two boxes, a smaller to the left and a larger one to the right. The two are separated by two small arrow buttons which control the size of the boxes.

Finer control can be achieved by using button 1 motion to drag the dividing bar to left and right.

The box on the left is titled Constraint Name and lists all the constraints (if any) so far defined for the selected model element. A constraint may be selected by button 1 click.

The box on the right is labeled Preview and contains the text of the constraint. This box only shows some contents if a constraint is selected. Where a constraint is too large for the box, a scroll bar is provided to the right.

13.7.1.  The Constraint Editor

This is invoked through the use of the Edit Constraint button on the main Constraints tab. The constraint editor takes up the whole tab (see Figure 13.16, “ Dialog box for configuring constraints).

Figure 13.16.  Dialog box for configuring constraints

Dialog box for configuring constraints

Along the top of the tab are a series of icons.

  • Cancel Edit Constraint. This exits the constraint editor without saving any changes and returns to the main Constraints tab.

  • Check OCL Syntax. This button invokes a full syntax check of the OCL written in the editor. If the syntax is valid, the constraint is saved, and control returns to the main Constraints tab. If the syntax is not valid, a dialog box explains the problem.

    [Warning]Warning

    Whether type checking is included should be configurable with the Configure Constraint Editor button (see below). But ArgoUML V0.20 does always check, and refuses to accept any constraint with the slightest error.

  • Configure Constraint Editor. This a dialog to configure options in the constraint editor. It is also available in the main Constraints tab and is discussed in detail there (see Section 13.7, “ Constraints Tab ).

To the right of the toolbar is a check box labeled Syntax Assistant (unchecked by default), which will enable the syntax assistant in the constraint editor.

If the syntax assistant is enabled, six drop down menus are provided in a row immediately below the toolbar. These provide standard templates for OCL that, when selected, will be inserted into the constraint being edited.

The syntax assistant can be made floating in a separate window by button 1 motion on the small divider area to the left of the row of drop-down menus.

  • General. General OCL constructors. Entries: inv (inserts an invariant); pre (inserts a pre-condition); post (inserts a post-condition); self (inserts a self-reference); @pre (inserts a reference to a value at the start of an operation); and result (inserts a reference to a previous result).

  • Basic Operators. Relational operators and parentheses. Entries: =; <>; <; >; <=; >=; and ().

  • Numbers. Arithmetic operators and functions. Entries: +; -; *; /; mod; div; abs; max; min; round; and floor.

  • Strings. String functions. Entries: concat; size; toLower; toUpper; and substring.

  • Booleans. Logical functions. Entries: or; and; xor; not; implies; and if then else.

  • Collections. Operators and functions on collections -bags, sets and sequences. The large number of functions are organized into sub-groups.

    • General. Functions that apply to all types of collection. Entries: Collection {} (insert a new collection); Set {} (insert a a new set); Bag {} (insert a new bag); Sequence {} (insert a new sequence); size; count; isEmpty; notEmpty; includes; includesAll; iterate; exists; forAll; collect; select; reject; union; intersection; including; excluding; and sum.

    • Sets. Operators and functions that apply only to sets. Entries: - (set difference); and symmetricDifference.

    • Sequences. Functions that apply to sequences. Entries: first; last; at; append; prepend; and subSequence.

The remainder of the tab comprises a writable text area containing the text to be edited. The mouse buttons have their standard behavior within an editable text area (see Section 8.2, “ General Mouse Behavior in ArgoUML).

In addition, cut, copy and paste operations may be invoked through the keyboard shortcuts Ctrl-X, Ctrl-C and Ctrl-V respectively.