blob: 5e6ca25f2804fa801f12768ce1e398f3b1994e63 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<!--
/********************************************************************************
** Copyright (c) 2012 Obeo.
** All rights reserved. This program and the accompanying materials
** are made available under the terms of the Eclipse Public License v1.0
** which accompanies this distribution, and is available at
** http://www.eclipse.org/legal/epl-v10.html
**
** Contributors:
** Stephane Begaudeau (Obeo) - initial API and implementation
*********************************************************************************/
-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="St&eacute;phane B&eacute;gaudeau">
<!-- IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href="../../assets/css/bootstrap.css" rel="stylesheet">
<link href="../../assets/css/docs.css" rel="stylesheet">
<title>Acceleo</title>
</head>
<body>
<div class="container">
<section id="introduction">
<div class="page-header">
<h1>Migration <small>From Acceleo 2.x to Acceleo 3.x</small></h1>
</div>
<p>
This document lists equivalences between Acceleo 2 and Acceleo 3 expressions.
</p>
</section>
<section id="miscellaneous">
<div class="page-header">
<h1>Miscellaneous</h1>
</div>
<p>
Equilavence guide for miscellaneous expressions.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%metamodel http://www.eclipse.org/uml2/2.0.0/UML%&gt;</td>
<td>[module module_name('http://www.eclipse.org/uml2/2.0.0/UML')/]</td>
</tr>
<tr>
<td>&lt;%import module.mt%&gt;</td>
<td>[import module/]</td>
</tr>
<tr>
<td>&lt;%import service.java%&gt;</td>
<td>Services no longer need to be imported</td>
</tr>
<tr>
<td>&lt;%list + object%&gt;</td>
<td>[list-&gt;including(object)/]</td>
</tr>
<tr>
<td>&lt;%object + list%&gt;</td>
<td>[object-&gt;union(list)/]</td>
</tr>
<tr>
<td>&lt;%list1 + list2%&gt;</td>
<td>[list1-&gt;union(list2)/]</td>
</tr>
<tr>
<td>&lt;%string + object%&gt;</td>
<td>[string + object/]</td>
</tr>
<tr>
<td>&lt;%list - object%&gt;</td>
<td>[list-&gt;excluding(object)/]</td>
</tr>
<tr>
<td>&lt;%list1 - list2%&gt;</td>
<td>[list1-&gt;asSet() - list2-&gt;asSet()/] (Note that this no longer keeps duplicates,
which is not strictly equivalent to Acceleo 2)</td>
</tr>
<tr>
<td>&lt;%list1 || list2%&gt;</td>
<td>[list1-&gt;union(list2)/]</td>
</tr>
<tr>
<td>&lt;%list &amp;&amp; object%&gt;</td>
<td>[list-&gt;select(element | element = object)/]</td>
</tr>
<tr>
<td>&lt;%list1 &amp;&amp; list2%&gt;</td>
<td>[list1-&gt;iterate(element; result : Sequence(T) = Sequence{} | if
list2-&gt;includes(element) then result-&gt;including(element) else result endif)/]</td>
</tr>
<tr>
<td>&lt;%list1 == list2%&gt;</td>
<td>[list1 = list2/]</td>
</tr>
<tr>
<td>&lt;%list1 != list2%&gt;</td>
<td>[list1 &lt;&gt; list2/]</td>
</tr>
<tr>
<td>&lt;%object != object%&gt;</td>
<td>[object &lt;&gt; object/]</td>
</tr>
<tr>
<td>&lt;%! boolean%&gt;</td>
<td>[not boolean/]</td>
</tr>
</tbody>
</table>
</section>
<section id="eobject">
<div class="page-header">
<h1>EObject Services</h1>
</div>
<p>
Equilavence guide for EObject services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%x.eAllContents%&gt;</td>
<td>[x.eAllContents()/]</td>
</tr>
<tr>
<td>&lt;%x.eAllContents(&quot;EClass&quot;)%&gt;</td>
<td>[x.eAllContents(EClass)/]</td>
</tr>
<tr>
<td>&lt;%x.eClass%&gt;</td>
<td>[x.eClass()/]</td>
</tr>
<tr>
<td>&lt;%x.eContainer%&gt;</td>
<td>[x.eContainer()/]</td>
</tr>
<tr>
<td>&lt;%x.eContainer(&quot;EPackage&quot;)%&gt;</td>
<td>[x.eContainer(EPackage)/]</td>
</tr>
<tr>
<td>&lt;%x.eContainingFeature%&gt;</td>
<td>[x.eContainingFeature()/]</td>
</tr>
<tr>
<td>&lt;%x.eContainmentFeature%&gt;</td>
<td>[x.eContainmnentFeature()/]</td>
</tr>
<tr>
<td>&lt;%x.eContents%&gt;</td>
<td>[x.eContents()/]</td>
</tr>
<tr>
<td>&lt;%x.eCrossReferences%&gt;</td>
<td>[x.eCrossReferences()/]</td>
</tr>
<tr>
<td>&lt;%x.eResource%&gt;</td>
<td>[x.eResource()/]</td>
</tr>
<tr>
<td>&lt;%x.eResourceName%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%x.getRootContainer%&gt;</td>
<td>[x.ancestors()-&gt;last()/]</td>
</tr>
<tr>
<td>&lt;%load(&quot;//UML2_LIBRARIES/UML2PrimitiveTypes.library.uml2&quot;)%&gt;</td>
<td>No direct equivalent : Acceleo 3 accepts more than one model
element as arguments of a generation. An alternative would be
to use a custom Java service for this need.</td>
</tr>
</tbody>
</table>
</section>
<section id="request">
<div class="page-header">
<h1>Request Services</h1>
</div>
<p>
Equilavence guide for Request services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%list.select(&quot;eAttributes.nSize() &gt; 0&quot;)%&gt;</td>
<td>[list-&gt;select(eAttributes-&gt;size() &gt; 0)/]</td>
</tr>
<tr>
<td>&lt;%list.select(&quot;eAttributes.nSize()&quot;, &quot;0&quot;)%&gt;</td>
<td>[list-&gt;select(eAttributes-&gt;size() = 0)/]</td>
</tr>
<tr>
<td>&lt;%list.delete(&quot;eAttributes.nSize() &gt; 0&quot;)%&gt;</td>
<td>[list-&gt;reject(eAttributes-&gt;size() &gt; 0)/]</td>
</tr>
<tr>
<td>&lt;%list.delete(&quot;eAttributes.nSize()&quot;, &quot;0&quot;)%&gt;</td>
<td>[list-&gt;reject(eAttributes-&gt;size() = 0)/]</td>
</tr>
<tr><td>&lt;%evaluate(&quot;2 + 4&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</section>
<section id="resources">
<div class="page-header">
<h1>Resources Services</h1>
</div>
<p>
Equilavence guide for Resources services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%getFileContent(&quot;C:/Obeo/models/MyModel.xmi&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%getChainPath%&gt;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</section>
<section id="string">
<div class="page-header">
<h1>String Services</h1>
</div>
<p>
Equilavence guide for String services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%x.length%&gt;</td>
<td>[x.size()/]</td>
</tr>
<tr>
<td>&lt;%x.toUpperCase%&gt;</td>
<td>[x.toUpper()/]</td>
</tr>
<tr>
<td>&lt;%x.toLowerCase%&gt;</td>
<td>[x.toLower()/]</td>
</tr>
<tr>
<td>&lt;%x.toU1Case%&gt;</td>
<td>[x.toUpperFirst()/]</td>
</tr>
<tr>
<td>&lt;%x.toL1Case%&gt;</td>
<td>[x.toLowerFirst()/]</td>
</tr>
<tr>
<td>&lt;%x.substring(1, 3)%&gt;</td>
<td>[x.substring(2, 3)/]</td>
</tr>
<tr>
<td>&lt;%x.substring(1)%&gt;</td>
<td>[x.substring(2)/]</td>
</tr>
<tr>
<td>&lt;%x.replaceAll(&quot;test&quot;, &quot;replaced&quot;)%&gt;</td>
<td>[x.replaceAll('test', 'replaced')/]</td>
</tr>
<tr>
<td>&lt;%x.replaceAll(&quot;\w&quot;, &quot;$0&quot;)%&gt;</td>
<td>[x.replaceAll('\\w', '$0')/]</td>
</tr>
<tr>
<td>&lt;%x.replaceFirst(&quot;test&quot;, &quot;replaced&quot;)%&gt;</td>
<td>[x.replace('test', 'replaced')/]</td>
</tr>
<tr>
<td>&lt;%x.replaceFirst(&quot;\w&quot;, &quot;$0&quot;)%&gt;</td>
<td>[x.replace('\\w', '$0')/]</td>
</tr>
<tr>
<td>&lt;%x.trim%&gt;</td>
<td>[x.trim()/]</td>
</tr>
<tr>
<td>&lt;%x.startsWith(y)%&gt;</td>
<td>[x.startsWith(y)/]</td>
</tr>
<tr>
<td>&lt;%x.endsWith(y)%&gt;</td>
<td>[x.endsWith(y)/]</td>
</tr>
<tr>
<td>&lt;%x.equalsIgnoreCase(y)%&gt;</td>
<td>[x.equalsIgnoreCase(y)/]</td>
</tr>
<tr>
<td>&lt;%x.matches(y)%&gt;</td>
<td>[x.matches(y)/]</td>
</tr>
<tr>
<td>&lt;%x.charAt(4)%&gt;</td>
<td>[x.substring(5, 5)/]</td>
</tr>
<tr>
<td>&lt;%x.indexOf(y)%&gt;</td>
<td>[x.index(y)/]</td>
</tr>
<tr>
<td>&lt;%x.indexOf(y, 4)%&gt;</td>
<td>[x.substring(5, x.size()).index(y) + 4/]</td>
</tr>
<tr>
<td>&lt;%x.lastIndexOf(y)%&gt;</td>
<td>[x.lastIndex(y)/]</td>
</tr>
<tr>
<td>&lt;%x.lastIndexOf(y, 4)%&gt;</td>
<td>[x.substring(5, x.size()).lastIndex(y) + 4/]</td>
</tr>
<tr>
<td>&lt;%x.split(y)%&gt;</td>
<td>No direct equivalent, use String::tokenize(String)</td>
</tr>
<tr>
<td>&lt;%x.indentSpace%&gt;</td>
<td>[x.replaceAll('\r\n|\r|\n', '$0 ')/]</td>
</tr>
<tr>
<td>&lt;%x.indentTab%&gt;</td>
<td>[x.replaceAll('\r\n|\r|\n', '$0t')/]</td>
</tr>
</tbody>
</table>
</section>
<section id="system">
<div class="page-header">
<h1>System Services</h1>
</div>
<p>
Equilavence guide for System services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%i()%&gt;</td>
<td>[i/]</td>
</tr>
<tr>
<td>&lt;%args(0)%&gt;</td>
<td>arguments are explicit and named in Acceleo 3</td>
</tr>
</tbody>
</table>
</section>
<section id="xpath">
<div class="page-header">
<h1>XPath Services</h1>
</div>
<p>
Equilavence guide for XPath services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%x.ancestor%&gt;</td>
<td>[x.ancestors()/]</td>
</tr>
<tr>
<td>&lt;%x.parent%&gt;</td>
<td>[x.eContainer()/]</td>
</tr>
<tr>
<td>&lt;%self%&gt;</td>
<td>[self/]</td>
</tr>
<tr>
<td>&lt;%x.child%&gt;</td>
<td>[x.eContents()/]</td>
</tr>
<tr>
<td>&lt;%x.descendant%&gt;</td>
<td>[x.eAllContents()/]</td>
</tr>
<tr>
<td>&lt;%x.precedingSibling%&gt;</td>
<td>[x.precedingSiblings()/]</td>
</tr>
<tr>
<td>&lt;%x.preceding%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%x.followingSibling%&gt;</td>
<td>[x.followingSiblings()/]</td>
</tr>
<tr>
<td>&lt;%x.following%&gt;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</section>
<section id="enode">
<div class="page-header">
<h1>ENode Services</h1>
</div>
<p>
Equilavence guide for ENode services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%eObject.adapt(&quot;EObject&quot;)%&gt;</td>
<td>[eObject/]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;ENodeList&quot;)%&gt;</td>
<td>[if (eObject.oclIsUndefined())][Sequence{}/][else][Sequence{eObject}/][/if]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;String&quot;)%&gt;</td>
<td>[if (eObject.oclIsUndefined())][''/][else][eObject.toString()/][/if]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;Boolean&quot;)%&gt;</td>
<td>[not eObject.oclIsUndefined()/]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;int&quot;)%&gt;</td>
<td>[eObject-&gt;size()/]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;double&quot;)%&gt;</td>
<td>[eObject-&gt;size().toString().toReal()/]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;List&quot;)%&gt;</td>
<td>[if (eObject.oclIsUndefined())][Sequence{}/][else][Sequence{eObject}/][/if]</td>
</tr>
<tr>
<td>&lt;%eObject.adapt(&quot;ENode&quot;)%&gt;</td>
<td>[eObject/]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;EObject&quot;)%&gt;</td>
<td>[if (list.oclIsUndefined())][null/][elseif (list-&gt;size() == 0)][else][list.at(0)/][/if]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;ENodeList&quot;)%&gt;</td>
<td>[if (list.oclIsUndefined())][Sequence{}/][else][list/][/if]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;String&quot;)%&gt;</td>
<td>[if (list.oclIsUndefined())][''/][else][list.toString()/][/if]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;Boolean&quot;)%</td>
<td>[list-&gt;size() &gt; 0/]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;int&quot;)%&gt;</td>
<td>[list-&gt;size()/]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;double&quot;)%&gt;</td>
<td>[list-&gt;size().toString().toReal()/]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;List&quot;)%&gt;</td>
<td>[if (list.oclIsUndefined())][Sequence{}/][else][list/][/if]</td>
</tr>
<tr>
<td>&lt;%list.adapt(&quot;ENode&quot;)%&gt;</td>
<td>[list/]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;EObject&quot;)%&gt;</td>
<td>can only return empty enodes in Acceleo 2, so migration is simply &quot;nothing&quot;</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;ENodeList&quot;)%&gt;</td>
<td>[if (string.oclIsUndefined())][Sequence{}/][else][Sequence{string}/][/if]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;String&quot;)%&gt;</td>
<td>[string/]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;Boolean&quot;)%&gt;</td>
<td>[string.equalsIgnoreCase('true')/]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;int&quot;)%&gt;</td>
<td>[string.toInt()/]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;double&quot;)%&gt;</td>
<td>[string.toReal()/]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;List&quot;)%&gt;</td>
<td>[if (string.oclIsUndefined())][Sequence{}/][else][Sequence{string}/][/if]</td>
</tr>
<tr>
<td>&lt;%string.adapt(&quot;ENode&quot;)%&gt;</td>
<td>[string/]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;EObject&quot;)%&gt;</td>
<td>can only return empty enodes in Acceleo 2, so migration is simply &quot;nothing&quot;</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;ENodeList&quot;)%&gt;</td>
<td>[if (boolean.oclIsUndefined())][Sequence{}/][else][Sequence{boolean}/][/if]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;String&quot;)%&gt;</td>
<td>[if (boolean.oclIsUndefined())][''/][else][boolean.toString()/][/if]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;Boolean&quot;)%&gt;</td>
<td>[not boolean.oclIsUndefined() and boolean/]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;int&quot;)%&gt;</td>
<td>[if (not boolean.oclIsUndefined() and boolean)][1/][else][0/][/if]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;double&quot;)%&gt;</td>
<td>[if (not boolean.oclIsUndefined() and boolean)][1.0/][else][0.0/][/if]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;List&quot;)%&gt;</td>
<td>[if (boolean.oclIsUndefined())][Sequence{}/][else][Sequence{boolean}/][/if]</td>
</tr>
<tr>
<td>&lt;%boolean.adapt(&quot;ENode&quot;)%&gt;</td>
<td>[boolean/]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;EObject&quot;)%&gt;</td>
<td>can only return empty enodes in Acceleo 2, so migration is simply &quot;nothing&quot;</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;ENodeList&quot;)%&gt;</td>
<td>[if (int.oclIsUndefined())][Sequence{}/][else][Sequence{int}/][/if]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;String&quot;)%&gt;</td>
<td>[if (int.oclIsUndefined())][''/][else][int.toString()/][/if]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;Boolean&quot;)%&gt;</td>
<td>[not int.oclIsUndefined() and int &gt; 0/]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;int&quot;)%&gt;</td>
<td>[if (int.oclIsUndefined())][0/][else][int/][/if]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;double&quot;)%&gt;</td>
<td>[if (int.oclIsUndefined())][0.0/][else][int.toString().toReal()/][/if]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;List&quot;)%&gt;</td>
<td>[if (int.oclIsUndefined())][Sequence{}/][else][Sequence{int}/][/if]</td>
</tr>
<tr>
<td>&lt;%int.adapt(&quot;ENode&quot;)%&gt;</td>
<td>[int/]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;EObject&quot;)%&gt;</td>
<td>can only return empty enodes in Acceleo 2, so migration is simply &quot;nothing&quot;</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;ENodeList&quot;)%&gt;</td>
<td>[if (double.oclIsUndefined())][Sequence{}/][else][Sequence{double}/][/if]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;String&quot;)%&gt;</td>
<td>[if (double.oclIsUndefined())][''/][else][double.toString()/][/if]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;Boolean&quot;)%&gt;</td>
<td>[not double.oclIsUndefined() and double &gt; 0/]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;int&quot;)%&gt;</td>
<td>[if (double.oclIsUndefined())][0/][else][double.toString().toInt()/][/if]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;double&quot;)%&gt;</td>
<td>[if (double.oclIsUndefined())][0.0/][else][double/][/if]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;List&quot;)%&gt;</td>
<td>[if (double.oclIsUndefined())][Sequence{}/][else][Sequence{double}/][/if]</td>
</tr>
<tr>
<td>&lt;%double.adapt(&quot;ENode&quot;)%&gt;</td>
<td>[double/]</td>
</tr>
<tr>
<td>&lt;%list.cast(&quot;EClass&quot;)%&gt;</td>
<td>[list-&gt;select(not oclIsKindOf(EObject) or oclIsKindOf(EClass))/]</td>
</tr>
<tr>
<td>&lt;%list.filter(&quot;EClass&quot;)%&gt;</td>
<td>[list-&gt;select(not oclIsKindOf(EObject) or oclIsKindOf(EClass))/]</td>
</tr>
<tr>
<td>&lt;%current()%&gt;</td>
<td>[self/]</td>
</tr>
<tr>
<td>&lt;%current(1)%&gt;</td>
<td>iterator variables are named in Acceleo 3</td>
</tr>
<tr>
<td>&lt;%node.debug%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%node.trace%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%node.trace(&quot;name&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%nPut(&quot;key&quot;, object)%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%nGet(&quot;key&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%nPeek%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%nPop%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%nPush%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%list.nMinimize%&gt;</td>
<td>[list-&gt;asOrderedSet()-&gt;asSequence()/]</td>
</tr>
<tr>
<td>&lt;%list.minimize%&gt;</td>
<td>[list-&gt;asOrderedSet()-&gt;asSequence()/]</td>
</tr>
<tr>
<td>&lt;%list.nContains(item)%&gt;</td>
<td>[list-&gt;includes(item)/]</td>
</tr>
<tr>
<td>&lt;%list.nFirst%&gt;</td>
<td>[list-&gt;first()/]</td>
</tr>
<tr>
<td>&lt;%list.nLast%&gt;</td>
<td>[list-&gt;last()/]</td>
</tr>
<tr>
<td>&lt;%list.nGet(0)%&gt;</td>
<td>[list-&gt;at(0)/]</td>
</tr>
<tr>
<td>&lt;%list.nGet(0, 1)%&gt;</td>
<td>[list-&gt;subSequence(1, 2)/]</td>
</tr>
<tr>
<td>&lt;%list.nReverse%&gt;</td>
<td>[list-&gt;reverse()/]</td>
</tr>
<tr>
<td>&lt;%list.reverse%&gt;</td>
<td>[list-&gt;reverse()/]</td>
</tr>
<tr>
<td>&lt;%list.nSize%&gt;</td>
<td>[list-&gt;size()/]</td>
</tr>
<tr>
<td>&lt;%list.nSort%&gt;</td>
<td>[list-&gt;sortedBy(toString())/]</td>
</tr>
<tr>
<td>&lt;%list.nSort(name)%&gt;</td>
<td>[list-&gt;sortedBy(name)/]</td>
</tr>
<tr>
<td>&lt;%list.sort%&gt;</td>
<td>[list-&gt;sortedBy(toString())-&gt;asOrderedSet()-&gt;asSequence()/]</td>
</tr>
<tr>
<td>&lt;%list.sort(name)%&gt;</td>
<td>[list-&gt;sortedBy(name)-&gt;asOrderedSet()-&gt;asSequence()/]</td>
</tr>
<tr>
<td>&lt;%list.sep(&quot;,&quot;)%&gt;</td>
<td>[list-&gt;sep(',')/]</td>
</tr>
<tr>
<td>&lt;%list.sepStr(&quot;,&quot;)%&gt;</td>
<td>[list-&gt;sep(',')/]</td>
</tr>
<tr>
<td>&lt;%node.toString%&gt;</td>
<td>[node.toString()/]</td>
</tr>
<tr>
<td>&lt;%eObject.until(&quot;eContainer&quot;, &quot;EClass&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</section>
<section id="context">
<div class="page-header">
<h1>Context Services</h1>
</div>
<p>
Equilavence guide for Context services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%get(&quot;key&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%peek%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%pop%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%push%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%put(&quot;key&quot;, object)</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</section>
<section id="properties">
<div class="page-header">
<h1>Properties Services</h1>
</div>
<p>
Equilavence guide for Properties services.
</p>
<table class="table table-striped table-bordered table-condensed">
<colgroup>
<col width="43%" />
<col width="57%" />
</colgroup>
<thead valign="bottom">
<tr>
<th class="head">Acceleo 2 Expression</th>
<th class="head">Acceleo 3 Expression (OCL)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>&lt;%getBestProperty(&quot;partial.key&quot;)%&gt;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&lt;%getProperty(&quot;key&quot;)%&gt;</td>
<td>[getProperty('key')/]</td>
</tr>
<tr>
<td>&lt;%getProperty(&quot;propertiesFile&quot;, &quot;key&quot;)%&gt;</td>
<td>[getProperty('propertiesFile', 'key')/]</td>
</tr>
</tbody>
</table>
<br />
<br />
</section>
<footer class="footer">
<p>
The material in these guides are Copyright (c) 2008, 2012 Obeo. This material is available under the Eclipse Public License v1.0
</p>
</footer>
</footer>
</div>
</body>
</html>