Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Sirius/Tutorials/Mindstorms/PropertiesViews

< Sirius‎ | Tutorials‎ | Mindstorms
Revision as of 11:25, 13 September 2018 by Frederic.madiot.obeo.fr (Talk | contribs) (Video)

Properties Views

Objectives

Provide custom properties views for a modeling tool that allows the user to define the choreography of a Mindstorms robot.

  • GoForward’s properties view
    • Specific background color if Cm value is negative
    • Warning if Cm value is null
  • Rotate’s properties view
    • Random checkbox and Degrees field aligned on the same row
    • Degrees field disabled if Random is checked
    • Validation rule of type Warning, testing if Degrees is equal to 0 and Random is not checked
    • Two quick fixes on this rule to propose solutions
  • Choreography’s properties view
    • Editable list of instructions
    • Validation rule of type Error, testing if Name is already used by another Choreography at the same level

Mindstorms-5-1.png

Sirius concepts

During this step, you will mainly use these Sirius concepts:

  • Properties Views Description
    • Describes how model element are shown and edited in the Eclipse Properties Views
  • Page
    • Corresponds to a tab in the Properties View
  • Group
    • Represents a group of widgets in a tab
  • Container
    • Allows to specify alternate layouts
  • Fill Layout
    • Organizes elements inside the container either horizontally or vertically


  • Text widget
    • Represents a single line text
  • Checkbox widget
    • Represents a checkbox
  • References widget
    • Represents the value of a reference in the model


  • Property validation
    • Defines a validation rule linked to a specific widget.
  • Semantic validation
    • Define a validation rule linked to a group
  • Audit
    • Evaluates if a validation rule has been broken

Video

Watch the video (16'45)

MindstormsVideo5.png

Detailed script

Create a Properties View for GoForward instructions

  • At the root of the modeler definition create a New Properties View to define custom properties views for the instructions
    • Metamodels = mindstorms
    • Update the Page named Default Page (already created by default)
      • Domain Class = mindstorms::Instruction
      • Label Expression = General
  • Update the Group named Default Group to display and edit the cm property of GoForward
    • Id = GoForward
    • Domain Class = mindstorms::GoForward
    • Label Expression = Properties
    • Add a Text for the name property
      • Id = CmText
      • Label Expression = Cm
      • Value Expression = feature:cm
      • Under Begin add a Set operation (set var:newValue to cm)
    • Create a Conditional Style for the cm Text in order to color the text background when cm is lower than 0
      • Precondition Expression = aql:self.cm<0
      • Create a Style with Background Color = MindstormsColor1
    • Now, if you select a GoForward instruction and enter a negative Cm value, you should see:

Mindstorms-5-2.png


    • Add a Validation to warn the user when cm is null (useless instruction).
      • Create a Property Validation Rule
  • Targets = CmText
  • Id = UselessGoForward
  • Level = Warning
  • Message = This instruction is useless
  • Create an Audit
    • Audit Expression = aql:self.oclAsType(mindstorms::GoForward).cm<>0
    • Now, if you select a GoForward instruction and enter a null Cm value, you should see:

Mindstorms-5-3.png

4.3.2. Create a Properties View for Rotate instructions

  • Create a Group to display and edit the degrees and random properties of Rotate
    • Id = Rotate
    • Domain Class = mindstorms::Rotate
    • Label Expression = Properties
    • Add this new group to the Default page (Groups property on this page)
    • Create a Container to put the widgets in the same line
      • Create a Fill Layout with Orientation = HORIZONTAL
    • Add a Checkbox for the random property
      • Id = RandomCheckbox
      • Label Expression = Random
      • Value Expression = feature:random
      • Under Begin create a Set operation (set var:newValue to random)
    • Add a Text for the degrees property
      • Id = DegreesText
      • Label Expression = Degrees
      • Is Enabled Expression = aql:not self.random
      • Value Expression = feature:degrees
      • Under Begin create a Set operation (set var:newValue to degrees)
  • Now, if you select a Rotate instruction the checkbox and the field should be aligned, and the check of Random should disable the Degrees field:

Mindstorms-5-4.png

  • Add a Validation to warn the user when degrees is null and random is false (useless rotate instruction).
    • Create a Semantic Validation Rule
      • Id = UselessRotation
      • Level = Warning
      • Message = This instruction is useless
    • Create an Audit
      • Audit Expression = aql:self.degrees<>0 or self.random



4.3.3. Create a Properties View for Choreographies instructions

  • Create a Group to display and edit the name and instructions properties of Choreography
    • Id = Choreography
    • Domain Class = mindstorms::Choreography
    • Label Expression = Properties
    • Add this new Group to the Default page (Groups property on this page)
    • Add a Text for the name property
      • Id = NameText
      • Label Expression = Name
      • Value Expression = feature:name
      • Under Begin create a Set operation (set var:newValue to name)
    • Add a Reference for the instructions property
      • Id = InstructionsRef
      • Label Expression = Instructions
      • Reference Owner Expression = var:self
      • Reference Name Expression = instructions
    • Now, if you select a Choreography instruction, the properties view contains a list with action buttons:

Mindstorms-5-5.png


    • Add a Validation to warn the user when the name is already used by a sibling choreography.
      • Create a Property Validation Rule
  • Targets = NameText
  • Id = UniqueName
  • Level = Error
  • Message = Name must be unique
  • Create an Audit
    • Audit Expression = aql:not self.siblings()

->filter(mindstorms::Choreography) ->collect(i|i.name) ->includes(self.name)



Installing the solution

The solution of this step is provided in solution4.zip

Warning: If you delete your current design project and load the solution, you should close the sample project and reopen it, in order the new version to be taken into account

Back to the top