Change Log 5.x

Obeo Designer 5.0.10 (2012/03/08)

This release corrects these bugs on Viewpoint:

  • Pb of dirty state with multi aird and bad memento management
  • Layout corruption after restarting Eclipse with merged sessions opened
  • Layout corruption when trying to open the same session several times
  • NPE when trying to re-open a diagram editor from a memento if the files are not accessible

 

Obeo Designer 5.0.9 (2012/02/14)

This release corrects these bugs on Viewpoint:

  • In some situations, loss of layout on diagram opening
  • Opening a representation via a navigation always refreshes the representation regardless of the REFRESH_ON_OPEN preference

 

Obeo Designer 5.0.8 (2012/01/27)

This release corrects refresh problems on tables and cross-tables

 

Obeo Designer 5.0.7 (2012/01/16)

This release corrects a ClassCastException bug when a multi-valued attribute is updated from the property view.

 

Obeo Designer 5.0.6 (2011/12/14)

This release corrects these bugs on Viewpoint:

  • In table editor, column with a false parent expression displays the feature name result
  • In table editor, column with feature name as reference can not be read only
  • Clipboard support redefinition does not work
  • In table editor with 2 columns with the same feature name : change value of one column changes the second
  • Drag&Drop from Model Content does not work when the element is in controlled resource

It also corrects a performance issue with "dongle type" licences

 

Obeo Designer 5.0.5 (2011/10/10)

This release corrects these bugs on Viewpoint:

  • Precondition expression prevents a diagram to be created when creating the session
  • Element created via a popup menu is displayed on the top left of the diagram and can be not visible
  • Newly created element can overlap an existing element
  • Deleting an edge closes a diagram which should not be closed
  • RuntimeException when deleting an object which is the root element of another diagram
  • Re-selecting a viewpoint doesn't always re-activate the corresponding tools
  • Do not assume selection of displayed element is an instance of IStructuredSelection

 

Obeo Designer 5.0.4 (2011/07/25)

This release corrects a bug on Viewpoint:

  • In a cross table, the call of a Java service which deletes semantic elements does not refresh the content of the table

 

Obeo Designer 5.0.3 (2011/06/16)

This release corrects a bug on Traceability:

  • An overriden Generator#createAcceleoService() is not called when launched with Traceability

 

Obeo Designer 5.0.2 (2011/05/24)

This release corrects these bugs on Viewpoint

  • NPE when "Tooltip" expression has a never assigned attribute
  • PaletteManager exception if note attachement can't be found
  • Synchronization problem with an XText model modification made outside the Viewpoint editors
  • NPE on tooltip refresh when creating a new element
  • Tooltips not properly updated when the label position is on the border

 

Obeo Designer 5.0.1 (2011/03/31)

This release provides:

  • The compatibility with Eclipse 3.5.
  • Performance improvements.
  • A tutorial explaining how to migrate from older versions.

It also corrects these bugs on Viewpoint:

  • NPE when using the NavigationTask
  • Progressive performance degradation make the tool unusable after a while
  • Images missing in diagram specification reference guide

 

Obeo Designer 5.0.0 (2011/03/03)

This release introduces new features and improvements on these components:

For a more synthetic description of this version, you can read the What's new page

Tree Representations

A new kind of Representation, the Trees, has been defined. Trees allow to bring a hierarchical viewpoint of datas, as they can provide a lot of informations in a clear and concise way. We advice the use of Tree Representations when you can extract an obvious hierarchy out of the information you want to represent in your Viewpoint / Representation.

Any Viewpoint Specifier used to Tables or Diagrams will be able to specify Tree Representations quite easily, as standard notions and tools have been reused.

Trees offer a lot of features improving usability, such as :

  • Custom Drag and Drop specification

  • Pop-up menus definition

  • Direct Edit, Navigation Tools, Creation Tools, Deletion Tools...

A complete documentation, including Reference guide and a quickstart based on a concrete example will allow you to quickly get used with this new kind of Representation.

Sequence Diagrams Representations

  • Sequences Diagrams with all the complex constructions (inspired from UML)
  • Adaptable to any DSL
  • Advanced management of combined fragment

Diagram Editor

Show/Hide labels

It is now possible to hide the edge label and the node label if it is on the border of its node.
The «Diagram elements visibility» wizard considers now the labels of the nodes and edges.

Node label

The approach is the same as for other elements, except that there is a specific menu named «Hide/Show Label». It is possible to call this menu directly on the node or on its label.
Four ways to hide or reveal labels :

  • from the context menu on the node or its label

  • from the tabbar, an new icon appears on the selection of the node or its label

  • from the outline view, selecting the node or its label

  • from the «Diagram elements visibility» wizard

Edge label

Same approach than the node label with specifics menus «Hide/Show Label» called on the edge or its label.
Four ways to hide or reveal labels :

  • from the context menu on the edge or its label

  • from the tabbar, an new icon appears on the selection of the edge or its label

  • from the outline view, selecting the edge or its label

  • from the «Diagram elements visibility» wizard

Transversal

Specifying Colors

  • Interpolated Colors

It is now possible to choose as many colors as you want by adding Color Step children to the Interpolated Color. The previous mechanism (From Green to Red) is still operational.

Here is the .odesign definition:

And here is the result:

  • Computed colors

It is possible to define a new color type with computed RGB. Each color component can be defined by an expression (Acceleo, OCL, or another specific interpreter). This evolution is needed for a specific diagram in which the color of the element depends on the semantic model.

Here is the .odesign definition:

Editors

Eclipse Editors from Viewpoints

You have now the possibility to create easily a specific eclipse editor for a given representation description. When opening the editor will automatically create the session at opening and dispose it at closing.

A thin Eclipse compatibility layer has been added to allow you to define a real Eclipse editor from your Viewpoints:

With this editor available through a right click the session is completely managed for your users.

End User documentation

You have now the possibility to document the Viewpoint, Representation Description and Layer for the end-user.

Documentation of Viewpoint:

Documentation of Representation:

Documentation of Layer:

Diagram Representations

ToolFilter

You have now the possibility for tools to be hidden in the palette based on a precondition. You can specify semantic element features to listen to trigger precondition computation and update of the palette accordingly.

Edge mapping

The notion of edge mappings is divided into two types:

  • Element based edge: replaces an edge mapping with domain based
  • Reference Based Edge: replaces an edge mapping without domain based

Two actions are now available to create these mappings:

The tabbed property «Domain Based» no longer exists : the check box «Domain based» disappears and the «Semantic Candidates Expression», «Source Finder Expression» and «Domain class» properties exist only for element based edge, not for relation based edge. These fields are now in the general tab.

Diagram Editor

New user interface

Tab bar

For each diagram, a tab bar is displayed with content depending on the selection.

Layers and filters management

Activation of layers and filters could be directly done from the diagram tab bar instead of the outline view.

Contextual menu simplification

Some old or not very used items have been removed from the contextual menu.

If you do not like the new user interface, or have a problem with the new one, you could re-enable the old one through the preferences:

Show/Hide elements using a tree viewer

A new button, named Show/Hide is accessible on the tab bar.

This open a dialog that display the diagram elements as a tree. This way the user can choose shown and hidden elements more easily.

User will be able to filter elements to show/hide using standard Regular Expressions:

Pin/Unpin elements using a tree viewer

A new button, named Pin/Unpin is accessible on the tab bar.

This open a dialog that display the diagram elements as a tree. This way the user can choose the elements to pin or unpin more easily.

User will be able to filter elements to pin/unpin using standard Regular Expressions:

Hiding icons of labels on Shapes or Connectors

New options in the Viewpoint Diagram preferences (Window/ Preferences/ Viewpoint/ Viewpoint Diagram/ Appearance) will allow user to hide all icons of the labels on Shapes or Connectors.

For example, if the user has checked both "Hide label icons on shapes" and "Hide label icons on connectors" options, the following diagram:

will become (once re-opened):

Quick outline

  • There is now a new context menu action on diagrams Quick outline, also accessible with CTR O to search and navigate into diagram elements.

Properties

There is a new tab in the Properties view of the diagram itself (no selected element) named Documentation. This tab provides a text area for the diagram documentation.

Node label

The border label of a node is now centered if placed on south or north border and larger than the width of the node.

Container label

There is a new label option in the label tab : label border style.

As a result a border will be drawn around the container label.

Labels color

The color of the label in the style description of a mapping can now be defined with based colors but also with interpolated colors and fixed colors. By default, the color will be black.

Collapse behavior

When a border node is collapsed, the corresponding figure is minimized (size : 4pix * 4pix) and transparent. Selection and move of collapsed border nodes are enabled.

Batch images export

The Batch images export now can export images in PNG and SVG format.

Model Splitting

There is a new preference on the Viewpoint page : Always create an aird fragment on control. This preference allow the creation of an empty aird fragment if there is no representation selected during a control.

Compatibility

Migrating from 4.6

You should migrate all your Viewpoint Specification Models (*.odesign) first using the contextual action in the popup menu.

Make sure your migrated model is still valid using the validation action , at the top right corner of the editor.

Once your .odesign are migrated you should migrate the Representation Data (*.aird) using the contextual action in the popup menu.

Manual migration for rounded corners styles

A change in the way Viewpoint interprets the arcWdith and arcHeight attributes for rounded corner styles requires a manual migration of the VSM. This will not be done by the automatic migration operation.

For diagram elements which have rounded corners (as specified in their style element in the VSM), the arcWidth and arcHeight attributes indicate the size of the rounding. In Viewpoint 4.6.x, that size was incremented in big steps each time the attributes were incremented, as seen in the screenshot below (respectively with no rounding, and rounding with arc sizes of 1, 2 and 3):

Viewpoint 5.2 interprets the arcWidth and arcHeight differently to give a much finer control on the size of the rounding. However, this means that if the styles in the VSM is not modified, the previous small values of 1, 2 and 3 (for example) will give the impression that rounded corners do not work anymore. In order to obtain the same visual result as before, the arcWidht and arcHeight must be multiplied by 25. The two screenshots below show a non-modified VSM in Viewpoint 5.2 (rounding of 1, 2 or 3 are so small that they look not rounded at all), and a modified VSM where the arc sizes have been multiplied by 25, to obtain the same visual result as before.

Of course, specifiers can now choose intermediate values (non multiple of 25) to obtain finer control on the rounding size.

 

Compatibility and upgrading

  • Acceleo 3.0 is compatible with the three latest releases of Eclipse; Eclipse 3.4 (Ganymede), Eclipse 3.5 (Galileo) and Eclipse 3.6 (Helios). However, there are some limitations to this compatibility we maintain due to the changes that were implemented in OCL since then. For one, Acceleo modules that compile in Helios may or may not compile in Galileo and Ganymede (this will depend on the OCL features you make use of). However, Acceleo modules that compile in a given version will always compile in the subsequent Eclipse releases. Likewise, a module that has been compiled in Helios may be launched in Ganymede regardless of whether it would compile or not in that version, as our runtime shouldn't suffer from OCL breakages and improvements. All information about the compatibility will be maintained on the wiki.
  • We provide migration facilities for those of you that own Acceleo 2 templates. Specifically, we allow for the automatic migration of Acceleo 2 generation projects to Acceleo 3 projects. The automatic migration takes care of everything that could possibly be automated, leaving for you to fix no more than the Acceleo 2 features that don't have an identified mapping to Acceleo 3, or those few features that require a human hand to convert intelligently. The team is at your disposal for help if there still remains things you don't know how to convert to Acceleo 3 on the usual communication channels : the M2T newsgroup, mails, comments on this blog...

Tooling improvements

New views have been introduced to help you on several aspects of the generation cycles: module definition, launching, debugging. I'll detail each of these views one after the other.

  • First of all, the Result view allows you to get feedback on the traceability information we could retrieve during the evaluation of your modules. As long as this view has been opened, Acceleo will record every bit of information it can to synchronize your generated text with the generation module and source model. Ever wondered why such or such portion of text has been generated one way or another? What part of your generation module has generated the name of such or such method? From which element of your model has been generated such or such import? This is the view you can use to retrieve these pieces of information.
    Acceleo result view
  • Next comes the Overrides view, which can be used to easily create templates or modules overriding other that are present in your instance of Eclipse. It will display every single module located either in your installed plug-ins or your workspace. All of these can be browsed down to the template level and a check box allows you to select those you wish to override. Once selected, you simply have to use the content assistant in the Acceleo Editor (CTRL+SPACE by default) and validate selected overrides for all of the overriding templates to be added to your module.
    Acceleo overrides view
  • Last but not least, the Generation Patterns view has been introduced to help you implement behavior for an interface/class and all (or a subset of) its subtypes. For example, let's say you wish to implement a template named javaName which will generate the name of any classifier. This template will need some default behavior for interfaces and specific behavior for some classifiers. Open the Generation Patterns view, tick [template] for all selected types in its top part, and all of the types you wish to generate a template for in its bottom part. Once done, the content assist in the Acceleo editor will give you the choice [template] for all selected types which yo just have to choose in order to generate all of the templates you asked for. Now that you no longer risk forgetting one or more subtypes, it is left to your discretion to implement the behavior for each of them.
    Acceleo generation patterns
  • Acceleo now provides a built-in profiler that can be used to keep track of evaluations and identify (and, hopefully, fix) bottlenecks in your generation process. The profiler is accessible through a right click on the module which execution you need to profile and the menu item Profile As => Acceleo Application.
    Acceleo profiling file
  • The Acceleo debugger now provides you with the list of available variables at a given point in the evaluation process, along with the values of these variables for a given stack frame. Moreover, the displayed stack frames now represent Acceleo module element corresponding to your current expression stack. As for the previous release, debugging templates only requires you to set breakpoints in the Acceleo modules as you would usually with Eclipse : open an editor, double click in the left margin on the line you wish the breakpoint to be set, and launch the generation through the menu Debug As => Launch Acceleo Application.
    Acceleo debug
  • Whenever possible, the warnings and errors Acceleo logs when an evaluation fails now sport the expression stack (with the lines they're at in the module files) instead of a stack trace corresponding to the Java code that was being executed at the time. This will allow for way easier debugging that ever before.

Editor Improvements

Apart from the performance improvements and minor bug fixes, the Acceleo module editor now provides refactoring actions and quick fixes.

  • First of all, you can now use the "usual" shortcut ALT+SHIFT+R to rename either modules, templates, queries, variables, ... in a coherent manner. This very same action can be accessed from right-clicking and selecting Refactor => Rename. The interface will allow you to preview the changes before validating them.
    Acceleo rename preview
  • Portions of the module elements can be extracted as new templates through right-clicking and selecting Refactor => Extract Template (or simply using the shortcut ALT+SHIFT+T). Do note, however, that the selected text needs to be consistent. You cannot randomly select text that spans blocks of code and expect an adequate result.
  • The module editor now highlights all occurrences of the selected element when you click on it. For exemple if you place the cursor on the name of a template, all invocations of this template will be highlighted and markers will appear on the right ruler of the editor to indicate them.
  • Acceleo now provide quick fixes for some of the syntax errors detected in the editor, notably the possibility to create template or queries of a corresponding name.
    Acceleo quick fixes
  • It is recommended to use a bottom-up approach when developing generators ; Acceleo now eases this process by allowing you to initialize the content of a generation module with an example, and offering specific actions to transform these examples (static text) in dynamic OCL expressions. For example, changing all occurrences of MyClass to [c.name.toUpperFirst()/] in a single click.

Improvements and simplifications of the language

  • The MTL specification defines a standard library that offers a set of utility operations; in addition, Acceleo provides a non standard library to provide operations that greatly simplify the language and allow you to write more concise expressions, but are not part of the specification. This library has seen many additions since the 0.8 version, with things like Collections::sep(String) to insert a separator in-between every element contained by a collection, String::matches(String) to check whether a given String matches a regular expression, Collection::filter(Type) that can be used to filter out of a collection all elements that are not instances of a given type, Collection::reverse() to reverse the content of a given Collection... Take a look at the Acceleo documentation for a full reference of both standard and non standard library, along with the reference of the OCL standard library.
  • Acceleo allows you to alter the build mode, either Strict or Lax MTL compliance. Strict compliance meaning you'll get a warning for each use of a “non standard” operation.
    Acceleo compiler compliance
  • Those of you that are familiar with the 2.x stream of Acceleo will be pleased to know that Acceleo 3 now provides the same post-processing facilities as its ancestor through the addition of a post directive on templates. Which allows for the modification of the text generated by a template “after generation”. For example, post(trim()) allows you to properly indent the content of the template while still leaving you the possibility to trim all unnecessary white spaces from the generated text.
    Acceleo template posttreatment
  • The "+" operator can now be used whenever one of the operands is a String for concatenation, in order to avoid the verbose concat(String) OCL offers.
  • You can now use properties files to customize your generations through the addition of 4 variants of a getProperty operation in Acceleo 3. Once again, the operation reference can be looked at for the description of those services.
  • We made use of the facilities OCL provides in order to further simplify the navigation language : iterators of our [for] blocks are no longer mandatory (they'll be implicitly declared if needed and self can be used in their stead), you no longer need qualified names for your types when the metamodel is declared on the module header (or if it can be inferred from another of the declared metamodels), casting through oclAsType for all redundant expressions is no longer necessary...
  • For those expressions where OCL doesn't allow us to simplify the language, we added non standard operations. For example, sequence->select(oclIsKindOf(Type)).oclAsType(Type) is obviously redundant, but OCL doesn't allow for this expression not to define the explicit cast. In Acceleo, you can now write sequence->filter(Type) instead (see also the post on this specific issue).
  • Acceleo now allows for control characters (\n, \t, \'...) in OCL expressions.
  • Acceleo [for] blocks now declare an implicit "i" variable that can be used to retrieve the iteration count. For example, [for (Sequence{4, 5, 6})][i/], [/for] will generate 1, 2, 3.

Documentation

The Acceleo documentation is complete and can be accessed from the integrated Eclipse Help through Help => Help Contents, in the Acceleo Model To Text category. We provide everything you need in order to get started with Acceleo; quick start, tutorial, user guide... and the full reference of OCL standard library and Acceleo standard and non standard libraries complete with explanations of the operations and examples.

 

The ATL Toolkit is now compatible with Eclipse Helios (Eclipse 3.6, EMF 2.6). ATL is still compatible with Eclipse 3.5, 3.4, 3.3 and 3.2.

ATL Editor improvements

  • Hover informations: when hovering code parts into an atl file, a yellow popup displays informations about the element type if available.

Image:ATL_hover.png

  • Open declaration (both available with F3 and Ctrl-click): this feature eases the navigation inside of an ATL file, by opening the corresponding declaration of the selected element. When selecting a ModelElement the action opens the metamodel (.ecore file) and highlights the selected element.

Image:ATL_open_declaration.png

 

  • Content assist: now content assist is more powerful and works inside of complex OCL expressions

Image:ATL_advanced_content_assist2.png

  • Occurences highlighting: when selecting an element, all references to the same one are highlighted.

Image:ATL_show_references.png

ATL Language

Output Model selection

A miss in the ATL syntax has just been corrected: the in keyword is now available for both input and output patterns. It mainly allow to specify in which model you want to create elements, when the old semantics forbade the use of several output models conforming to the same metamodel declaration. The workaround wasn't very intuitive as it consists on declaring the same metamodel with different names...

Here is a sample transformation header:

create OUT1 : MM_B, OUT2 : MM_B from ... ;

Below is an output pattern which creates elements in the OUT2 model:

to
   o : MM_B!Class2 in OUT2

Debugging & Profiling

debugger refactoring

Until ATL 3.0, the debugger was part of the Regular ATL VM only. EMF-specific VM didn't provide debugging facilities. Now the debugger (UI plus debugging protocol, ADWP) has been extracted from the Regular VM and refactored to be more generic. Finally a debugging protocol support has been added to the EMF-specific VM. So now the debugger can work with both VMs.

The debugger also had some small enhancements, like variables presentation, breakpoints available in the ATL editor.

profiler

The profiler contribution has finally been integrated. It provides a profiler available for both VMs, usable through the launch configuration "Advanced" tab, in the VM selection. The profiling of an ATL transformation is very helpful to find the performance issues inside of a transformation, by displaying various informations about the execution in the dedicated views.

Image:ATL_profiler.png

ATL Plugins

The ATL plugin wizard is a new feature which helps achieving an ATL programmatic launch. This utility first will ask for transformation parameters (metamodels, libraries paths, transformation modules paths):


Image:ATL_plugin_wizard.png


Then a new plug-in will be generated, embedding:

  • the transformation modules and libraries
  • a propery file containing URIs, atl file paths
  • a Java class which allow to programmatically launch the ATL transformation


Image:ATL_plugin_wizard_result.png


Finally you will be able to launch the transformation using the generated main, or integrating the launcher class into an existing application. To use the transformation as a standalone app, you can use Eclipse Java export options:


Image:ATL_plugin_wizard_result_export.png


This will product a .jar containing all the required ATL, Eclipse and EMF libraries.