Initial commit to the PapyrusRT repository.
This is the initial commit as submitted to CQ 9646.
The repository contains two top-level folders:
- codegen: the code-generator
- rts: the run-time system
Also-by: Andrew Eidsness, Zeligsoft contractor, andrewe@jfront.com,
Barry Maher, Zeligsoft contractor, bmaher@gpinc.ca, Ernesto Posse,
Zeligsoft, eposse@zeligsoft.com, Tim McGuire, Zeligsoft,
tmcguire@zeligsoft.com, Young-Soo Roh, Zeligsoft, ysroh@zeligsoft.com,
Toby McClean, Zeligsoft, toby@zeligsoft.com, Charles Rivet, Zeligsoft,
charles@zeligsoft.com, Andreas Henriksson, Ericsson,
andreas.henriksson@ericsson.com, Akos Horvath, IncQuery Labs,
akos.horvath@incquerylabs.com, Gabor Batori, Ericsson,
Gabor.Batori@ericsson.com, Abel Hegedus, IncQuery Labs,
abel.hegedus@incquerylabs.com, Denes Harmath, IncQuery Labs,
harmathdenes@gmail.com
Signed-off-by: Ernesto Posse <eposse@gmail.com>
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/.project b/codegen/org.eclipse.papyrusrt.codegen-feature/.project
new file mode 100644
index 0000000..d184fa3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen-feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen-feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/build.properties b/codegen/org.eclipse.papyrusrt.codegen-feature/build.properties
new file mode 100644
index 0000000..286c0b7
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+ epl-v10.html,\
+ license.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/epl-v10.html b/codegen/org.eclipse.papyrusrt.codegen-feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/feature.properties b/codegen/org.eclipse.papyrusrt.codegen-feature/feature.properties
new file mode 100644
index 0000000..11ac9ed
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/feature.properties
@@ -0,0 +1,132 @@
+# NLS_MESSAGEFORMAT_VAR
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+\t- Content may be structured and packaged into modules to facilitate delivering,\n\
+\t extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+\t plug-in fragments ("Fragments"), and features ("Features").\n\
+\t- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+\t in a directory named "plugins".\n\
+\t- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+\t Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+\t Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+\t numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+\t- Features may also include other Features ("Included Features"). Within a Feature, files\n\
+\t named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+\t- The top-level (root) directory\n\
+\t- Plug-in and Fragment directories\n\
+\t- Inside Plug-ins and Fragments packaged as JARs\n\
+\t- Sub-directories of the directory named "src" of certain Plug-ins\n\
+\t- Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+\t- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+\t- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+\t- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+\t- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+\t- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+\t1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+\t the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+\t extending or updating the functionality of an Eclipse-based product.\n\
+\t2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+\t Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+\t3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+\t govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+\t Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+\t with the Specification. Such Installable Software Agreement must inform the user of the\n\
+\t terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+\t the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+\t indication of agreement by the user, the provisioning Technology will complete installation\n\
+\t of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/feature.xml b/codegen/org.eclipse.papyrusrt.codegen-feature/feature.xml
new file mode 100644
index 0000000..13910ac
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/feature.xml
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.papyrusrt.codegen-feature"
+ label="Papyrus-RT Code Generator"
+ version="0.5.0.qualifier"
+ provider-name="Zeligsoft (2009) Limited">
+
+ <description url="http://www.example.com/description">
+ Papyrus-RT is an industrial-grade, complete modeling environment
+for the development of complex, software intensive, real-time,
+embedded, cyber-physical systems.
+
+This feature contains the code generator for use both within
+Eclipse and as a stand-alone application.
+ </description>
+
+ <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+ Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+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
+ </copyright>
+
+ <license url="https://eclipse.org/legal/epl/notice.html">
+ Eclipse Foundation Software User Agreement
+
+April 9, 2014
+
+Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.
+
+Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL, "Program" will mean the Content.
+
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").
+
+Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").
+Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".
+A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.
+Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:
+
+The top-level (root) directory
+Plug-in and Fragment directories
+Inside Plug-ins and Fragments packaged as JARs
+Sub-directories of the directory named "src" of certain Plug-ins
+Feature directories
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
+Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
+Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
+Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
+Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.
+
+Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").
+
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:
+
+A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.
+During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.
+Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.
+Cryptography
+
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.
+
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+ </license>
+
+ <url>
+ <update label="Papyrus-RT update site" url="https://umlrt.zeligsoft.com/updatesite"/>
+ </url>
+
+ <requires>
+ <import plugin="org.eclipse.emf.ecore"/>
+ <import plugin="org.eclipse.uml2.uml" version="4.1.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.uml2.uml" version="5.0.1" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.uml2.uml.resources" version="5.0.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.papyrus.umlrt" version="1.0.1" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.emf.common"/>
+ <import plugin="org.eclipse.ocl" version="3.4.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.equinox.registry"/>
+ <import plugin="org.eclipse.papyrus.cpp.profile"/>
+ <import plugin="org.eclipse.xtext.xbase.lib"/>
+ <import plugin="org.eclipse.papyrusrt.rts" version="0.5.0" match="greaterOrEqual"/>
+ <import plugin="org.apache.commons.cli" version="1.2.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.ui"/>
+ <import plugin="org.eclipse.core.databinding" version="1.4.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.emf.transaction" version="1.8.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.emf.workspace" version="1.5.1" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.papyrus.codegen.base" version="1.0.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.papyrus.infra.core" version="1.0.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.papyrus.infra.core.log"/>
+ <import plugin="org.eclipse.papyrus.infra.emf"/>
+ <import plugin="org.eclipse.papyrus.infra.widgets"/>
+ <import plugin="org.eclipse.papyrus.uml.tools"/>
+ <import plugin="org.eclipse.papyrus.uml.properties"/>
+ <import plugin="org.eclipse.papyrus.views.properties" version="1.0.1" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.xtend.lib" version="2.7.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.core.runtime" version="3.10.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.xtext.xbase" version="2.7.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.uml2.types"/>
+ <import plugin="org.eclipse.core.runtime" version="3.11.0" match="greaterOrEqual"/>
+ <import feature="org.eclipse.papyrus.extra.umlrt.feature" version="1.0.1" match="greaterOrEqual"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.cpp.profile"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.standalone"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.papyrus"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.utils"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.cpp.structure"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.lang.cpp"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.lang"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.cpp.rts"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.statemachines.flat.model"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.statemachines.flat"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.cpp"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.xtumlrt.trans"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.codegen.cpp.statemachines.flat"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.xtumlrt.common.model"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.xtumlrt.platform.cpp.model"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.xtumlrt.platform.model"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrusrt.xtumlrt.umlrt.model"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+</feature>
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/license.html b/codegen/org.eclipse.papyrusrt.codegen-feature/license.html
new file mode 100644
index 0000000..0fd3dd1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen-feature/pom.xml b/codegen/org.eclipse.papyrusrt.codegen-feature/pom.xml
new file mode 100644
index 0000000..9ff800b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen-feature/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen-feature</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/.project b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/.project
new file mode 100644
index 0000000..32bfc80
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.cpp.profile</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a68779c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: UML-RT C++ Propeties Set Profile
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.cpp.profile;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Require-Bundle: org.eclipse.emf.ecore,
+ org.eclipse.uml2.uml
+Bundle-Vendor: Zeligsoft (2009) Limited
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/about.html b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/about.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/build.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/build.properties
new file mode 100644
index 0000000..b87f2f7
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/build.properties
@@ -0,0 +1,4 @@
+bin.includes = META-INF/,\
+ plugin.xml,\
+ about.html,\
+ profiles/
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/plugin.xml
new file mode 100644
index 0000000..1121aff
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.emf.ecore.uri_mapping">
+ <mapping
+ source="pathmap://UMLRT_CPP/"
+ target="platform:/plugin/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/">
+ </mapping>
+ </extension>
+ <extension
+ point="org.eclipse.uml2.uml.dynamic_package">
+ <profile
+ uri="http://www.eclipse.org/papyrusrt/codegen/cpp/cppproperties/1"
+ location="pathmap://UMLRT_CPP/RTCppProperties.profile.uml#_0">
+ </profile>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.uml.extensionpoints.UMLProfile">
+ <profile
+ description="C/C++ profile used for code generation"
+ name="UML-RT C++ Property Set Profile"
+ path="pathmap://UMLRT_CPP/RTCppProperties.profile.uml"/>
+ </extension>
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/pom.xml
new file mode 100644
index 0000000..446f8f4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.cpp.profile</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.di b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.di
new file mode 100644
index 0000000..bf9abab
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.notation b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.notation
new file mode 100644
index 0000000..74d8ac2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.notation
@@ -0,0 +1,960 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+ <notation:Diagram xmi:id="_vpB-kLs8EeSTjNEQkASznQ" type="PapyrusUMLProfileDiagram" name="C++ Properties" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_z6PVELs8EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_z6RxULs8EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z6RxUbs8EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_M4hQMLtAEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_SUbKILs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_M4hQMbtAEeSTjNEQkASznQ" x="37" y="21"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KJ2EYLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_Hdt1ULv5EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KJ2EYbv5EeSTjNEQkASznQ" x="47" y="31"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z6RxUrs8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z6RxU7s8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z6RxVLs8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6RxVbs8EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z6SYYLs8EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z6SYYbs8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z6SYYrs8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z6SYY7s8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6SYZLs8EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_z5-2YLs8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z6PVEbs8EeSTjNEQkASznQ" x="306" y="302"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_G719wLs9EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_G719wrs9EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G72k0Ls9EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_-A94ALs9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_yu4fwLs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_-A94Abs9EeSTjNEQkASznQ" x="32" y="14"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_tA5z0Ls-EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_kNZ94Ls-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_tA5z0bs-EeSTjNEQkASznQ" x="71" y="26"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LQ4ZcLs_EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_INlnkLs_EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LQ4Zcbs_EeSTjNEQkASznQ" x="88" y="35"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_d-DDMLs_EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_Xc1Y8Ls_EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_d-DDMbs_EeSTjNEQkASznQ" x="82" y="55"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_c3rucLv3EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_7a0WELv2EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_c3rucbv3EeSTjNEQkASznQ" x="99" y="77"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qEkmgLv3EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_j30wYLv3EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qEkmgbv3EeSTjNEQkASznQ" x="104" y="106"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qEnCwLv3EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_knXW8Lv3EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qEnCwbv3EeSTjNEQkASznQ" x="104" y="106"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G72k0bs9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G72k0rs9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G72k07s9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G72k1Ls9EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G72k1bs9EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G72k1rs9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G72k17s9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G72k2Ls9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G72k2bs9EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_G70IkLs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G719wbs9EeSTjNEQkASznQ" x="-153" y="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_JG6HILs9EeSTjNEQkASznQ" type="2006">
+ <children xmi:type="notation:DecorationNode" xmi:id="_JG6HIrs9EeSTjNEQkASznQ" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JG6HI7s9EeSTjNEQkASznQ" type="1063">
+ <children xmi:type="notation:Shape" xmi:id="_BZn14Ls-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_OoCNYLs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_BZn14bs-EeSTjNEQkASznQ" x="61" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_BZq5MLs-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_Pw2PkLs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_BZq5Mbs-EeSTjNEQkASznQ" x="61" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_BZtVcLs-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_T1d7kLs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_BZtVcbs-EeSTjNEQkASznQ" x="61" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_BZwYwLs-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_ZSHxgLs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_BZwYwbs-EeSTjNEQkASznQ" x="61" y="22"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JG6HJLs9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_JG6HJbs9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_JG6HJrs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JG6HJ7s9EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="RTCppProperties.profile.uml#_JGepULs9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JG6HIbs9EeSTjNEQkASznQ" x="1184" y="290" height="117"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HX-DoLs-EeSTjNEQkASznQ" type="2006">
+ <children xmi:type="notation:DecorationNode" xmi:id="_HX-Dors-EeSTjNEQkASznQ" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HX-Do7s-EeSTjNEQkASznQ" type="1063">
+ <children xmi:type="notation:Shape" xmi:id="_Qcwd4Ls-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_LoCKoLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qcwd4bs-EeSTjNEQkASznQ" x="61" y="23"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Qcy6ILs-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_MddWwLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qcy6Ibs-EeSTjNEQkASznQ" x="61" y="23"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Qc19cLs-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_NbwLALs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qc19cbs-EeSTjNEQkASznQ" x="61" y="23"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Qc5AwLs-EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_O_xigLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qc5Awbs-EeSTjNEQkASznQ" x="61" y="23"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HX-DpLs-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HX-Dpbs-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HX-Dprs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HX-Dp7s-EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="RTCppProperties.profile.uml#_HX7nYLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HX-Dobs-EeSTjNEQkASznQ" x="158" y="315" height="115"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5BjiQLs-EeSTjNEQkASznQ" type="2006">
+ <children xmi:type="notation:DecorationNode" xmi:id="_5BkJULs-EeSTjNEQkASznQ" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5BkJUbs-EeSTjNEQkASznQ" type="1063">
+ <children xmi:type="notation:Shape" xmi:id="_ENRMwLs_EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_9sfAULs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ENRMwbs_EeSTjNEQkASznQ" x="32" y="28"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ENTpALs_EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_CS3VkLs_EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ENTpAbs_EeSTjNEQkASznQ" x="32" y="28"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ENWFQLs_EeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#__AKOsLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ENWFQbs_EeSTjNEQkASznQ" x="32" y="28"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5BkJUrs-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5BkJU7s-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5BkJVLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5BkJVbs-EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="RTCppProperties.profile.uml#_5Bi7MLs-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5BjiQbs-EeSTjNEQkASznQ" x="1183" y="109" height="91"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_DfxnELtfEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_DfyOILtfEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DfyOIbtfEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_Gbq7ALtgEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_F6MX4LtbEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Gbq7AbtgEeSTjNEQkASznQ" x="40" y="15"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Gwjl4LtgEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_Gp8Z0LtbEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Gwjl4btgEeSTjNEQkASznQ" x="32" y="23"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HHKIALtgEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_Hj1PMLtbEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HHKIAbtgEeSTjNEQkASznQ" x="46" y="43"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HbgnYLtgEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_IpyxsLtbEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HbgnYbtgEeSTjNEQkASznQ" x="51" y="60"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DfyOIrtfEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DfyOI7tfEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DfyOJLtfEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DfyOJbtfEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DfyOJrtfEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DfyOJ7tfEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DfyOKLtfEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DfyOKbtfEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DfyOKrtfEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_DfwY8LtfEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DfxnEbtfEeSTjNEQkASznQ" x="686" y="74"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ex--kLtgEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ex_loLtgEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ex_lobtgEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_ofdJcLtgEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_gbrgQLtgEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ofdJcbtgEeSTjNEQkASznQ" x="38" y="13"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_offlsLtgEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_g-fSYLtgEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_offlsbtgEeSTjNEQkASznQ" x="38" y="13"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ex_lortgEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ex_lo7tgEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ex_lpLtgEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ex_lpbtgEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ex_lprtgEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ex_lp7tgEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ex_lqLtgEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ex_lqbtgEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ex_lqrtgEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_ex9wcLtgEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ex--kbtgEeSTjNEQkASznQ" x="443" y="488"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LEkt4LtiEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_LEkt4rtiEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LEkt47tiEeSTjNEQkASznQ" type="1071">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LEkt5LtiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LEkt5btiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LEkt5rtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LEkt57tiEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LEkt6LtiEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LEkt6btiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LEkt6rtiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LEkt67tiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LEkt7LtiEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_LEi4sLtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LEkt4btiEeSTjNEQkASznQ" x="527" y="299"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_PMDgoLtiEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PMEHsLtiEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_PMEHsbtiEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_jC5IMLtiEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_VxI-QLtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_jC5IMbtiEeSTjNEQkASznQ" x="38" y="17"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_jC69YLtiEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_WWXyQLtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_jC69YbtiEeSTjNEQkASznQ" x="38" y="17"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_jC9ZoLtiEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_XQ6H4LtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_jC9ZobtiEeSTjNEQkASznQ" x="38" y="17"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_PMEHsrtiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_PMEHs7tiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_PMEHtLtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PMEHtbtiEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_PMEHtrtiEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_PMEHt7tiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_PMEHuLtiEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_PMEHubtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PMEHurtiEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_PMC5kLtiEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PMDgobtiEeSTjNEQkASznQ" x="371" y="89"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_2_-sQLtjEeSTjNEQkASznQ" type="1014">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2_-sQrtjEeSTjNEQkASznQ" type="1015"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2_-sQ7tjEeSTjNEQkASznQ" type="5063"/>
+ <element xmi:type="uml:Constraint" href="RTCppProperties.profile.uml#_soGScLtjEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2_-sQbtjEeSTjNEQkASznQ" x="141" y="220" width="183"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_UREAsLtkEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_UREAsrtkEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_UREAs7tkEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_zqp5wLtkEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_cR_xQLtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zqp5wbtkEeSTjNEQkASznQ" x="70" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zqru8LtkEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_dEdwALtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zqru8btkEeSTjNEQkASznQ" x="70" y="25"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_UREAtLtkEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UREAtbtkEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UREAtrtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UREAt7tkEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_UREAuLtkEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_UREAubtkEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UREAurtkEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UREAu7tkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UREAvLtkEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_URCykLtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UREAsbtkEeSTjNEQkASznQ" x="883" y="297"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_rZjmQLtkEeSTjNEQkASznQ" type="2006">
+ <children xmi:type="notation:DecorationNode" xmi:id="_rZkNULtkEeSTjNEQkASznQ" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_rZkNUbtkEeSTjNEQkASznQ" type="1063">
+ <children xmi:type="notation:Shape" xmi:id="_r_BDwLtkEeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_mW92ILtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_r_BDwbtkEeSTjNEQkASznQ" x="44" y="30"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_r_DgALtkEeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_ndKpMLtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_r_DgAbtkEeSTjNEQkASznQ" x="44" y="30"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_r_FVMLtkEeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_oUnOkLtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_r_FVMbtkEeSTjNEQkASznQ" x="44" y="30"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_rZkNUrtkEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_rZkNU7tkEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_rZkNVLtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rZkNVbtkEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="RTCppProperties.profile.uml#_e5SjoLtkEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rZjmQbtkEeSTjNEQkASznQ" x="962" y="154"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_annLsLtnEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_annywLtnEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_annywbtnEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_jT4YQLtnEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_gjD2cLtnEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_jT4YQbtnEeSTjNEQkASznQ" x="32" y="28"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_annywrtnEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_annyw7tnEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_annyxLtnEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_annyxbtnEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_annyxrtnEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_annyx7tnEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_annyyLtnEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_annyybtnEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_annyyrtnEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_anl9kLtnEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_annLsbtnEeSTjNEQkASznQ" x="386" y="699" height="55"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_mAfoILtqEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_mAfoIrtqEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_mAfoI7tqEeSTjNEQkASznQ" type="1071">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_mAfoJLtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_mAfoJbtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_mAfoJrtqEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mAfoJ7tqEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_mAfoKLtqEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_mAfoKbtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_mAfoKrtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_mAfoK7tqEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mAfoLLtqEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_mAeaALtqEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mAfoIbtqEeSTjNEQkASznQ" x="720" y="309"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_2a16sLtqEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2a16srtqEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2a16s7tqEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_fgnIsLtsEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_YbzpMLtsEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fgnIsbtsEeSTjNEQkASznQ" x="34" y="24"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fgqMALtsEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_Y7YhILtsEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fgqMAbtsEeSTjNEQkASznQ" x="34" y="24"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_a_UqoLtzEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_ZarsQLtsEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_a_UqobtzEeSTjNEQkASznQ" x="49" y="43"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_eiff4Lv2EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_YWaHoLtzEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_eiff4bv2EeSTjNEQkASznQ" x="33" y="59"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2a16tLtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2a16tbtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2a16trtqEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2a16t7tqEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2a16uLtqEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2a16ubtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2a16urtqEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2a16u7tqEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2a16vLtqEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_2a0skLtqEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2a16sbtqEeSTjNEQkASznQ" x="-148" y="492"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_uOrVELtrEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_uOr8ILtrEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uOsjMLtrEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_LMLs0Ml7EeS9zpwN4FvQsA" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_LIgGsMl7EeS9zpwN4FvQsA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LMLs0cl7EeS9zpwN4FvQsA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ZNo1YMl7EeS9zpwN4FvQsA" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_ZNlLAMl7EeS9zpwN4FvQsA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZNo1Ycl7EeS9zpwN4FvQsA"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uOsjMbtrEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uOsjMrtrEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uOsjM7trEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uOsjNLtrEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uOsjNbtrEeSTjNEQkASznQ" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uOsjNrtrEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uOsjN7trEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uOsjOLtrEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uOsjObtrEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_uOquALtrEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uOrVEbtrEeSTjNEQkASznQ" x="1180" y="449"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_F29_kLttEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_F29_krttEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_F29_k7ttEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_MmUzgLttEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_JTABkLttEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MmUzgbttEeSTjNEQkASznQ" x="55" y="17"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_F29_lLttEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_F29_lbttEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_F29_lrttEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F29_l7ttEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_F29_mLttEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_F29_mbttEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_F29_mrttEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_F29_m7ttEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F29_nLttEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_F28xcLttEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F29_kbttEeSTjNEQkASznQ" x="-118" y="281" height="54"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_UAw9ELtzEeSTjNEQkASznQ" type="2006">
+ <children xmi:type="notation:DecorationNode" xmi:id="_UAw9ErtzEeSTjNEQkASznQ" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_UAw9E7tzEeSTjNEQkASznQ" type="1063">
+ <children xmi:type="notation:Shape" xmi:id="_U7qfELtzEeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_QLkNILtzEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_U7qfEbtzEeSTjNEQkASznQ" x="45" y="19"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_U7sUQLtzEeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_RFnakLtzEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_U7sUQbtzEeSTjNEQkASznQ" x="45" y="19"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_U7uJcLtzEeSTjNEQkASznQ" type="1037">
+ <element xmi:type="uml:EnumerationLiteral" href="RTCppProperties.profile.uml#_SUDjoLtzEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_U7uJcbtzEeSTjNEQkASznQ" x="45" y="19"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_UAw9FLtzEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UAw9FbtzEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UAw9FrtzEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UAw9F7tzEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="RTCppProperties.profile.uml#_Nbf5QLtzEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UAw9EbtzEeSTjNEQkASznQ" x="-121" y="392" height="72"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_DBFHYLv4EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_DBFHYrv4EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DBFucLv4EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_PoUUsLv4EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_jLH6ULtmEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PoUUsbv4EeSTjNEQkASznQ" x="49" y="10"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Apo5cLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_SO6jgLv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Apo5cbv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ApquoLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_S4VT8Lv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Apquobv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Apsj0Lv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_TZdEALv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Apsj0bv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ApuZALv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_UTlxALv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ApuZAbv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ApwOMLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_UyXXsLv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ApwOMbv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ApyqcLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_hVXlQLv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Apyqcbv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Apz4kLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_h4bPALv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Apz4kbv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Ap1twLv5EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_iX8ckLv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Ap1twbv5EeSTjNEQkASznQ" x="43" y="33"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DBFucbv4EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DBFucrv4EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DBFuc7v4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DBFudLv4EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DBFudbv4EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DBFudrv4EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DBFud7v4EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DBFueLv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DBFuebv4EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_DBEgULv4EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DBFHYbv4EeSTjNEQkASznQ" x="125" y="479"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_6cXXgLv7EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_6cXXgrv7EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6cXXg7v7EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_AFzFMLv8EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_9xoDILv7EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_AFzFMbv8EeSTjNEQkASznQ" x="67" y="12"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6cXXhLv7EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6cXXhbv7EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6cXXhrv7EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6cXXh7v7EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6cX-kLv7EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6cX-kbv7EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6cX-krv7EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6cX-k7v7EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6cX-lLv7EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_6cViULv7EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6cXXgbv7EeSTjNEQkASznQ" x="938" y="448" height="60"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_WW26MLwBEeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_WW26MrwBEeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_WW26M7wBEeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_yriQwLwBEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_uZIAYLwBEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_yriQwbwBEeSTjNEQkASznQ" x="56" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_yrkF8LwBEeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_u0-O4LwBEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_yrkF8bwBEeSTjNEQkASznQ" x="56" y="22"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WW26NLwBEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WW26NbwBEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WW26NrwBEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WW26N7wBEeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_WW26OLwBEeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WW26ObwBEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WW26OrwBEeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WW26O7wBEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WW26PLwBEeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_WW1sELwBEeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WW26MbwBEeSTjNEQkASznQ" x="933" y="560" height="71"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LpRf0M4NEeSo_bwoIR2YQw" type="1031">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpSt8M4NEeSo_bwoIR2YQw" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpSt8c4NEeSo_bwoIR2YQw" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpSt8s4NEeSo_bwoIR2YQw" key="StereotypeList" value="StandardProfile::Metaclass"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpTVAM4NEeSo_bwoIR2YQw" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpTVAc4NEeSo_bwoIR2YQw" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpTVAs4NEeSo_bwoIR2YQw" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_LpSG4M4NEeSo_bwoIR2YQw" type="1084"/>
+ <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LpSG4c4NEeSo_bwoIR2YQw" x="9" y="412"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LpTVA84NEeSo_bwoIR2YQw" type="1031">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpT8Es4NEeSo_bwoIR2YQw" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpT8E84NEeSo_bwoIR2YQw" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpT8FM4NEeSo_bwoIR2YQw" key="StereotypeList" value="StandardProfile::Metaclass"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpT8Fc4NEeSo_bwoIR2YQw" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpUjIM4NEeSo_bwoIR2YQw" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpUjIc4NEeSo_bwoIR2YQw" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_LpT8EM4NEeSo_bwoIR2YQw" type="1084"/>
+ <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LpT8Ec4NEeSo_bwoIR2YQw" x="69" y="127"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LpUjIs4NEeSo_bwoIR2YQw" type="1031">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpVKMM4NEeSo_bwoIR2YQw" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpVKMc4NEeSo_bwoIR2YQw" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpVKMs4NEeSo_bwoIR2YQw" key="StereotypeList" value="StandardProfile::Metaclass"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpVKM84NEeSo_bwoIR2YQw" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpVKNM4NEeSo_bwoIR2YQw" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LpVKNc4NEeSo_bwoIR2YQw" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_LpUjJM4NEeSo_bwoIR2YQw" type="1084"/>
+ <element xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Parameter"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LpUjJc4NEeSo_bwoIR2YQw" x="36" y="279"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_vpB-kbs8EeSTjNEQkASznQ" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_vpB-krs8EeSTjNEQkASznQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_vpB-k7s8EeSTjNEQkASznQ">
+ <owner xmi:type="uml:Profile" href="RTCppProperties.profile.uml#_vl5LALs8EeSTjNEQkASznQ"/>
+ </styles>
+ <element xmi:type="uml:Profile" href="RTCppProperties.profile.uml#_vl5LALs8EeSTjNEQkASznQ"/>
+ <edges xmi:type="notation:Connector" xmi:id="_lrSGwLtiEeSTjNEQkASznQ" type="4002" source="_z6PVELs8EeSTjNEQkASznQ" target="_PMDgoLtiEeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lrSt0LtiEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lrSt0btiEeSTjNEQkASznQ" x="4" y="24"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lrSGwbtiEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_lrNOQLtiEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lrSGwrtiEeSTjNEQkASznQ" points="[11, -14, -78, 95]$[74, -91, -15, 18]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lrjzkLtiEeSTjNEQkASznQ" id="(0.6113989637305699,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lrjzkbtiEeSTjNEQkASznQ" id="(0.28804347826086957,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_mRYdcLtiEeSTjNEQkASznQ" type="4002" source="_LEkt4LtiEeSTjNEQkASznQ" target="_PMDgoLtiEeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_mRZEgLtiEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mRZEgbtiEeSTjNEQkASznQ" x="-8" y="32"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_mRYdcbtiEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_mRX2YLtiEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mRYdcrtiEeSTjNEQkASznQ" points="[-4, -8, 45, 98]$[-27, -89, 22, 17]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mRcH0LtiEeSTjNEQkASznQ" id="(0.32,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mRcu4LtiEeSTjNEQkASznQ" id="(0.8260869565217391,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_8cTyELtjEeSTjNEQkASznQ" type="4014" source="_2_-sQLtjEeSTjNEQkASznQ" target="_lrSGwLtiEeSTjNEQkASznQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_8cTyEbtjEeSTjNEQkASznQ"/>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_8cTyErtjEeSTjNEQkASznQ" points="[56, 11, -80, 28]$[138, 22, 2, 39]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_8cVnQLtjEeSTjNEQkASznQ" id="(0.25,0.2540983606557377)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_a8WlQLtqEeSTjNEQkASznQ" type="4002" source="_z6PVELs8EeSTjNEQkASznQ" target="_annLsLtnEeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_a8XMULtqEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_a8XMUbtqEeSTjNEQkASznQ" x="9" y="27"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_a8WlQbtqEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_a8V-MLtqEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_a8WlQrtqEeSTjNEQkASznQ" points="[16, 0, -21, -293]$[16, 293, -21, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a8aPoLtqEeSTjNEQkASznQ" id="(0.5113636363636364,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_a8a2sLtqEeSTjNEQkASznQ" id="(0.34558823529411764,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_dMHBYLtqEeSTjNEQkASznQ" type="4002" source="_z6PVELs8EeSTjNEQkASznQ" target="_ex--kLtgEeSTjNEQkASznQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_dMHBY7tqEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_dMHBZLtqEeSTjNEQkASznQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_dMHBYbtqEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_dMGaULtqEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dMHBYrtqEeSTjNEQkASznQ" points="[-2, -4, 119, 263]$[-103, -278, 18, -11]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dMKEsLtqEeSTjNEQkASznQ" id="(0.8341968911917098,0.9615384615384616)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dMKEsbtqEeSTjNEQkASznQ" id="(0.09803921568627451,0.038461538461538464)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_f4z4MLtqEeSTjNEQkASznQ" type="4002" source="_LEkt4LtiEeSTjNEQkASznQ" target="_ex--kLtgEeSTjNEQkASznQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_f4z4M7tqEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_f4z4NLtqEeSTjNEQkASznQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_f4z4MbtqEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_f4zRILtqEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_f4z4MrtqEeSTjNEQkASznQ" points="[1, 12, -9, -97]$[13, 101, 3, -8]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f427gLtqEeSTjNEQkASznQ" id="(0.25,0.88)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_f427gbtqEeSTjNEQkASznQ" id="(0.5833333333333334,0.07692307692307693)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_pB3HYLtqEeSTjNEQkASznQ" type="4002" source="_mAfoILtqEeSTjNEQkASznQ" target="_annLsLtnEeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_pB3HY7tqEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pB3HZLtqEeSTjNEQkASznQ" x="1" y="13"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_pB3HYbtqEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_pB2gULtqEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pB3HYrtqEeSTjNEQkASznQ" points="[-33, 0, 328, -290]$[-33, 227, 328, -63]$[-323, 227, 38, -63]$[-323, 290, 38, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pB6KsLtqEeSTjNEQkASznQ" id="(0.8137254901960784,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pB6KsbtqEeSTjNEQkASznQ" id="(0.4117647058823529,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_TCepgLtrEeSTjNEQkASznQ" type="4002" source="_PMDgoLtiEeSTjNEQkASznQ" target="_DfxnELtfEeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_TCfQkLtrEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_TCfQkbtrEeSTjNEQkASznQ" x="-1" y="13"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_TCepgbtrEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_TCeCcLtrEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TCepgrtrEeSTjNEQkASznQ" points="[0, 29, -130, 0]$[130, 29, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TCi68LtrEeSTjNEQkASznQ" id="(1.0,0.25833333333333336)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TCi68btrEeSTjNEQkASznQ" id="(0.0,0.5514705882352942)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_YthgwLtrEeSTjNEQkASznQ" type="4002" source="_mAfoILtqEeSTjNEQkASznQ" target="_DfxnELtfEeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_YtiH0LtrEeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YtiH0btrEeSTjNEQkASznQ" x="-3" y="28"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_YthgwbtrEeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_Ytg5sLtrEeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YthgwrtrEeSTjNEQkASznQ" points="[29, 0, -42, 99]$[29, -99, -42, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YtoOcLtrEeSTjNEQkASznQ" id="(0.22549019607843138,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YtoOcbtrEeSTjNEQkASznQ" id="(0.6772486772486772,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_QmxhALv4EeSTjNEQkASznQ" type="4002" source="_z6PVELs8EeSTjNEQkASznQ" target="_DBFHYLv4EeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QmyIELv4EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QmyIEbv4EeSTjNEQkASznQ" x="1" y="8"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QmxhAbv4EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_Qmw58Lv4EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QmxhArv4EeSTjNEQkASznQ" points="[-18, 19, 49, -55]$[-72, 64, -5, -10]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Qm1ycLv4EeSTjNEQkASznQ" id="(0.1590909090909091,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Qm1ycbv4EeSTjNEQkASznQ" id="(0.5286343612334802,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_P4DNYM4NEeSo_bwoIR2YQw" type="1013" source="_G719wLs9EeSTjNEQkASznQ" target="_LpTVA84NEeSo_bwoIR2YQw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_P4DNYc4NEeSo_bwoIR2YQw"/>
+ <element xmi:type="uml:Extension" href="RTCppProperties.profile.uml#_P4AxIM4NEeSo_bwoIR2YQw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_P4DNYs4NEeSo_bwoIR2YQw" points="[15, -4, -44, 0]$[50, -4, -9, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_P4G3wM4NEeSo_bwoIR2YQw" id="(0.9197860962566845,0.5434782608695652)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_P4He0M4NEeSo_bwoIR2YQw" id="(0.09,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_QlVKIM4NEeSo_bwoIR2YQw" type="1013" source="_F29_kLttEeSTjNEQkASznQ" target="_LpUjIs4NEeSo_bwoIR2YQw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_QlVKIc4NEeSo_bwoIR2YQw"/>
+ <element xmi:type="uml:Extension" href="RTCppProperties.profile.uml#_QlTU8c4NEeSo_bwoIR2YQw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QlVKIs4NEeSo_bwoIR2YQw" points="[11, 4, -65, 0]$[59, 0, -17, -4]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QlYNcM4NEeSo_bwoIR2YQw" id="(0.8962264150943396,0.2222222222222222)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QlYNcc4NEeSo_bwoIR2YQw" id="(0.17,0.36)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_RlowkM4NEeSo_bwoIR2YQw" type="1013" source="_2a16sLtqEeSTjNEQkASznQ" target="_LpRf0M4NEeSo_bwoIR2YQw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_Rlowkc4NEeSo_bwoIR2YQw"/>
+ <element xmi:type="uml:Extension" href="RTCppProperties.profile.uml#_RlmUUc4NEeSo_bwoIR2YQw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Rlowks4NEeSo_bwoIR2YQw" points="[3, -9, -28, 67]$[13, -83, -18, -7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Rlrz4M4NEeSo_bwoIR2YQw" id="(0.8089887640449438,0.0661764705882353)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Rlrz4c4NEeSo_bwoIR2YQw" id="(0.18,0.26)"/>
+ </edges>
+ </notation:Diagram>
+ <css:ModelStyleSheets xmi:id="_xuf2QLs8EeSTjNEQkASznQ"/>
+ <notation:Diagram xmi:id="_rY2fkLv8EeSTjNEQkASznQ" type="PapyrusUMLProfileDiagram" name="RTS Properties" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_tkvvYLv8EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_tkvvYrv8EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_tkvvY7v8EeSTjNEQkASznQ" type="1071">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_tkvvZLv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_tkvvZbv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_tkvvZrv8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tkvvZ7v8EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_tkvvaLv8EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_tkvvabv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_tkvvarv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_tkvva7v8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tkvvbLv8EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_tkuhQLv8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tkvvYbv8EeSTjNEQkASznQ" x="189" y="285" height="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_uofEULv8EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_uofEUrv8EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uofEU7v8EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_K6TesLv-EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_DvNJ8Lv-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_K6Tesbv-EeSTjNEQkASznQ" x="40" y="10"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uofEVLv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uofEVbv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uofEVrv8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uofEV7v8EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_uofEWLv8EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_uofEWbv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uofEWrv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uofEW7v8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uofEXLv8EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_uod2MLv8EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uofEUbv8EeSTjNEQkASznQ" x="559" y="265" height="60"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HCuloLv9EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_HCvMsLv9EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HCvMsbv9EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_L6SKcLv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_Jamb8Lv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_L6SKcbv9EeSTjNEQkASznQ" x="46" y="6"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HCvMsrv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HCvMs7v9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HCvMtLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HCvMtbv9EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HCvMtrv9EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HCvMt7v9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HCvMuLv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HCvMubv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HCvMurv9EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_HCt-kLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HCulobv9EeSTjNEQkASznQ" x="417" y="430"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_UOCJULv9EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_UOCJUrv9EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_UOCJU7v9EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_I6hYQLv-EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_WXw18Lv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_I6hYQbv-EeSTjNEQkASznQ" x="25" y="11"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_I6jNcLv-EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_W5kigLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_I6jNcbv-EeSTjNEQkASznQ" x="25" y="11"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_I6lCoLv-EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_hyRxcLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_I6lCobv-EeSTjNEQkASznQ" x="25" y="11"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_UOCJVLv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UOCJVbv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UOCJVrv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UOCJV7v9EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_UOCwYLv9EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_UOCwYbv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UOCwYrv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UOCwY7v9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UOCwZLv9EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_UOBiQLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UOCJUbv9EeSTjNEQkASznQ" x="49" y="97"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nrCUkLv9EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_nrC7oLv9EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_nrC7obv9EeSTjNEQkASznQ" type="1071">
+ <children xmi:type="notation:Shape" xmi:id="_zOGvILv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_pk2V4Lv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zOGvIbv9EeSTjNEQkASznQ" x="25" y="6"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zOJLYLv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_qCHgsLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zOJLYbv9EeSTjNEQkASznQ" x="25" y="6"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zOKZgLv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_qeCnsLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zOKZgbv9EeSTjNEQkASznQ" x="25" y="6"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zOM1wLv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_rAXRoLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zOM1wbv9EeSTjNEQkASznQ" x="25" y="6"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_3ougULv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_11HNoLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_3ougUbv9EeSTjNEQkASznQ" x="58" y="71"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="__UzbMLv9EeSTjNEQkASznQ" type="3002">
+ <element xmi:type="uml:Property" href="RTCppProperties.profile.uml#_6a8wULv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="__UzbMbv9EeSTjNEQkASznQ" x="110" y="88"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_nrC7orv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_nrC7o7v9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_nrC7pLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nrC7pbv9EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_nrC7prv9EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_nrC7p7v9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_nrC7qLv9EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_nrC7qbv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nrC7qrv9EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_nrBGcLv9EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nrCUkbv9EeSTjNEQkASznQ" x="447" y="52"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_S0KW4Lv-EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_S0KW4rv-EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_S0KW47v-EeSTjNEQkASznQ" type="1071">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_S0KW5Lv-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_S0KW5bv-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_S0KW5rv-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_S0KW57v-EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_S0KW6Lv-EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_S0KW6bv-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_S0KW6rv-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_S0KW67v-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_S0KW7Lv-EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_S0Jv0Lv-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_S0KW4bv-EeSTjNEQkASznQ" x="418" y="264" height="53"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_WG3dwLv-EeSTjNEQkASznQ" type="1026">
+ <children xmi:type="notation:DecorationNode" xmi:id="_WG4E0Lv-EeSTjNEQkASznQ" type="1034"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_WG4E0bv-EeSTjNEQkASznQ" type="1071">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WG4E0rv-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WG4E07v-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WG4E1Lv-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WG4E1bv-EeSTjNEQkASznQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_WG4E1rv-EeSTjNEQkASznQ" visible="false" type="1019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WG4E17v-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WG4E2Lv-EeSTjNEQkASznQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WG4E2bv-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WG4E2rv-EeSTjNEQkASznQ"/>
+ </children>
+ <element xmi:type="uml:Stereotype" href="RTCppProperties.profile.uml#_WG22sLv-EeSTjNEQkASznQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WG3dwbv-EeSTjNEQkASznQ" x="9" y="284" height="54"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_rY2fkbv8EeSTjNEQkASznQ" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_rY2fkrv8EeSTjNEQkASznQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_rY2fk7v8EeSTjNEQkASznQ">
+ <owner xmi:type="uml:Profile" href="RTCppProperties.profile.uml#_vl5LALs8EeSTjNEQkASznQ"/>
+ </styles>
+ <element xmi:type="uml:Profile" href="RTCppProperties.profile.uml#_vl5LALs8EeSTjNEQkASznQ"/>
+ <edges xmi:type="notation:Connector" xmi:id="_P6GZgLv-EeSTjNEQkASznQ" type="4002" source="_tkvvYLv8EeSTjNEQkASznQ" target="_UOCJULv9EeSTjNEQkASznQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_P6GZg7v-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P6GZhLv-EeSTjNEQkASznQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_P6GZgbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_P6FycLv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_P6GZgrv-EeSTjNEQkASznQ" points="[-2, -11, 24, 269]$[-11, -296, 15, -16]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_P6Kq8Lv-EeSTjNEQkASznQ" id="(0.32,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_P6Kq8bv-EeSTjNEQkASznQ" id="(0.8349514563106796,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_aUGTMLv-EeSTjNEQkASznQ" type="4002" source="_WG3dwLv-EeSTjNEQkASznQ" target="_UOCJULv9EeSTjNEQkASznQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_aUGTM7v-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_aUGTNLv-EeSTjNEQkASznQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_aUGTMbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_aUFFELv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aUGTMrv-EeSTjNEQkASznQ" points="[0, -8, -35, 277]$[29, -298, -6, -13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aUJWgLv-EeSTjNEQkASznQ" id="(0.5104895104895105,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aUJWgbv-EeSTjNEQkASznQ" id="(0.19902912621359223,0.9833333333333333)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_kOmNcLv-EeSTjNEQkASznQ" type="4002" source="_uofEULv8EeSTjNEQkASznQ" target="_nrCUkLv9EeSTjNEQkASznQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kOmNc7v-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kOmNdLv-EeSTjNEQkASznQ" x="-1" y="35"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_kOmNcbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_kOlmYLv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kOmNcrv-EeSTjNEQkASznQ" points="[0, 0, -10, 48]$[9, -45, -1, 3]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kOpQwLv-EeSTjNEQkASznQ" id="(0.26900584795321636,0.08333333333333333)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kOpQwbv-EeSTjNEQkASznQ" id="(0.8324022346368715,0.9821428571428571)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lJcFELv-EeSTjNEQkASznQ" type="4002" source="_S0KW4Lv-EeSTjNEQkASznQ" target="_nrCUkLv9EeSTjNEQkASznQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lJcFE7v-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lJcFFLv-EeSTjNEQkASznQ" x="-1" y="30"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lJcFEbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_lJa28Lv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lJcFErv-EeSTjNEQkASznQ" points="[2, -10, -62, 235]$[57, -255, -7, -10]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lJfIYLv-EeSTjNEQkASznQ" id="(0.45689655172413796,0.03773584905660377)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lJfIYbv-EeSTjNEQkASznQ" id="(0.15083798882681565,0.9821428571428571)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_mDy0gLv-EeSTjNEQkASznQ" type="4002" source="_S0KW4Lv-EeSTjNEQkASznQ" target="_HCuloLv9EeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_mDzbkLv-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mDzbkbv-EeSTjNEQkASznQ" x="-2" y="-29"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_mDy0gbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_mDyNcLv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mDy0grv-EeSTjNEQkASznQ" points="[-32, 0, 0, -113]$[-32, 113, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mD2e4Lv-EeSTjNEQkASznQ" id="(0.7672413793103449,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mD2e4bv-EeSTjNEQkASznQ" id="(0.32044198895027626,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_nyACwLv-EeSTjNEQkASznQ" type="4002" source="_uofEULv8EeSTjNEQkASznQ" target="_HCuloLv9EeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_nyACw7v-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nyACxLv-EeSTjNEQkASznQ" x="-1" y="8"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_nyACwbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_nx_bsLv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nyACwrv-EeSTjNEQkASznQ" points="[59, 0, 78, -105]$[59, 52, 78, -53]$[-19, 52, 0, -53]$[-19, 105, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nyDGELv-EeSTjNEQkASznQ" id="(0.17543859649122806,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nyDGEbv-EeSTjNEQkASznQ" id="(0.8453038674033149,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_otAScLv-EeSTjNEQkASznQ" type="4002" source="_tkvvYLv8EeSTjNEQkASznQ" target="_HCuloLv9EeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_otASc7v-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_otASdLv-EeSTjNEQkASznQ" x="-7" y="-13"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_otAScbv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_os_rYLv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_otAScrv-EeSTjNEQkASznQ" points="[-50, 31, -193, -89]$[-50, 61, -193, -59]$[167, 61, 24, -59]$[167, 120, 24, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_otDVwLv-EeSTjNEQkASznQ" id="(1.0,0.44642857142857145)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_otDVwbv-EeSTjNEQkASznQ" id="(0.08287292817679558,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_pW-cgLv-EeSTjNEQkASznQ" type="4002" source="_WG3dwLv-EeSTjNEQkASznQ" target="_HCuloLv9EeSTjNEQkASznQ" routing="Rectilinear">
+ <children xmi:type="notation:DecorationNode" xmi:id="_pW_Dkrv-EeSTjNEQkASznQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pW_Dk7v-EeSTjNEQkASznQ" x="1" y="11"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_pW_DkLv-EeSTjNEQkASznQ"/>
+ <element xmi:type="uml:Generalization" href="RTCppProperties.profile.uml#_pW91cLv-EeSTjNEQkASznQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pW_Dkbv-EeSTjNEQkASznQ" points="[-67, 0, -339, -97]$[-67, 54, -339, -43]$[286, 54, 14, -43]$[286, 92, 14, -5]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pXCG4Lv-EeSTjNEQkASznQ" id="(0.951048951048951,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pXCG4bv-EeSTjNEQkASznQ" id="(0.0,0.05)"/>
+ </edges>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.uml b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.uml
new file mode 100644
index 0000000..e486f6c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.profile/profiles/RTCppProperties.profile.uml
@@ -0,0 +1,1295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+ <uml:Profile xmi:id="_vl5LALs8EeSTjNEQkASznQ" name="RTCppProperties" metaclassReference="_LpOcgM4NEeSo_bwoIR2YQw _LpPDkM4NEeSo_bwoIR2YQw _LpPDkc4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzw9cM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <contents xmi:type="ecore:EPackage" xmi:id="_WyvuoM4NEeSo_bwoIR2YQw" name="RTCppProperties" nsURI="http:///schemas/RTCppProperties/_Wyt5cM4NEeSo_bwoIR2YQw/2" nsPrefix="RTCppProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvuoc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/emf/2002/GenModel">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wyvuos4NEeSo_bwoIR2YQw" key="documentation" value="RTCapsule stereotype not applied"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvuo84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/4.1.0/UML" references="_XUAbUM2OEeSo_bwoIR2YQw"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wy6twM4NEeSo_bwoIR2YQw" source="PapyrusVersion">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wy6twc4NEeSo_bwoIR2YQw" key="Version" value="0.0.3"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wy6tws4NEeSo_bwoIR2YQw" key="Comment" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wy6tw84NEeSo_bwoIR2YQw" key="Copyright" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wy6txM4NEeSo_bwoIR2YQw" key="Date" value="2015-03-19"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Wy6txc4NEeSo_bwoIR2YQw" key="Author" value=""/>
+ </eAnnotations>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WyvupM4NEeSo_bwoIR2YQw" name="PassiveClassProperties" eSuperTypes="_WywVs84NEeSo_bwoIR2YQw _WywVzc4NEeSo_bwoIR2YQw _Wyvu5M4NEeSo_bwoIR2YQw _WywWAs4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvupc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_z5-2YLs8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvups4NEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_XUAbds2OEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WyvuqM4NEeSo_bwoIR2YQw" name="implementationType" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_Wyvurs4NEeSo_bwoIR2YQw" name="AttributeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvur84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_G70IkLs9EeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WyvusM4NEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_Wyvusc4NEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvuss4NEeSo_bwoIR2YQw" source="redefines" references="_Wyvuv84NEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </contents>
+ <contents xmi:type="ecore:EReference" xmi:id="_WyvutM4NEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvutc4NEeSo_bwoIR2YQw" source="redefines" references="_Wyvuv84NEeSo_bwoIR2YQw _Wyvusc4NEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvut84NEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_XUAbcM2OEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvuuc4NEeSo_bwoIR2YQw" name="volatile" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvuu84NEeSo_bwoIR2YQw" name="initialization" ordered="false" lowerBound="1" eType="_XUAbfM2OEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvuvc4NEeSo_bwoIR2YQw" name="type" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_Wyvuv84NEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvuwc4NEeSo_bwoIR2YQw" name="size" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvuw84NEeSo_bwoIR2YQw" name="pointsToConstType" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvuxc4NEeSo_bwoIR2YQw" name="pointsToVolatileType" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_Wyvux84NEeSo_bwoIR2YQw" name="AttributeKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WyvuyM4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_JGepULs9EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvuyc4NEeSo_bwoIR2YQw" name="Member"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvuys4NEeSo_bwoIR2YQw" name="Global" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvuy84NEeSo_bwoIR2YQw" name="MutableMember" value="2"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WyvuzM4NEeSo_bwoIR2YQw" name="Define" value="3"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_Wyvuzc4NEeSo_bwoIR2YQw" name="ClassKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvuzs4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_HX7nYLs-EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvuz84NEeSo_bwoIR2YQw" name="Class"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvu0M4NEeSo_bwoIR2YQw" name="Struct" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvu0c4NEeSo_bwoIR2YQw" name="Union" value="2"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvu0s4NEeSo_bwoIR2YQw" name="Typedef" value="3"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_Wyvu084NEeSo_bwoIR2YQw" name="InitializationKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvu1M4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_5Bi7MLs-EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvu1c4NEeSo_bwoIR2YQw" name="Assignment"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvu1s4NEeSo_bwoIR2YQw" name="Constant" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_Wyvu184NEeSo_bwoIR2YQw" name="Constructor" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_Wyvu2M4NEeSo_bwoIR2YQw" name="CppFileProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvu2c4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_DfwY8LtfEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvu2s4NEeSo_bwoIR2YQw" name="headerPreface" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvu3M4NEeSo_bwoIR2YQw" name="headerEnding" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvu3s4NEeSo_bwoIR2YQw" name="implementationPreface" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvu4M4NEeSo_bwoIR2YQw" name="implementationEnding" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_Wyvu4s4NEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_Wyvu5M4NEeSo_bwoIR2YQw" name="FileGenerationProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvu5c4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ex9wcLtgEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvu5s4NEeSo_bwoIR2YQw" name="generateHeader" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_Wyvu6M4NEeSo_bwoIR2YQw" name="generateImplementation" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_Wyvu6s4NEeSo_bwoIR2YQw" name="CapsuleProperties" eSuperTypes="_WywVs84NEeSo_bwoIR2YQw _Wyvu5M4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvu684NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_LEi4sLtiEeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvu7M4NEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_Wyvu7c4NEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Wyvu7s4NEeSo_bwoIR2YQw" source="redefines" references="_XUAbi82OEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </contents>
+ </eAnnotations>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywVs84NEeSo_bwoIR2YQw" name="ClassProperties" abstract="true" eSuperTypes="_Wyvu2M4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywVtM4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PMC5kLtiEeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywVtc4NEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_WywVts4NEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywVt84NEeSo_bwoIR2YQw" source="redefines" references="_XUAbi82OEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywVuc4NEeSo_bwoIR2YQw" name="privateDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywVu84NEeSo_bwoIR2YQw" name="protectedDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywVvc4NEeSo_bwoIR2YQw" name="publicDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywVwM4NEeSo_bwoIR2YQw" name="DependencyProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywVwc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_URCykLtkEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywVws4NEeSo_bwoIR2YQw" name="KindInHeader" ordered="false" lowerBound="1" eType="_XUAbrM2OEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywVxM4NEeSo_bwoIR2YQw" name="KindInImplementation" ordered="false" lowerBound="1" eType="_XUAbrM2OEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywVxs4NEeSo_bwoIR2YQw" name="base_Dependency" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Dependency"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_WywVyM4NEeSo_bwoIR2YQw" name="DependencyKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywVyc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_e5SjoLtkEeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WywVys4NEeSo_bwoIR2YQw" name="ForwardReference"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WywVy84NEeSo_bwoIR2YQw" name="Inclusion" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WywVzM4NEeSo_bwoIR2YQw" name="None" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywVzc4NEeSo_bwoIR2YQw" name="GenerationProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywVzs4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_anl9kLtnEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywVz84NEeSo_bwoIR2YQw" name="generate" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywV0c4NEeSo_bwoIR2YQw" name="EnumerationProperties" eSuperTypes="_WywVzc4NEeSo_bwoIR2YQw _Wyvu2M4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV0s4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mAeaALtqEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywV084NEeSo_bwoIR2YQw" name="base_Enumeration" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Enumeration"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywV184NEeSo_bwoIR2YQw" name="OperationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV2M4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_2a0skLtqEeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV2c4NEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_WywV2s4NEeSo_bwoIR2YQw" name="base_Operation" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV284NEeSo_bwoIR2YQw" source="redefines" references="_WywV6M4NEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+ </contents>
+ <contents xmi:type="ecore:EReference" xmi:id="_WywV3c4NEeSo_bwoIR2YQw" name="base_Operation" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV3s4NEeSo_bwoIR2YQw" source="redefines" references="_WywV6M4NEeSo_bwoIR2YQw _WywV2s4NEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV4M4NEeSo_bwoIR2YQw" name="Inline" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV4s4NEeSo_bwoIR2YQw" name="Polymorphic" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV5M4NEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_XUAb082OEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV5s4NEeSo_bwoIR2YQw" name="generateDefinition" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywV6M4NEeSo_bwoIR2YQw" name="base_Operation" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywV6s4NEeSo_bwoIR2YQw" name="TypeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV684NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_uOquALtrEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV7M4NEeSo_bwoIR2YQw" name="name" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV7s4NEeSo_bwoIR2YQw" name="definitionFile" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywV8M4NEeSo_bwoIR2YQw" name="ParameterProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV8c4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_F28xcLttEeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV8s4NEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_WywV884NEeSo_bwoIR2YQw" name="base_Parameter" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV9M4NEeSo_bwoIR2YQw" source="redefines" references="_WywV-84NEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Parameter"/>
+ </contents>
+ <contents xmi:type="ecore:EReference" xmi:id="_WywV9s4NEeSo_bwoIR2YQw" name="base_Parameter" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV984NEeSo_bwoIR2YQw" source="redefines" references="_WywV-84NEeSo_bwoIR2YQw _WywV884NEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Parameter"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywV-c4NEeSo_bwoIR2YQw" name="type" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywV-84NEeSo_bwoIR2YQw" name="base_Parameter" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Parameter"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_WywV_c4NEeSo_bwoIR2YQw" name="OperationKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywV_s4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Nbf5QLtzEeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WywV_84NEeSo_bwoIR2YQw" name="Member"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WywWAM4NEeSo_bwoIR2YQw" name="Friend" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_WywWAc4NEeSo_bwoIR2YQw" name="Global" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWAs4NEeSo_bwoIR2YQw" name="ClassGenerationProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWA84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_DBEgULv4EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWBM4NEeSo_bwoIR2YQw" name="generateStateMachine" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWBs4NEeSo_bwoIR2YQw" name="generateAssignmentOperator" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWCM4NEeSo_bwoIR2YQw" name="generateCopyConstructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWCs4NEeSo_bwoIR2YQw" name="generateDefaultConstructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWDM4NEeSo_bwoIR2YQw" name="generateDestructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWDs4NEeSo_bwoIR2YQw" name="generateEqualityOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWEM4NEeSo_bwoIR2YQw" name="generateExtractionOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWEs4NEeSo_bwoIR2YQw" name="generateInequalityOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWFM4NEeSo_bwoIR2YQw" name="generateInsertionOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWFs4NEeSo_bwoIR2YQw" name="GenerelizationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWF84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_6cViULv7EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWGM4NEeSo_bwoIR2YQw" name="virtual" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywWGs4NEeSo_bwoIR2YQw" name="base_Generalization" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Generalization"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWHM4NEeSo_bwoIR2YQw" name="RTSAttributeProperties" eSuperTypes="_WywWLs4NEeSo_bwoIR2YQw _WywWKs4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWHc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_tkuhQLv8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywWHs4NEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWIs4NEeSo_bwoIR2YQw" name="RTSClassProperties" eSuperTypes="_WywWNs4NEeSo_bwoIR2YQw _WywWKs4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWI84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_uod2MLv8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWJM4NEeSo_bwoIR2YQw" name="typeDescriptorHint" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywWJs4NEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWKs4NEeSo_bwoIR2YQw" name="RTSDescriptorProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWK84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_HCt-kLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWLM4NEeSo_bwoIR2YQw" name="generateDescriptor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWLs4NEeSo_bwoIR2YQw" name="RTSAbstractAttributeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWL84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_UOBiQLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWMM4NEeSo_bwoIR2YQw" name="generateTypeModifier" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWMs4NEeSo_bwoIR2YQw" name="numElementsFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWNM4NEeSo_bwoIR2YQw" name="typeDescriptor" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWNs4NEeSo_bwoIR2YQw" name="RTSClassifierProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWN84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_nrBGcLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWOM4NEeSo_bwoIR2YQw" name="copyFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWOs4NEeSo_bwoIR2YQw" name="decodeFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWPM4NEeSo_bwoIR2YQw" name="destroyFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWPs4NEeSo_bwoIR2YQw" name="encodeFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWQM4NEeSo_bwoIR2YQw" name="initFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWQs4NEeSo_bwoIR2YQw" name="version" ordered="false" lowerBound="1" defaultValueLiteral="0">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Integer"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWRM4NEeSo_bwoIR2YQw" name="RTSEnumerationProperties" eSuperTypes="_WywWNs4NEeSo_bwoIR2YQw _WywWKs4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWRc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_S0Jv0Lv-EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywWRs4NEeSo_bwoIR2YQw" name="base_Enumeration" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Enumeration"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWSs4NEeSo_bwoIR2YQw" name="RTSEnumerationLiteralProperties" eSuperTypes="_WywWLs4NEeSo_bwoIR2YQw _WywWKs4NEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWS84NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WG22sLv-EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywWTM4NEeSo_bwoIR2YQw" name="base_EnumerationLiteral" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//EnumerationLiteral"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_WywWUM4NEeSo_bwoIR2YQw" name="ArtifactProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WywWUc4NEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WW1sELwBEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_WywWUs4NEeSo_bwoIR2YQw" name="base_Artifact" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Artifact"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWVM4NEeSo_bwoIR2YQw" name="includeFile" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_WywWVs4NEeSo_bwoIR2YQw" name="sourceFile" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ </contents>
+ <contents xmi:type="ecore:EPackage" xmi:id="_XUAbUM2OEeSo_bwoIR2YQw" name="RTCppProperties" nsURI="http:///schemas/RTCppProperties/_XT_NMM2OEeSo_bwoIR2YQw/1" nsPrefix="RTCppProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbUc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/emf/2002/GenModel">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUAbUs2OEeSo_bwoIR2YQw" key="documentation" value="RTCapsule stereotype not applied"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbU82OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/4.1.0/UML" references="_bzxkgM2JEeSo_bwoIR2YQw"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUHJA82OEeSo_bwoIR2YQw" source="PapyrusVersion">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUHJBM2OEeSo_bwoIR2YQw" key="Version" value="0.0.2"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUHJBc2OEeSo_bwoIR2YQw" key="Comment" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUHJBs2OEeSo_bwoIR2YQw" key="Copyright" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUHJB82OEeSo_bwoIR2YQw" key="Date" value="2015-03-18"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_XUHJCM2OEeSo_bwoIR2YQw" key="Author" value=""/>
+ </eAnnotations>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbVM2OEeSo_bwoIR2YQw" name="PassiveClassProperties" eSuperTypes="_XUAbl82OEeSo_bwoIR2YQw _XUAbsc2OEeSo_bwoIR2YQw _XUAbjc2OEeSo_bwoIR2YQw _XUAb2M2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbVc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_z5-2YLs8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbVs2OEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_bzxkxM2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbWM2OEeSo_bwoIR2YQw" name="implementationType" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbXs2OEeSo_bwoIR2YQw" name="AttributeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbX82OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_G70IkLs9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbYM2OEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_bzxk3M2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbYs2OEeSo_bwoIR2YQw" name="volatile" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbZM2OEeSo_bwoIR2YQw" name="initialization" ordered="false" lowerBound="1" eType="_bzxk4s2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbZs2OEeSo_bwoIR2YQw" name="type" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAbaM2OEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbas2OEeSo_bwoIR2YQw" name="size" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbbM2OEeSo_bwoIR2YQw" name="pointsToConstType" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbbs2OEeSo_bwoIR2YQw" name="pointsToVolatileType" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_XUAbcM2OEeSo_bwoIR2YQw" name="AttributeKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbcc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_JGepULs9EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbcs2OEeSo_bwoIR2YQw" name="Member"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbc82OEeSo_bwoIR2YQw" name="Global" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbdM2OEeSo_bwoIR2YQw" name="MutableMember" value="2"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbdc2OEeSo_bwoIR2YQw" name="Define" value="3"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_XUAbds2OEeSo_bwoIR2YQw" name="ClassKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbd82OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_HX7nYLs-EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbeM2OEeSo_bwoIR2YQw" name="Class"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbec2OEeSo_bwoIR2YQw" name="Struct" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbes2OEeSo_bwoIR2YQw" name="Union" value="2"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbe82OEeSo_bwoIR2YQw" name="Typedef" value="3"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_XUAbfM2OEeSo_bwoIR2YQw" name="InitializationKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbfc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_5Bi7MLs-EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbfs2OEeSo_bwoIR2YQw" name="Assignment"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbf82OEeSo_bwoIR2YQw" name="Constant" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbgM2OEeSo_bwoIR2YQw" name="Constructor" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbgc2OEeSo_bwoIR2YQw" name="CppFileProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbgs2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_DfwY8LtfEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbg82OEeSo_bwoIR2YQw" name="headerPreface" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbhc2OEeSo_bwoIR2YQw" name="headerEnding" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbh82OEeSo_bwoIR2YQw" name="implementationPreface" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbic2OEeSo_bwoIR2YQw" name="implementationEnding" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAbi82OEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbjc2OEeSo_bwoIR2YQw" name="FileGenerationProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbjs2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ex9wcLtgEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbj82OEeSo_bwoIR2YQw" name="generateHeader" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbkc2OEeSo_bwoIR2YQw" name="generateImplementation" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbk82OEeSo_bwoIR2YQw" name="CapsuleProperties" eSuperTypes="_XUAbl82OEeSo_bwoIR2YQw _XUAbjc2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAblM2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_LEi4sLtiEeSTjNEQkASznQ"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbl82OEeSo_bwoIR2YQw" name="ClassProperties" abstract="true" eSuperTypes="_XUAbgc2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbmM2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PMC5kLtiEeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbmc2OEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_XUAbms2OEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbm82OEeSo_bwoIR2YQw" source="redefines" references="_bzxkpM2JEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbnc2OEeSo_bwoIR2YQw" name="privateDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbn82OEeSo_bwoIR2YQw" name="protectedDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAboc2OEeSo_bwoIR2YQw" name="publicDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbpM2OEeSo_bwoIR2YQw" name="DependencyProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbpc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_URCykLtkEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbps2OEeSo_bwoIR2YQw" name="KindInHeader" ordered="false" lowerBound="1" eType="_bzxk882JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbqM2OEeSo_bwoIR2YQw" name="KindInImplementation" ordered="false" lowerBound="1" eType="_bzxk882JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAbqs2OEeSo_bwoIR2YQw" name="base_Dependency" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Dependency"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_XUAbrM2OEeSo_bwoIR2YQw" name="DependencyKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbrc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_e5SjoLtkEeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbrs2OEeSo_bwoIR2YQw" name="ForwardReference"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbr82OEeSo_bwoIR2YQw" name="Inclusion" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAbsM2OEeSo_bwoIR2YQw" name="None" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbsc2OEeSo_bwoIR2YQw" name="GenerationProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbss2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_anl9kLtnEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbs82OEeSo_bwoIR2YQw" name="generate" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbtc2OEeSo_bwoIR2YQw" name="EnumerationProperties" eSuperTypes="_XUAbsc2OEeSo_bwoIR2YQw _XUAbgc2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbts2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mAeaALtqEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAbt82OEeSo_bwoIR2YQw" name="base_Enumeration" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Enumeration"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbu82OEeSo_bwoIR2YQw" name="OperationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbvM2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_2a0skLtqEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbvc2OEeSo_bwoIR2YQw" name="Inline" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbv82OEeSo_bwoIR2YQw" name="Polymorphic" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbwc2OEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_bzxlCs2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbw82OEeSo_bwoIR2YQw" name="generateDefinition" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAbxc2OEeSo_bwoIR2YQw" name="base_Operation" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbx82OEeSo_bwoIR2YQw" name="TypeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbyM2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_uOquALtrEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbyc2OEeSo_bwoIR2YQw" name="name" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAby82OEeSo_bwoIR2YQw" name="definitionFile" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAbzc2OEeSo_bwoIR2YQw" name="ParameterProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAbzs2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_F28xcLttEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAbz82OEeSo_bwoIR2YQw" name="type" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAb0c2OEeSo_bwoIR2YQw" name="base_Parameter" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Parameter"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_XUAb082OEeSo_bwoIR2YQw" name="OperationKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAb1M2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Nbf5QLtzEeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAb1c2OEeSo_bwoIR2YQw" name="Member"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAb1s2OEeSo_bwoIR2YQw" name="Friend" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_XUAb182OEeSo_bwoIR2YQw" name="Global" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAb2M2OEeSo_bwoIR2YQw" name="ClassGenerationProperties" abstract="true">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAb2c2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_DBEgULv4EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb2s2OEeSo_bwoIR2YQw" name="generateStateMachine" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb3M2OEeSo_bwoIR2YQw" name="generateAssignmentOperator" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb3s2OEeSo_bwoIR2YQw" name="generateCopyConstructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb4M2OEeSo_bwoIR2YQw" name="generateDefaultConstructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb4s2OEeSo_bwoIR2YQw" name="generateDestructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb5M2OEeSo_bwoIR2YQw" name="generateEqualityOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb5s2OEeSo_bwoIR2YQw" name="generateExtractionOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb6M2OEeSo_bwoIR2YQw" name="generateInequalityOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb6s2OEeSo_bwoIR2YQw" name="generateInsertionOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAb7M2OEeSo_bwoIR2YQw" name="GenerelizationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAb7c2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_6cViULv7EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb7s2OEeSo_bwoIR2YQw" name="virtual" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAb8M2OEeSo_bwoIR2YQw" name="base_Generalization" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Generalization"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAb8s2OEeSo_bwoIR2YQw" name="RTSAttributeProperties" eSuperTypes="_XUAcBM2OEeSo_bwoIR2YQw _XUAcAM2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAb882OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_tkuhQLv8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAb9M2OEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAb-M2OEeSo_bwoIR2YQw" name="RTSClassProperties" eSuperTypes="_XUAcDM2OEeSo_bwoIR2YQw _XUAcAM2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAb-c2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_uod2MLv8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAb-s2OEeSo_bwoIR2YQw" name="typeDescriptorHint" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUAb_M2OEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAcAM2OEeSo_bwoIR2YQw" name="RTSDescriptorProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAcAc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_HCt-kLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcAs2OEeSo_bwoIR2YQw" name="generateDescriptor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAcBM2OEeSo_bwoIR2YQw" name="RTSAbstractAttributeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAcBc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_UOBiQLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcBs2OEeSo_bwoIR2YQw" name="generateTypeModifier" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcCM2OEeSo_bwoIR2YQw" name="numElementsFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcCs2OEeSo_bwoIR2YQw" name="typeDescriptor" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAcDM2OEeSo_bwoIR2YQw" name="RTSClassifierProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAcDc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_nrBGcLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcDs2OEeSo_bwoIR2YQw" name="copyFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcEM2OEeSo_bwoIR2YQw" name="decodeFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcEs2OEeSo_bwoIR2YQw" name="destroyFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcFM2OEeSo_bwoIR2YQw" name="encodeFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcFs2OEeSo_bwoIR2YQw" name="initFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUAcGM2OEeSo_bwoIR2YQw" name="version" ordered="false" lowerBound="1" defaultValueLiteral="0">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Integer"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUAcGs2OEeSo_bwoIR2YQw" name="RTSEnumerationProperties" eSuperTypes="_XUAcDM2OEeSo_bwoIR2YQw _XUAcAM2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUAcG82OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_S0Jv0Lv-EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUBCYM2OEeSo_bwoIR2YQw" name="base_Enumeration" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Enumeration"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUBCZM2OEeSo_bwoIR2YQw" name="RTSEnumerationLiteralProperties" eSuperTypes="_XUAcBM2OEeSo_bwoIR2YQw _XUAcAM2OEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUBCZc2OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WG22sLv-EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUBCZs2OEeSo_bwoIR2YQw" name="base_EnumerationLiteral" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//EnumerationLiteral"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_XUBCas2OEeSo_bwoIR2YQw" name="ArtifactProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XUBCa82OEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WW1sELwBEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_XUBCbM2OEeSo_bwoIR2YQw" name="base_Artifact" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Artifact"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUBCbs2OEeSo_bwoIR2YQw" name="includeFile" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_XUBCcM2OEeSo_bwoIR2YQw" name="sourceFile" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ </contents>
+ <contents xmi:type="ecore:EPackage" xmi:id="_bzxkgM2JEeSo_bwoIR2YQw" name="RTCppProperties" nsURI="http:///schemas/RTCppProperties/_bzvIQM2JEeSo_bwoIR2YQw/0" nsPrefix="RTCppProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkgc2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/emf/2002/GenModel">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bzxkgs2JEeSo_bwoIR2YQw" key="documentation" value="RTCapsule stereotype not applied"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bz3rIM2JEeSo_bwoIR2YQw" source="PapyrusVersion">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bz3rIc2JEeSo_bwoIR2YQw" key="Version" value="0.0.1"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bz3rIs2JEeSo_bwoIR2YQw" key="Comment" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bz3rI82JEeSo_bwoIR2YQw" key="Copyright" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bz3rJM2JEeSo_bwoIR2YQw" key="Date" value="2015-03-18"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_bz3rJc2JEeSo_bwoIR2YQw" key="Author" value=""/>
+ </eAnnotations>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxkg82JEeSo_bwoIR2YQw" name="PassiveClassProperties" eSuperTypes="_bzxkjc2JEeSo_bwoIR2YQw _bzxkps2JEeSo_bwoIR2YQw _bzxkqs2JEeSo_bwoIR2YQw _bzxksM2JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkhM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_z5-2YLs8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkhc2JEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_bzxkxM2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkh82JEeSo_bwoIR2YQw" name="implementationType" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxkjc2JEeSo_bwoIR2YQw" name="ClassProperties" eSuperTypes="_bzxkms2JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkjs2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_PMC5kLtiEeSTjNEQkASznQ"/>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkj82JEeSo_bwoIR2YQw" source="duplicates">
+ <contents xmi:type="ecore:EReference" xmi:id="_bzxkkM2JEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkkc2JEeSo_bwoIR2YQw" source="redefines" references="_bzxkpM2JEeSo_bwoIR2YQw"/>
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkk82JEeSo_bwoIR2YQw" name="privateDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxklc2JEeSo_bwoIR2YQw" name="protectedDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkl82JEeSo_bwoIR2YQw" name="publicDeclarations" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxkms2JEeSo_bwoIR2YQw" name="CppFileProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkm82JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_DfwY8LtfEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxknM2JEeSo_bwoIR2YQw" name="headerPreface" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkns2JEeSo_bwoIR2YQw" name="headerEnding" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkoM2JEeSo_bwoIR2YQw" name="implementationPreface" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkos2JEeSo_bwoIR2YQw" name="implementationEnding" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxkpM2JEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxkps2JEeSo_bwoIR2YQw" name="GenerationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkp82JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_anl9kLtnEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkqM2JEeSo_bwoIR2YQw" name="generate" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxkqs2JEeSo_bwoIR2YQw" name="FileGenerationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkq82JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_ex9wcLtgEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkrM2JEeSo_bwoIR2YQw" name="generateHeader" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkrs2JEeSo_bwoIR2YQw" name="generateImplementation" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxksM2JEeSo_bwoIR2YQw" name="ClassGenerationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxksc2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_DBEgULv4EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkss2JEeSo_bwoIR2YQw" name="generateStateMachine" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxktM2JEeSo_bwoIR2YQw" name="generateAssignmentOperator" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkts2JEeSo_bwoIR2YQw" name="generateCopyConstructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkuM2JEeSo_bwoIR2YQw" name="generateDefaultConstructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkus2JEeSo_bwoIR2YQw" name="generateDestructor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkvM2JEeSo_bwoIR2YQw" name="generateEqualityOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkvs2JEeSo_bwoIR2YQw" name="generateExtractionOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkwM2JEeSo_bwoIR2YQw" name="generateInequalityOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkws2JEeSo_bwoIR2YQw" name="generateInsertionOperator" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_bzxkxM2JEeSo_bwoIR2YQw" name="ClassKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxkxc2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_HX7nYLs-EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxkxs2JEeSo_bwoIR2YQw" name="Class"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxkx82JEeSo_bwoIR2YQw" name="Struct" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxkyM2JEeSo_bwoIR2YQw" name="Union" value="2"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxkyc2JEeSo_bwoIR2YQw" name="Typedef" value="3"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxkys2JEeSo_bwoIR2YQw" name="AttributeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxky82JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_G70IkLs9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkzM2JEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_bzxk3M2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxkzs2JEeSo_bwoIR2YQw" name="volatile" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk0M2JEeSo_bwoIR2YQw" name="initialization" ordered="false" lowerBound="1" eType="_bzxk4s2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk0s2JEeSo_bwoIR2YQw" name="type" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxk1M2JEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk1s2JEeSo_bwoIR2YQw" name="size" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk2M2JEeSo_bwoIR2YQw" name="pointsToConstType" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk2s2JEeSo_bwoIR2YQw" name="pointsToVolatileType" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_bzxk3M2JEeSo_bwoIR2YQw" name="AttributeKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk3c2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_JGepULs9EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk3s2JEeSo_bwoIR2YQw" name="Member"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk382JEeSo_bwoIR2YQw" name="Global" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk4M2JEeSo_bwoIR2YQw" name="MutableMember" value="2"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk4c2JEeSo_bwoIR2YQw" name="Define" value="3"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_bzxk4s2JEeSo_bwoIR2YQw" name="InitializationKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk482JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_5Bi7MLs-EeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk5M2JEeSo_bwoIR2YQw" name="Assignment"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk5c2JEeSo_bwoIR2YQw" name="Constant" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk5s2JEeSo_bwoIR2YQw" name="Constructor" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxk582JEeSo_bwoIR2YQw" name="CapsuleProperties" eSuperTypes="_bzxkjc2JEeSo_bwoIR2YQw _bzxkqs2JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk6M2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_LEi4sLtiEeSTjNEQkASznQ"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxk682JEeSo_bwoIR2YQw" name="DependencyProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk7M2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_URCykLtkEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk7c2JEeSo_bwoIR2YQw" name="KindInHeader" ordered="false" lowerBound="1" eType="_bzxk882JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxk782JEeSo_bwoIR2YQw" name="KindInImplementation" ordered="false" lowerBound="1" eType="_bzxk882JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxk8c2JEeSo_bwoIR2YQw" name="base_Dependency" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Dependency"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_bzxk882JEeSo_bwoIR2YQw" name="DependencyKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk9M2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_e5SjoLtkEeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk9c2JEeSo_bwoIR2YQw" name="ForwardReference"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk9s2JEeSo_bwoIR2YQw" name="Inclusion" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxk982JEeSo_bwoIR2YQw" name="None" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxk-M2JEeSo_bwoIR2YQw" name="EnumerationProperties" eSuperTypes="_bzxkps2JEeSo_bwoIR2YQw _bzxkms2JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk-c2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_mAeaALtqEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxk-s2JEeSo_bwoIR2YQw" name="base_Enumeration" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Enumeration"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxk_s2JEeSo_bwoIR2YQw" name="OperationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxk_82JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_2a0skLtqEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlAM2JEeSo_bwoIR2YQw" name="Inline" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlAs2JEeSo_bwoIR2YQw" name="Polymorphic" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlBM2JEeSo_bwoIR2YQw" name="kind" ordered="false" lowerBound="1" eType="_bzxlCs2JEeSo_bwoIR2YQw"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlBs2JEeSo_bwoIR2YQw" name="generateDefinition" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlCM2JEeSo_bwoIR2YQw" name="base_Operation" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Operation"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EEnum" xmi:id="_bzxlCs2JEeSo_bwoIR2YQw" name="OperationKind">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlC82JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_Nbf5QLtzEeSTjNEQkASznQ"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxlDM2JEeSo_bwoIR2YQw" name="Member"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxlDc2JEeSo_bwoIR2YQw" name="Friend" value="1"/>
+ <eLiterals xmi:type="ecore:EEnumLiteral" xmi:id="_bzxlDs2JEeSo_bwoIR2YQw" name="Global" value="2"/>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlD82JEeSo_bwoIR2YQw" name="TypeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlEM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_uOquALtrEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlEc2JEeSo_bwoIR2YQw" name="name" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlE82JEeSo_bwoIR2YQw" name="definitionFile" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlFc2JEeSo_bwoIR2YQw" name="ParameterProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlFs2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_F28xcLttEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlF82JEeSo_bwoIR2YQw" name="type" ordered="false" lowerBound="1" defaultValueLiteral="">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlGc2JEeSo_bwoIR2YQw" name="base_Parameter" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Parameter"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlG82JEeSo_bwoIR2YQw" name="GenerelizationProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlHM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_6cViULv7EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlHc2JEeSo_bwoIR2YQw" name="virtual" ordered="false" lowerBound="1" defaultValueLiteral="false">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlH82JEeSo_bwoIR2YQw" name="base_Generalization" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Generalization"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlIc2JEeSo_bwoIR2YQw" name="RTSAttributeProperties" eSuperTypes="_bzxlJ82JEeSo_bwoIR2YQw _bzxlL82JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlIs2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_tkuhQLv8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlI82JEeSo_bwoIR2YQw" name="base_Property" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Property"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlJ82JEeSo_bwoIR2YQw" name="RTSAbstractAttributeProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlKM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_UOBiQLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlKc2JEeSo_bwoIR2YQw" name="generateTypeModifier" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlK82JEeSo_bwoIR2YQw" name="numElementsFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlLc2JEeSo_bwoIR2YQw" name="typeDescriptor" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlL82JEeSo_bwoIR2YQw" name="RTSDescriptorProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlMM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_HCt-kLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlMc2JEeSo_bwoIR2YQw" name="generateDescriptor" ordered="false" lowerBound="1" defaultValueLiteral="true">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Boolean"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlM82JEeSo_bwoIR2YQw" name="RTSClassProperties" eSuperTypes="_bzxlO82JEeSo_bwoIR2YQw _bzxlL82JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlNM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_uod2MLv8EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlNc2JEeSo_bwoIR2YQw" name="typeDescriptorHint" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlN82JEeSo_bwoIR2YQw" name="base_Class" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Class"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlO82JEeSo_bwoIR2YQw" name="RTSClassifierProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlPM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_nrBGcLv9EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlPc2JEeSo_bwoIR2YQw" name="copyFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlP82JEeSo_bwoIR2YQw" name="decodeFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlQc2JEeSo_bwoIR2YQw" name="destroyFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlQ82JEeSo_bwoIR2YQw" name="encodeFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlRc2JEeSo_bwoIR2YQw" name="initFunctionBody" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlR82JEeSo_bwoIR2YQw" name="version" ordered="false" lowerBound="1" defaultValueLiteral="0">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//Integer"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlSc2JEeSo_bwoIR2YQw" name="RTSEnumerationProperties" eSuperTypes="_bzxlO82JEeSo_bwoIR2YQw _bzxlL82JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlSs2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_S0Jv0Lv-EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlS82JEeSo_bwoIR2YQw" name="base_Enumeration" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Enumeration"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlT82JEeSo_bwoIR2YQw" name="RTSEnumerationLiteralProperties" eSuperTypes="_bzxlJ82JEeSo_bwoIR2YQw _bzxlL82JEeSo_bwoIR2YQw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlUM2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WG22sLv-EeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlUc2JEeSo_bwoIR2YQw" name="base_EnumerationLiteral" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//EnumerationLiteral"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xmi:type="ecore:EClass" xmi:id="_bzxlVc2JEeSo_bwoIR2YQw" name="ArtifactProperties">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_bzxlVs2JEeSo_bwoIR2YQw" source="http://www.eclipse.org/uml2/2.0.0/UML" references="_WW1sELwBEeSTjNEQkASznQ"/>
+ <eStructuralFeatures xmi:type="ecore:EReference" xmi:id="_bzxlV82JEeSo_bwoIR2YQw" name="base_Artifact" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EClass" href="http://www.eclipse.org/uml2/5.0.0/UML#//Artifact"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlWc2JEeSo_bwoIR2YQw" name="includeFile" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xmi:type="ecore:EAttribute" xmi:id="_bzxlW82JEeSo_bwoIR2YQw" name="sourceFile" ordered="false" lowerBound="1">
+ <eType xmi:type="ecore:EDataType" href="http://www.eclipse.org/uml2/5.0.0/Types#//String"/>
+ </eStructuralFeatures>
+ </eClassifiers>
+ </contents>
+ </eAnnotations>
+ <ownedRule xmi:type="uml:Constraint" xmi:id="_soGScLtjEeSTjNEQkASznQ" name="PassiveClassConstraint" constrainedElement="_lrNOQLtiEeSTjNEQkASznQ">
+ <specification xmi:type="uml:LiteralString" xmi:id="_soGScbtjEeSTjNEQkASznQ" value="RTCapsule stereotype not applied"/>
+ </ownedRule>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="_LpOcgM4NEeSo_bwoIR2YQw" alias="Operation">
+ <importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+ </elementImport>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="_LpPDkM4NEeSo_bwoIR2YQw" alias="Property">
+ <importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+ </elementImport>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="_LpPDkc4NEeSo_bwoIR2YQw" alias="Parameter">
+ <importedElement xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Parameter"/>
+ </elementImport>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_z5-2YLs8EeSTjNEQkASznQ" name="PassiveClassProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_lrNOQLtiEeSTjNEQkASznQ" general="_PMC5kLtiEeSTjNEQkASznQ"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_a8V-MLtqEeSTjNEQkASznQ" general="_anl9kLtnEeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_dMGaULtqEeSTjNEQkASznQ" general="_ex9wcLtgEeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_Qmw58Lv4EeSTjNEQkASznQ" general="_DBEgULv4EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_SUbKILs-EeSTjNEQkASznQ" name="kind" type="_HX7nYLs-EeSTjNEQkASznQ"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Hdt1ULv5EeSTjNEQkASznQ" name="implementationType">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_G70IkLs9EeSTjNEQkASznQ" name="AttributeProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_yu4fwLs9EeSTjNEQkASznQ" name="kind" type="_JGepULs9EeSTjNEQkASznQ"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_kNZ94Ls-EeSTjNEQkASznQ" name="volatile">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_raWswLs-EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_INlnkLs_EeSTjNEQkASznQ" name="initialization" type="_5Bi7MLs-EeSTjNEQkASznQ"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Xc1Y8Ls_EeSTjNEQkASznQ" name="type">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <defaultValue xmi:type="uml:LiteralNull" xmi:id="_cpJFwLs_EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_CJWUwLthEeSTjNEQkASznQ" name="base_Property">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_7a0WELv2EeSTjNEQkASznQ" name="size">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_j30wYLv3EeSTjNEQkASznQ" name="pointsToConstType">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_mwb8QLv3EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_knXW8Lv3EeSTjNEQkASznQ" name="pointsToVolatileType">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_pdh0oLv3EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_y4REUM4MEeSo_bwoIR2YQw" name="base_Property">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_P4AKEM4NEeSo_bwoIR2YQw" name="base_Property" association="_P4AxIM4NEeSo_bwoIR2YQw">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_JGepULs9EeSTjNEQkASznQ" name="AttributeKind">
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_OoCNYLs9EeSTjNEQkASznQ" name="Member"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_Pw2PkLs9EeSTjNEQkASznQ" name="Global"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_T1d7kLs9EeSTjNEQkASznQ" name="MutableMember"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_ZSHxgLs9EeSTjNEQkASznQ" name="Define"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_HX7nYLs-EeSTjNEQkASznQ" name="ClassKind">
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_LoCKoLs-EeSTjNEQkASznQ" name="Class"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_MddWwLs-EeSTjNEQkASznQ" name="Struct"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_NbwLALs-EeSTjNEQkASznQ" name="Union"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_O_xigLs-EeSTjNEQkASznQ" name="Typedef"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_5Bi7MLs-EeSTjNEQkASznQ" name="InitializationKind">
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_9sfAULs-EeSTjNEQkASznQ" name="Assignment"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_CS3VkLs_EeSTjNEQkASznQ" name="Constant"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="__AKOsLs-EeSTjNEQkASznQ" name="Constructor"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_DfwY8LtfEeSTjNEQkASznQ" name="CppFileProperties" isAbstract="true">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_F6MX4LtbEeSTjNEQkASznQ" name="headerPreface">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Gp8Z0LtbEeSTjNEQkASznQ" name="headerEnding">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Hj1PMLtbEeSTjNEQkASznQ" name="implementationPreface">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_IpyxsLtbEeSTjNEQkASznQ" name="implementationEnding">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_rjnzILtiEeSTjNEQkASznQ" name="base_Class">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_ex9wcLtgEeSTjNEQkASznQ" name="FileGenerationProperties" isAbstract="true">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_gbrgQLtgEeSTjNEQkASznQ" name="generateHeader">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_nEiDkLtgEeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_g-fSYLtgEeSTjNEQkASznQ" name="generateImplementation">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_lVcEgLtgEeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_6WL6cbtgEeSTjNEQkASznQ" name="E_ClassProperties_Class1" memberEnd="_6WL6crtgEeSTjNEQkASznQ _RMqGcLtiEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_6WL6crtgEeSTjNEQkASznQ" name="extension_ClassProperties" type="_PMC5kLtiEeSTjNEQkASznQ" aggregation="composite" association="_6WL6cbtgEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_LEi4sLtiEeSTjNEQkASznQ" name="CapsuleProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_mRX2YLtiEeSTjNEQkASznQ" general="_PMC5kLtiEeSTjNEQkASznQ"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_f4zRILtqEeSTjNEQkASznQ" general="_ex9wcLtgEeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_WVxUMM4MEeSo_bwoIR2YQw" name="base_Class" association="_WVx7QM4MEeSo_bwoIR2YQw">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_PMC5kLtiEeSTjNEQkASznQ" name="ClassProperties" isAbstract="true">
+ <generalization xmi:type="uml:Generalization" xmi:id="_TCeCcLtrEeSTjNEQkASznQ" general="_DfwY8LtfEeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_RMqGcLtiEeSTjNEQkASznQ" name="base_Class" association="_6WL6cbtgEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_VxI-QLtiEeSTjNEQkASznQ" name="privateDeclarations">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_WWXyQLtiEeSTjNEQkASznQ" name="protectedDeclarations">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_XQ6H4LtiEeSTjNEQkASznQ" name="publicDeclarations">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_URCykLtkEeSTjNEQkASznQ" name="DependencyProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_cR_xQLtkEeSTjNEQkASznQ" name="KindInHeader" type="_e5SjoLtkEeSTjNEQkASznQ"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_dEdwALtkEeSTjNEQkASznQ" name="KindInImplementation" type="_e5SjoLtkEeSTjNEQkASznQ"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ESAtkLtlEeSTjNEQkASznQ" name="base_Dependency" association="_ESAtkbtlEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Dependency"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_e5SjoLtkEeSTjNEQkASznQ" name="DependencyKind">
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_mW92ILtkEeSTjNEQkASznQ" name="ForwardReference"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_ndKpMLtkEeSTjNEQkASznQ" name="Inclusion"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_oUnOkLtkEeSTjNEQkASznQ" name="None"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_ESAtkbtlEeSTjNEQkASznQ" name="E_DependencyProperties_Dependency1" memberEnd="_ESAtkrtlEeSTjNEQkASznQ _ESAtkLtlEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_ESAtkrtlEeSTjNEQkASznQ" name="extension_DependencyProperties" type="_URCykLtkEeSTjNEQkASznQ" aggregation="composite" association="_ESAtkbtlEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_anl9kLtnEeSTjNEQkASznQ" name="GenerationProperties" isAbstract="true">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_gjD2cLtnEeSTjNEQkASznQ" name="generate">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_i2iU8LtnEeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_mAeaALtqEeSTjNEQkASznQ" name="EnumerationProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_pB2gULtqEeSTjNEQkASznQ" general="_anl9kLtnEeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_Ytg5sLtrEeSTjNEQkASznQ" general="_DfwY8LtfEeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_2Bn4QLwAEeSTjNEQkASznQ" name="base_Enumeration" association="_2BofULwAEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Enumeration"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_2a0skLtqEeSTjNEQkASznQ" name="OperationProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_YbzpMLtsEeSTjNEQkASznQ" name="Inline">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_cpnGYLtsEeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Y7YhILtsEeSTjNEQkASznQ" name="Polymorphic">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_e-f6ILtsEeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ZarsQLtsEeSTjNEQkASznQ" name="kind" type="_Nbf5QLtzEeSTjNEQkASznQ"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_YWaHoLtzEeSTjNEQkASznQ" name="generateDefinition">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_a8cmQLv2EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_3YSwQLwAEeSTjNEQkASznQ" name="base_Operation">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_xLUaUM4MEeSo_bwoIR2YQw" name="base_Operation">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_RlmUUM4NEeSo_bwoIR2YQw" name="base_Operation" association="_RlmUUc4NEeSo_bwoIR2YQw">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_uOquALtrEeSTjNEQkASznQ" name="TypeProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_LIgGsMl7EeS9zpwN4FvQsA" name="name" visibility="public">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Tba_IMl7EeS9zpwN4FvQsA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_TbfQkMl7EeS9zpwN4FvQsA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_da-_QM1PEeSo_bwoIR2YQw" value=""/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_ZNlLAMl7EeS9zpwN4FvQsA" name="definitionFile" visibility="public">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_cIKs0Ml7EeS9zpwN4FvQsA" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cILT4Ml7EeS9zpwN4FvQsA" value="1"/>
+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_c0r0QM1PEeSo_bwoIR2YQw" value=""/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_F28xcLttEeSTjNEQkASznQ" name="ParameterProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_JTABkLttEeSTjNEQkASznQ" name="type">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <defaultValue xmi:type="uml:LiteralString" xmi:id="_cD_XIM1PEeSo_bwoIR2YQw" value=""/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_nuSVgLwAEeSTjNEQkASznQ" name="base_Parameter">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Parameter"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_yPsocM4MEeSo_bwoIR2YQw" name="base_Parameter">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Parameter"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_QlTU8M4NEeSo_bwoIR2YQw" name="base_Parameter" association="_QlTU8c4NEeSo_bwoIR2YQw">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Parameter"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_Nbf5QLtzEeSTjNEQkASznQ" name="OperationKind">
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_QLkNILtzEeSTjNEQkASznQ" name="Member"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_RFnakLtzEeSTjNEQkASznQ" name="Friend"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_SUDjoLtzEeSTjNEQkASznQ" name="Global"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_DBEgULv4EeSTjNEQkASznQ" name="ClassGenerationProperties" isAbstract="true">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_jLH6ULtmEeSTjNEQkASznQ" name="generateStateMachine">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_nmR3ALtmEeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_SO6jgLv4EeSTjNEQkASznQ" name="generateAssignmentOperator">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_sHgSILv4EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_S4VT8Lv4EeSTjNEQkASznQ" name="generateCopyConstructor">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_tZ01oLv4EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_TZdEALv4EeSTjNEQkASznQ" name="generateDefaultConstructor">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_u32S0Lv4EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_UTlxALv4EeSTjNEQkASznQ" name="generateDestructor">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_ywKoMLv4EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_UyXXsLv4EeSTjNEQkASznQ" name="generateEqualityOperator">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_7x018Lv4EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_hVXlQLv4EeSTjNEQkASznQ" name="generateExtractionOperator">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_9K0CILv4EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_h4bPALv4EeSTjNEQkASznQ" name="generateInequalityOperator">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_-Th9sLv4EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_iX8ckLv4EeSTjNEQkASznQ" name="generateInsertionOperator">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="__TF9QLv4EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_6cViULv7EeSTjNEQkASznQ" name="GenerelizationProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_9xoDILv7EeSTjNEQkASznQ" name="virtual">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="__jhekLv7EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Vf0kgLwBEeSTjNEQkASznQ" name="base_Generalization" association="_Vf0kgbwBEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Generalization"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_tkuhQLv8EeSTjNEQkASznQ" name="RTSAttributeProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_P6FycLv-EeSTjNEQkASznQ" general="_UOBiQLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_os_rYLv-EeSTjNEQkASznQ" general="_HCt-kLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_auHDwLwAEeSTjNEQkASznQ" name="base_Property" association="_auHDwbwAEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Property"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_uod2MLv8EeSTjNEQkASznQ" name="RTSClassProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_kOlmYLv-EeSTjNEQkASznQ" general="_nrBGcLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_nx_bsLv-EeSTjNEQkASznQ" general="_HCt-kLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_DvNJ8Lv-EeSTjNEQkASznQ" name="typeDescriptorHint">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_cF5WELwAEeSTjNEQkASznQ" name="base_Class" association="_cF5WEbwAEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_HCt-kLv9EeSTjNEQkASznQ" name="RTSDescriptorProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_Jamb8Lv9EeSTjNEQkASznQ" name="generateDescriptor">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_LePHoLv9EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_UOBiQLv9EeSTjNEQkASznQ" name="RTSAbstractAttributeProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_WXw18Lv9EeSTjNEQkASznQ" name="generateTypeModifier">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_bwjfkLv9EeSTjNEQkASznQ" value="true"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_W5kigLv9EeSTjNEQkASznQ" name="numElementsFunctionBody">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_hyRxcLv9EeSTjNEQkASznQ" name="typeDescriptor">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_nrBGcLv9EeSTjNEQkASznQ" name="RTSClassifierProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_pk2V4Lv9EeSTjNEQkASznQ" name="copyFunctionBody">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_qCHgsLv9EeSTjNEQkASznQ" name="decodeFunctionBody">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_qeCnsLv9EeSTjNEQkASznQ" name="destroyFunctionBody">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_rAXRoLv9EeSTjNEQkASznQ" name="encodeFunctionBody">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_11HNoLv9EeSTjNEQkASznQ" name="initFunctionBody">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_6a8wULv9EeSTjNEQkASznQ" name="version">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ <defaultValue xmi:type="uml:LiteralInteger" xmi:id="_-cprMLv9EeSTjNEQkASznQ"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_S0Jv0Lv-EeSTjNEQkASznQ" name="RTSEnumerationProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_lJa28Lv-EeSTjNEQkASznQ" general="_nrBGcLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_mDyNcLv-EeSTjNEQkASznQ" general="_HCt-kLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_aIa8wLwAEeSTjNEQkASznQ" name="base_Enumeration" association="_aIbj0LwAEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Enumeration"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_WG22sLv-EeSTjNEQkASznQ" name="RTSEnumerationLiteralProperties">
+ <generalization xmi:type="uml:Generalization" xmi:id="_aUFFELv-EeSTjNEQkASznQ" general="_UOBiQLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <generalization xmi:type="uml:Generalization" xmi:id="_pW91cLv-EeSTjNEQkASznQ" general="_HCt-kLv9EeSTjNEQkASznQ" isSubstitutable="false"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_bT9i0LwAEeSTjNEQkASznQ" name="base_EnumerationLiteral" association="_bT9i0bwAEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#EnumerationLiteral"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_aIbj0LwAEeSTjNEQkASznQ" name="E_RTSEnumerationProperties_Enumeration1" memberEnd="_aIbj0bwAEeSTjNEQkASznQ _aIa8wLwAEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_aIbj0bwAEeSTjNEQkASznQ" name="extension_RTSEnumerationProperties" type="_S0Jv0Lv-EeSTjNEQkASznQ" aggregation="composite" association="_aIbj0LwAEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_auHDwbwAEeSTjNEQkASznQ" name="E_RTSAttributeProperties_Property1" memberEnd="_auHDwrwAEeSTjNEQkASznQ _auHDwLwAEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_auHDwrwAEeSTjNEQkASznQ" name="extension_RTSAttributeProperties" type="_tkuhQLv8EeSTjNEQkASznQ" aggregation="composite" association="_auHDwbwAEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_bT9i0bwAEeSTjNEQkASznQ" name="E_RTSEnumerationLiteralProperties_EnumerationLiteral1" memberEnd="_bT9i0rwAEeSTjNEQkASznQ _bT9i0LwAEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_bT9i0rwAEeSTjNEQkASznQ" name="extension_RTSEnumerationLiteralProperties" type="_WG22sLv-EeSTjNEQkASznQ" aggregation="composite" association="_bT9i0bwAEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_cF5WEbwAEeSTjNEQkASznQ" name="E_RTSClassProperties_Class1" memberEnd="_cF5WErwAEeSTjNEQkASznQ _cF5WELwAEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_cF5WErwAEeSTjNEQkASznQ" name="extension_RTSClassProperties" type="_uod2MLv8EeSTjNEQkASznQ" aggregation="composite" association="_cF5WEbwAEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_2BofULwAEeSTjNEQkASznQ" name="E_EnumerationProperties_Enumeration1" memberEnd="_2BofUbwAEeSTjNEQkASznQ _2Bn4QLwAEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_2BofUbwAEeSTjNEQkASznQ" name="extension_EnumerationProperties" type="_mAeaALtqEeSTjNEQkASznQ" aggregation="composite" association="_2BofULwAEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_Vf0kgbwBEeSTjNEQkASznQ" name="E_GenerelizationProperties_Generalization1" memberEnd="_Vf0kgrwBEeSTjNEQkASznQ _Vf0kgLwBEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_Vf0kgrwBEeSTjNEQkASznQ" name="extension_GenerelizationProperties" type="_6cViULv7EeSTjNEQkASznQ" aggregation="composite" association="_Vf0kgbwBEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Stereotype" xmi:id="_WW1sELwBEeSTjNEQkASznQ" name="ArtifactProperties">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_mL0nwLwBEeSTjNEQkASznQ" name="base_Artifact" association="_mL0nwbwBEeSTjNEQkASznQ">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Artifact"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_uZIAYLwBEeSTjNEQkASznQ" name="includeFile">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_u0-O4LwBEeSTjNEQkASznQ" name="sourceFile">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_mL0nwbwBEeSTjNEQkASznQ" name="E_ArtifactProperties_Artifact1" memberEnd="_mL0nwrwBEeSTjNEQkASznQ _mL0nwLwBEeSTjNEQkASznQ">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_mL0nwrwBEeSTjNEQkASznQ" name="extension_ArtifactProperties" type="_WW1sELwBEeSTjNEQkASznQ" aggregation="composite" association="_mL0nwbwBEeSTjNEQkASznQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_WVx7QM4MEeSo_bwoIR2YQw" name="E_CapsuleProperties_Class1" memberEnd="_WVx7Qc4MEeSo_bwoIR2YQw _WVxUMM4MEeSo_bwoIR2YQw">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_WVx7Qc4MEeSo_bwoIR2YQw" name="extension_CapsuleProperties" type="_LEi4sLtiEeSTjNEQkASznQ" aggregation="composite" association="_WVx7QM4MEeSo_bwoIR2YQw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_P4AxIM4NEeSo_bwoIR2YQw" name="E_AttributeProperties_Property1" memberEnd="_P4AxIc4NEeSo_bwoIR2YQw _P4AKEM4NEeSo_bwoIR2YQw">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_P4AxIc4NEeSo_bwoIR2YQw" name="extension_AttributeProperties" type="_G70IkLs9EeSTjNEQkASznQ" aggregation="composite" association="_P4AxIM4NEeSo_bwoIR2YQw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_QlTU8c4NEeSo_bwoIR2YQw" name="E_ParameterProperties_Parameter1" memberEnd="_QlTU8s4NEeSo_bwoIR2YQw _QlTU8M4NEeSo_bwoIR2YQw">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_QlTU8s4NEeSo_bwoIR2YQw" name="extension_ParameterProperties" type="_F28xcLttEeSTjNEQkASznQ" aggregation="composite" association="_QlTU8c4NEeSo_bwoIR2YQw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Extension" xmi:id="_RlmUUc4NEeSo_bwoIR2YQw" name="E_OperationProperties_Operation1" memberEnd="_RlmUUs4NEeSo_bwoIR2YQw _RlmUUM4NEeSo_bwoIR2YQw">
+ <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_RlmUUs4NEeSo_bwoIR2YQw" name="extension_OperationProperties" type="_2a0skLtqEeSTjNEQkASznQ" aggregation="composite" association="_RlmUUc4NEeSo_bwoIR2YQw"/>
+ </packagedElement>
+ </uml:Profile>
+ <css:ModelStyleSheets xmi:id="_jl9OMLwAEeSTjNEQkASznQ"/>
+</xmi:XMI>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.classpath b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.project b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.project
new file mode 100644
index 0000000..37b32ff
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.cpp.rts</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a94a945
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Runtime Library
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.cpp.rts;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.core.runtime;bundle-version="3.10.0",
+ org.eclipse.papyrusrt.codegen.lang.cpp;visibility:=reexport,
+ org.eclipse.papyrusrt.rts,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrusrt.xtumlrt.umlrt.model,
+ org.eclipse.papyrusrt.codegen.utils
+Export-Package: org.eclipse.papyrusrt.codegen.cpp.rts
+Bundle-Vendor: Zeligsoft (2009) Limited
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/about.html b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/about.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/build.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/build.properties
new file mode 100644
index 0000000..7ae8049
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
+src.includes = src/,\
+ META-INF/
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/pom.xml
new file mode 100644
index 0000000..165bed4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.cpp.rts</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/src/org/eclipse/papyrusrt/codegen/cpp/rts/UMLRTRuntime.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/src/org/eclipse/papyrusrt/codegen/cpp/rts/UMLRTRuntime.java
new file mode 100644
index 0000000..6692299
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/src/org/eclipse/papyrusrt/codegen/cpp/rts/UMLRTRuntime.java
@@ -0,0 +1,629 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.rts;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberField;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalFwdDeclarable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalHeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.StandardLibrary;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.Signal;
+
+/**
+ * A utility namespace that defines all elements of the RTS in terms of the C++
+ * language model.
+ */
+public class UMLRTRuntime
+{
+ private static final ExternalHeaderFile umlrtcapsule_hh = new ExternalHeaderFile( "umlrtcapsule.hh" );
+ private static final ExternalHeaderFile umlrtcapsuleclass_hh = new ExternalHeaderFile( "umlrtcapsuleclass.hh" );
+ private static final ExternalHeaderFile umlrtcapsuleid_hh = new ExternalHeaderFile( "umlrtcapsuleid.hh" );
+ private static final ExternalHeaderFile umlrtcapsulepart_hh = new ExternalHeaderFile( "umlrtcapsulepart.hh" );
+ private static final ExternalHeaderFile umlrtcapsulerole_hh = new ExternalHeaderFile( "umlrtcapsulerole.hh" );
+ private static final ExternalHeaderFile umlrtcommsport_hh = new ExternalHeaderFile( "umlrtcommsport.hh" );
+ private static final ExternalHeaderFile umlrtcommsportfarend_hh = new ExternalHeaderFile( "umlrtcommsportfarend.hh" );
+ private static final ExternalHeaderFile umlrtcommsportmap_hh = new ExternalHeaderFile( "umlrtcommsportmap.hh" );
+ private static final ExternalHeaderFile umlrtcommsportrole_hh = new ExternalHeaderFile( "umlrtcommsportrole.hh" );
+ private static final ExternalHeaderFile umlrtcontroller_hh = new ExternalHeaderFile( "umlrtcontroller.hh" );
+ private static final ExternalHeaderFile umlrtframeprotocol_hh = new ExternalHeaderFile( "umlrtframeprotocol.hh" );
+ private static final ExternalHeaderFile umlrtframeservice_hh = new ExternalHeaderFile( "umlrtframeservice.hh" );
+ private static final ExternalHeaderFile umlrtlogprotocol_hh = new ExternalHeaderFile( "umlrtlogprotocol.hh" );
+ private static final ExternalHeaderFile umlrtmessage_hh = new ExternalHeaderFile( "umlrtmessage.hh" );
+ private static final ExternalHeaderFile umlrtprotocol_hh = new ExternalHeaderFile( "umlrtprotocol.hh" );
+ private static final ExternalHeaderFile umlrtrtsinterface_hh = new ExternalHeaderFile( "umlrtrtsinterface.hh" );
+ private static final ExternalHeaderFile umlrtsignal_hh = new ExternalHeaderFile( "umlrtsignal.hh" );
+ private static final ExternalHeaderFile umlrtinsignal_hh = new ExternalHeaderFile( "umlrtinsignal.hh" );
+ private static final ExternalHeaderFile umlrtoutsignal_hh = new ExternalHeaderFile( "umlrtoutsignal.hh" );
+ private static final ExternalHeaderFile umlrtslot_hh = new ExternalHeaderFile( "umlrtslot.hh" );
+ private static final ExternalHeaderFile umlrttimerid_hh = new ExternalHeaderFile( "umlrttimerid.hh" );
+ private static final ExternalHeaderFile umlrttimerprotocol_hh = new ExternalHeaderFile( "umlrttimerprotocol.hh" );
+
+ public static class UMLRTBaseCommProtocol
+ {
+ public static Expression Signal( Signal signal )
+ {
+ if( "rtBound".equals( signal.getName() ) )
+ return UMLRTSignal.rtBound();
+ if( "rtUnbound".equals( signal.getName() ) )
+ return UMLRTSignal.rtUnbound();
+ return null;
+ }
+ }
+
+ public static class UMLRTCapsule
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcapsule_hh, "UMLRTCapsule", "class UMLRTCapsule" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final AbstractFunctionCall Ctor( Expression rtsif, Expression capsuleClass, Expression slot, Expression borderPorts, Expression internalPorts, Expression isStatic )
+ {
+ AbstractFunctionCall call = new ExternalConstructorCall( Element );
+ call.addArgument( rtsif );
+ call.addArgument( capsuleClass );
+ call.addArgument( slot );
+ call.addArgument( borderPorts );
+ call.addArgument( internalPorts );
+ call.addArgument( isStatic );
+ return call;
+ }
+
+ public static final MemberField slotField = new MemberField( UMLRTRuntime.UMLRTSlot.getType().constPtr(), "slot" );
+ public static final MemberField borderPortsField = new MemberField( UMLRTCommsPort.getType().const_().ptr().ptr(), "borderPorts" );
+ public static final MemberField internalPortsField = new MemberField( UMLRTRuntime.UMLRTCommsPort.getType().ptr().const_(), "internalPorts" );
+
+ public static final MemberFunction bindPortFunction = new MemberFunction( PrimitiveType.VOID, "bindPort" );
+ public static final MemberFunction unbindPortFunction = new MemberFunction( PrimitiveType.VOID, "unbindPort" );
+ public static final MemberFunction bindPortInstanceFunction = new MemberFunction( PrimitiveType.VOID, "bindPortInstance" );
+
+ static
+ {
+ bindPortFunction.add( new Parameter( PrimitiveType.INT, "portId" ) );
+ unbindPortFunction.add( new Parameter( PrimitiveType.INT, "portId" ) );
+ bindPortInstanceFunction.add( new Parameter( PrimitiveType.INT, "portId" ) );
+ bindPortInstanceFunction.add( new Parameter( PrimitiveType.INT, "instance" ) );
+ }
+
+ public static ElementAccess slot() { return new ElementAccess( slotField ); }
+ public static ElementAccess borderPorts() { return new ElementAccess( borderPortsField ); }
+ public static ElementAccess internalPorts() { return new ElementAccess( internalPortsField ); }
+
+ public static AbstractFunctionCall bindPort( Expression self, Expression isBorder, Expression portId )
+ {
+ MemberFunctionCall call = new MemberFunctionCall( self, bindPortFunction );
+ call.addArgument( isBorder );
+ call.addArgument( portId );
+ return call;
+ }
+
+ public static AbstractFunctionCall unbindPort( Expression self, Expression isBorder, Expression portId )
+ {
+ MemberFunctionCall call = new MemberFunctionCall( self, unbindPortFunction );
+ call.addArgument( isBorder );
+ call.addArgument( portId );
+ return call;
+ }
+
+ public static AbstractFunctionCall bindPortInstance( Expression self, Expression isBorder, Expression portId, Expression instance )
+ {
+ MemberFunctionCall call = new MemberFunctionCall( self, bindPortInstanceFunction );
+ call.addArgument( isBorder );
+ call.addArgument( portId );
+ call.addArgument( instance );
+ return call;
+ }
+ }
+
+ public static class UMLRTCapsuleClass
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcapsuleclass_hh, "UMLRTCapsuleClass", "struct UMLRTCapsuleClass" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberFunction instantiate = new MemberFunction( PrimitiveType.VOID, "instantiate" );
+
+ public static final MemberField subcapsuleRoles = new MemberField( UMLRTCapsuleRole.getType().const_().constPtr(), "subcapsuleRoles" );
+ public static final MemberField portRolesBorder = new MemberField( StandardLibrary.size_t, "portRolesBorder" );
+ public static final MemberField numPortRolesBorder = new MemberField( UMLRTCommsPortRole.getType().constPtr().const_(), "numPortRolesBorder" );
+ public static final MemberField numPortRolesInternal = new MemberField( StandardLibrary.size_t, "numPortRolesInternal" );
+ public static final MemberField portRolesInternal = new MemberField( UMLRTCommsPortRole.getType().constPtr().const_(), "portRolesInternal" );
+
+ static
+ {
+ instantiate.add( new Parameter( UMLRTSlot.getType().ptr(), "slot" ) );
+ instantiate.add( new Parameter( UMLRTCommsPortMap.getType().ptr(), "portMap" ) );
+ }
+ }
+
+ public static class UMLRTCapsuleId
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcapsuleid_hh, "UMLRTCapsuleId", "class UMLRTCapsuleId" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final AbstractFunctionCall Ctor( Expression capsule )
+ {
+ AbstractFunctionCall call = new ExternalConstructorCall( Element );
+ call.addArgument( capsule );
+ return call;
+ }
+ }
+
+ public static class UMLRTCapsulePart
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcapsulepart_hh, "UMLRTCapsulePart", "struct UMLRTCapsulePart" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberField slots = new MemberField( UMLRTSlot.getType().ptr().ptr(), "slots" );
+ }
+
+ public static class UMLRTCapsuleRole
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcapsulerole_hh, "UMLRTCapsuleRole", "struct UMLRTCapsuleRole" );
+ public static Type getType() { return Element.getType(); }
+ }
+
+ public static class UMLRTCommsPort
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcommsport_hh, "UMLRTCommsPort", "struct UMLRTCommsPort" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberFunction roleFunction = new MemberFunction( UMLRTCommsPortRole.getType().ptr().const_(), "role" );
+ public static final MemberFunction getFunction = new MemberFunction( UMLRTCommsPort.getType().ptr().const_(), "get" );
+ public static final MemberField farEnds = new MemberField( UMLRTCommsPortFarEnd.getType().ptr(), "farEnds" );
+
+ // TODO Match the id field to the PortId enum.
+
+ static
+ {
+ getFunction.add( new Parameter( PrimitiveType.INT.arrayOf( null ), "map" ) );
+ getFunction.add( new Parameter( UMLRTCommsPort.getType().ptr().const_(), "ports" ) );
+ getFunction.add( new Parameter( StandardLibrary.size_t, "index" ) );
+ }
+
+ public static AbstractFunctionCall role( Expression self )
+ {
+ return new MemberFunctionCall( self, roleFunction );
+ }
+
+ public static AbstractFunctionCall get( Expression portMap, Expression ports, Expression index )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, getFunction );
+ call.addArgument( portMap );
+ call.addArgument( ports );
+ call.addArgument( index );
+ return call;
+ }
+ }
+
+ public static class UMLRTCommsPortFarEnd
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcommsportfarend_hh, "UMLRTCommsPortFarEnd", "struct UMLRTCommsPortFarEnd" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberField index = new MemberField( StandardLibrary.size_t, "farEndIndex" );
+ public static final MemberField port = new MemberField( UMLRTCommsPort.getType().ptr().const_(), "port" );
+ }
+
+ public static class UMLRTCommsPortMap
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcommsportmap_hh, "UMLRTCommsPortMap", "struct UMLRTCommsPortMap" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberField port = new MemberField( PrimitiveType.INT, "port" );
+ }
+
+ public static class UMLRTCommsPortRole
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcommsportrole_hh, "UMLRTCommsPortRole", "struct UMLRTCommsPortRole" );
+ public static Type getType() { return Element.getType(); }
+
+ // TODO Match the roleIndex to InternalPortId/BorderPortId
+
+ public static final MemberField id = new MemberField( PrimitiveType.INT, "id" );
+ public static final MemberField conjugated = new MemberField( PrimitiveType.BOOL, "conjugated" );
+ }
+
+ public static class UMLRTController
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtcontroller_hh, "UMLRTController", "class UMLRTController" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final AbstractFunctionCall Ctor( Expression name, Expression capsules, Expression size )
+ {
+ AbstractFunctionCall call = new ExternalConstructorCall( Element );
+ call.addArgument( name );
+ call.addArgument( capsules );
+ call.addArgument( size );
+ return call;
+ }
+ }
+
+ public static class UMLRTLogProtocol
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtlogprotocol_hh, "UMLRTLogProtocol", "class UMLRTLogProtocol" );
+ public static final ExternalElement BaseRole = new ExternalFwdDeclarable( umlrtlogprotocol_hh, "UMLRTLogProtocol_baserole", "class UMLRTLogProtocol_baserole" );
+ public static Type getBaseRoleType() { return BaseRole.getType(); }
+
+ public static AbstractFunctionCall BaseRoleCtor( Expression portAccess )
+ {
+ // The LogProtocol does not need any parameters in the constructor call.
+ return new ExternalConstructorCall( BaseRole );
+ }
+ }
+
+ public static class UMLRTMessage
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtmessage_hh, "UMLRTMessage", "class UMLRTMessage" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberField destPort = new MemberField( UMLRTCommsPort.Element.getType().ptr().const_(), "destPort" );
+ public static final MemberField signal = new MemberField( UMLRTSignal.Element.getType(), "signal" );
+ }
+
+ public static class UMLRTProtocol
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtprotocol_hh, "UMLRTProtocol", "class UMLRTProtocol" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberField srcPort = new MemberField( UMLRTCommsPort.Element.getType().constPtr().const_(), "srcPort" );
+
+ public static final AbstractFunctionCall Ctor()
+ {
+ return new ExternalConstructorCall( Element );
+ }
+ }
+
+ public static class UMLRTRtsInterface
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtrtsinterface_hh, "UMLRTRtsInterface", "class UMLRTRtsInterface" );
+ public static Type getType() { return Element.getType(); }
+ }
+
+ public static class UMLRTSignal
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtsignal_hh, "UMLRTSignal", "class UMLRTSignal" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberFunction getId = new MemberFunction( PrimitiveType.INT, "getId" );
+ public static final MemberFunction getPayloadFunction = new MemberFunction( PrimitiveType.UCHAR.ptr(), "getPayload" );
+ public static final MemberFunction initialize = new MemberFunction( PrimitiveType.VOID, "initialize" );
+ public static final MemberFunction isInvalid = new MemberFunction( PrimitiveType.BOOL, "isInvalid" );
+
+ public static final MemberField rtBound_field = new MemberField( PrimitiveType.INT, "rtBound" );
+ public static final MemberField rtUnbound_field = new MemberField( PrimitiveType.INT, "rtUnbound" );
+ public static final MemberField FIRST_PROTOCOL_SIGNAL_ID_field = new MemberField( PrimitiveType.INT, "FIRST_PROTOCOL_SIGNAL_ID" );
+
+ static
+ {
+ rtBound_field.getName().setParent( Element );
+ rtUnbound_field.getName().setParent( Element );
+ FIRST_PROTOCOL_SIGNAL_ID_field.getName().setParent( Element );
+ }
+
+ public static AbstractFunctionCall getPayload( Expression signal )
+ {
+ return new MemberFunctionCall( signal, getPayloadFunction );
+ }
+
+ public static Expression rtBound() { return new MemberAccess( Element, rtBound_field ); }
+ public static Expression rtUnbound() { return new MemberAccess( Element, rtUnbound_field ); }
+ public static Expression FIRST_PROTOCOL_SIGNAL_ID()
+ {
+ return new MemberAccess( Element, FIRST_PROTOCOL_SIGNAL_ID_field );
+ }
+ }
+
+ public static class UMLRTInSignal extends UMLRTSignal
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtinsignal_hh, "UMLRTInSignal", "class UMLRTInSignal" );
+ public static Type getType() { return Element.getType(); }
+ }
+
+ public static class UMLRTOutSignal extends UMLRTSignal
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtoutsignal_hh, "UMLRTOutSignal", "class UMLRTOutSignal" );
+ public static Type getType() { return Element.getType(); }
+ }
+
+ public static class UMLRTSlot
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtslot_hh, "UMLRTSlot", "struct UMLRTSlot" );
+ public static Type getType() { return Element.getType(); }
+
+ public static final MemberField capsuleClass = new MemberField( UMLRTCapsuleClass.getType().ptr().const_(), "capsuleClass" );
+ public static final MemberField capsule = new MemberField( UMLRTCapsule.getType().ptr().const_(), "capsule" );
+ public static final MemberField parts = new MemberField( UMLRTCapsulePart.getType().ptr(), "parts" );
+ public static final MemberField ports = new MemberField( UMLRTCommsPort.getType().ptr(), "ports" );
+ }
+
+ public static class UMLRTTimerId
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrttimerid_hh, "UMLRTTimerId", "class UMLRTTimerId" );
+
+ public static Type getType() { return Element.getType(); }
+ }
+
+ public static class UMLRTTimerProtocol
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrttimerprotocol_hh, "UMLRTTimerProtocol", "class UMLRTTimerProtocol" );
+ public static final ExternalElement BaseRole = new ExternalFwdDeclarable( umlrttimerprotocol_hh, "UMLRTTimerProtocol_baserole", "class UMLRTTimerProtocol_baserole" );
+ public static final ExternalElement TimeoutSignal = new ExternalElement( umlrttimerprotocol_hh, "signal_timeout" );
+
+ public static Type getType() { return Element.getType(); }
+ public static Type getBaseRoleType() { return BaseRole.getType(); }
+
+ static
+ {
+ TimeoutSignal.setParent( Element );
+ }
+
+ public static AbstractFunctionCall BaseRoleCtor( Expression portAccess )
+ {
+ AbstractFunctionCall call = new ExternalConstructorCall( BaseRole );
+ call.addArgument( portAccess );
+ return call;
+ }
+
+ public static Expression Signal( Signal signal )
+ {
+ if( "timeout".equals( signal.getName() ) )
+ return new MemberAccess( Element, TimeoutSignal );
+ return null;
+ }
+ }
+
+ public static class UMLRTFrameService
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtframeservice_hh, "UMLRTFrameService", "class UMLRTFrameService" );
+
+ public static final MemberFunction automaticServicePortRegistrationFunction = new MemberFunction( PrimitiveType.VOID, "automaticServicePortRegistration" );//( UMLRTCapsule * capsule );
+ public static final MemberFunction bindSubcapsulePortFunction = new MemberFunction( PrimitiveType.VOID, "bindSubcapsulePort" );//( bool isBorder, UMLRTCapsule * subcapsule, int portIndex, int farEndIndex );
+ public static final MemberFunction unbindSubcapsulePortFunction = new MemberFunction( PrimitiveType.VOID, "unbindSubcapsulePort" );//( bool isBorder, UMLRTCapsule * subcapsule, int portIndex, int farEndIndex );
+ public static final MemberFunction bindServicePortFunction = new MemberFunction( PrimitiveType.BOOL, "bindServicePort" );//( const UMLRTCommsPort * sapPort, const UMLRTCommsPort * sppPort );
+ public static final MemberFunction unbindServicePortFunction = new MemberFunction( PrimitiveType.BOOL, "unbindServicePort" );//( const UMLRTCommsPort * sapPort, const UMLRTCommsPort * sppPort );
+ public static final MemberFunction connectPortsFunction = new MemberFunction( PrimitiveType.VOID, "connectPorts" );//( const UMLRTCommsPort * p1, size_t p1Index, const UMLRTCommsPort * p2, size_t p2Index );
+ public static final MemberFunction connectRelayPortFunction = new MemberFunction( PrimitiveType.VOID, "connectRelayPort" );
+
+ public static final MemberFunction connectSlotPortFunction = new MemberFunction( PrimitiveType.VOID, "connectSlotPort" );//( const UMLRTSlot * slot, const UMLRTCommsPort * * borderPorts, int portId, int instance );
+ public static final MemberFunction controllerDeportFunction = new MemberFunction( PrimitiveType.VOID, "controllerDeport" );//( UMLRTSlot * slot, bool synchronous, bool lockAcquired );
+ public static final MemberFunction controllerDestroyFunction = new MemberFunction( PrimitiveType.VOID, "controllerDestroy" );//( UMLRTSlot * slot, bool isTopSlot, bool synchronous, bool lockAcquired );
+ public static final MemberFunction controllerImportFunction = new MemberFunction( PrimitiveType.BOOL, "controllerImport" );//( UMLRTSlot * slot, UMLRTCapsule * capsule, bool synchronous, bool lockAcuired );
+ public static final MemberFunction controllerIncarnateFunction = new MemberFunction( PrimitiveType.VOID, "controllerIncarnate" );//( UMLRTCapsule * capsule, size_t sizeSerializedData, void * serializedData );
+ public static final MemberFunction freeFarEndsCountFunction = new MemberFunction( StandardLibrary.size_t, "freeFarEndsCount" );//( const UMLRTCommsPort * port );
+ public static final MemberFunction createPortsFunction = new MemberFunction( UMLRTCommsPort.getType().const_().ptr(), "createPorts" );//( UMLRTSlot * slot, const UMLRTCapsuleClass * capsuleClass, size_t numPortRoles, const UMLRTCommsPortRole portRoles[],
+ //bool border, bool importProxy = false, int roleIndexOffset = 0, bool isUnbound = false );
+ public static final MemberFunction createBorderPortsFunction = new MemberFunction( UMLRTCommsPort.getType().const_().ptr().ptr(), "createBorderPorts" );//( UMLRTSlot * slot, size_t numPorts );
+ public static final MemberFunction destroyPortsFunction = new MemberFunction( PrimitiveType.VOID, "destroyPorts" );//( size_t numPorts, const UMLRTCommsPort * ports );
+ public static final MemberFunction destroyPortListFunction = new MemberFunction( PrimitiveType.VOID, "destroyPortList" );//( size_t numPorts, const UMLRTCommsPort * * ports );
+ public static final MemberFunction disconnectPortFunction = new MemberFunction( PrimitiveType.VOID, "disconnectPort" );//( const UMLRTCommsPort * port );
+ public static final MemberFunction disconnectPortInstanceFunction = new MemberFunction( PrimitiveType.VOID, "disconnectPort" );//( const UMLRTCommsPort * port, int farEndIndex );
+ public static final MemberFunction instantiateFunction = new MemberFunction( PrimitiveType.VOID, "instantiate" );//( UMLRTSlot * slot, const UMLRTCapsuleClass * capsuleClass );
+ public static final MemberFunction moveFarEndFunction = new MemberFunction( PrimitiveType.VOID, "moveFarEnd" );//( const UMLRTCommsPort * srcPort, size_t srcIndex, const UMLRTCommsPort * destPort, size_t destIndex );
+ public static final MemberFunction importCapsuleFunction = new MemberFunction( PrimitiveType.BOOL, "importCapsule" );//( const UMLRTCommsPort * srcPort, UMLRTCapsule * capsule, const UMLRTCapsulePart * dest, int index );
+ public static final MemberFunction incarnateCapsuleFunction = new MemberFunction( UMLRTCapsuleId.getType().const_(), "incarnateCapsule" );//( const UMLRTCommsPort * srcPort, const UMLRTCapsulePart * part, const UMLRTCapsuleClass * capsuleClass, const void * userData, const UMLRTObject_class * type, const char * logThread, UMLRTController * controller, int index );
+ public static final MemberFunction requestControllerDeportFunction = new MemberFunction( PrimitiveType.VOID, "requestControllerDeport" );//( UMLRTSlot * slot, bool lockAcquired );
+ public static final MemberFunction requestControllerDestroyFunction = new MemberFunction( PrimitiveType.VOID, "requestControllerDestroy" );//( UMLRTSlot * slotToDestroy, bool isTopSlot, bool lockAcuired );
+ public static final MemberFunction rtsLockFunction = new MemberFunction( PrimitiveType.VOID, "rtsLock" );//();
+ public static final MemberFunction rtsUnlockFunction = new MemberFunction( PrimitiveType.VOID, "rtsUnlock" );//();
+ public static final MemberFunction sendBoundUnboundFunction = new MemberFunction( PrimitiveType.VOID, "sendBoundUnbound" );
+
+ public static AbstractFunctionCall bindSubcapsulePort( Expression isBorder, Expression subcapsule, Expression portIndex, Expression farEndIndex )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, bindSubcapsulePortFunction );
+ call.addArgument( isBorder );
+ call.addArgument( subcapsule );
+ call.addArgument( portIndex );
+ call.addArgument( farEndIndex );
+ return call;
+ }
+
+ public static AbstractFunctionCall connectPorts( Expression p1, Expression p1Index, Expression p2, Expression p2Index )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, connectPortsFunction );
+ call.addArgument( p1 );
+ call.addArgument( p1Index );
+ call.addArgument( p2 );
+ call.addArgument( p2Index );
+ return call;
+ }
+
+ public static AbstractFunctionCall connectRelayPort( Expression relayPort, Expression relayIndex, Expression destPort, Expression destIndex )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, connectRelayPortFunction );
+ call.addArgument( relayPort );
+ call.addArgument( relayIndex );
+ call.addArgument( destPort );
+ call.addArgument( destIndex );
+ return call;
+ }
+
+ public static AbstractFunctionCall connectSlotPort( Expression slot, Expression borderPorts, Expression portId, Expression index )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, connectSlotPortFunction );
+ call.addArgument( slot );
+ call.addArgument( borderPorts );
+ call.addArgument( portId );
+ call.addArgument( index );
+ return call;
+ }
+
+ public static AbstractFunctionCall createBorderPorts( Expression slotAccess, Expression numPorts )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, createBorderPortsFunction );
+ call.addArgument( slotAccess );
+ call.addArgument( numPorts );
+ return call;
+ }
+
+ public static AbstractFunctionCall disconnectPort( Expression port )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, disconnectPortFunction );
+ call.addArgument( port );
+ return call;
+ }
+
+ public static AbstractFunctionCall disconnectPort( Expression port, Expression instance )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, disconnectPortInstanceFunction );
+ call.addArgument( port );
+ call.addArgument( instance );
+ return call;
+ }
+
+ public static AbstractFunctionCall sendBoundUnbound( Expression port, Expression index, Expression farEndPort, Expression farEndIndex, Expression isBind )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, sendBoundUnboundFunction );
+ call.addArgument( port );
+ call.addArgument( index );
+ call.addArgument( farEndPort );
+ call.addArgument( farEndIndex );
+ call.addArgument( isBind );
+ return call;
+ }
+
+ public static AbstractFunctionCall unbindSubcapsulePort( Expression isBorder, Expression subcapsule, Expression portIndex, Expression farEndIndex )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, unbindSubcapsulePortFunction );
+ call.addArgument( isBorder );
+ call.addArgument( subcapsule );
+ call.addArgument( portIndex );
+ call.addArgument( farEndIndex );
+ return call;
+ }
+ }
+
+ public static class UMLRTFrameProtocol
+ {
+ public static final ExternalElement Element = new ExternalFwdDeclarable( umlrtframeprotocol_hh, "UMLRTFrameProtocol", "class UMLRTFrameProtocol" );
+ public static final ExternalElement BaseRole = new ExternalFwdDeclarable( umlrtframeprotocol_hh, "UMLRTFrameProtocol_baserole", "class UMLRTFrameProtocol_baserole" );
+ public static final ExternalElement IncarnateSignal = new ExternalElement( umlrtframeprotocol_hh, "signal_incarnate" );
+
+ public static final MemberFunction createPortsFunction = new MemberFunction( UMLRTCommsPort.getType().ptr().const_(), "createPorts" );
+
+ static
+ {
+ createPortsFunction.add( new Parameter( UMLRTSlot.getType().ptr(), "slot" ) );
+ createPortsFunction.add( new Parameter( UMLRTCapsuleClass.getType().ptr().const_(), "capsuleClass" ) );
+ createPortsFunction.add( new Parameter( StandardLibrary.size_t, "numPortRoles" ) );
+ createPortsFunction.add( new Parameter( UMLRTCommsPortRole.getType().ptr().const_(), "portRoles" ) );
+ createPortsFunction.add( new Parameter( PrimitiveType.BOOL, "isBorder" ) );
+ }
+
+ public static Type getType() { return Element.getType(); }
+ public static Type getBaseRoleType() { return BaseRole.getType(); }
+
+ public static AbstractFunctionCall BaseRoleCtor( Expression portAccess )
+ {
+ AbstractFunctionCall call = new ExternalConstructorCall( BaseRole );
+ call.addArgument( portAccess );
+ return call;
+ }
+
+ public static AbstractFunctionCall createPorts( Expression slotAccess, Expression capsuleClass, Expression numPorts, Expression portRoleAccess, Expression isBorder )
+ {
+ AbstractFunctionCall call = new MemberFunctionCall( Element, createPortsFunction );
+ call.addArgument( slotAccess );
+ call.addArgument( capsuleClass );
+ call.addArgument( numPorts );
+ call.addArgument( portRoleAccess );
+ call.addArgument( isBorder );
+ return call;
+ }
+
+ public static Expression Signal( Signal signal )
+ {
+ if( "incarnate".equals( signal.getName() ) )
+ return new MemberAccess( Element, IncarnateSignal );
+ return null;
+ }
+ }
+
+
+ /**
+ * Return the system-defined Type of the given uml.Type and null if the type is not recognized.
+ */
+ public static Type getSystemType( org.eclipse.papyrusrt.xtumlrt.common.Type type )
+ {
+ if( "UMLRTTimerId".equals( type.getName() ) )
+ return UMLRTTimerId.getType();
+ if( "UMLRTCapsuleId".equals( type.getName() ) )
+ return UMLRTCapsuleId.getType();
+ return null;
+ }
+
+ /**
+ * Return true if this is the <<ProtocolContainer>> for an RTS defined Protocol and
+ * false otherwise.
+ */
+ public static boolean isSystemProtocol( NamedElement element )
+ {
+ String name = element.getName();
+ if( "UMLRTBaseCommProtocol".equals( name )
+ || "UMLRTFrameProtocol".equals( name )
+ || "UMLRTLogProtocol".equals( name )
+ || "UMLRTTimerProtocol".equals( name ) )
+ return true;
+
+ return false;
+ }
+
+ /**
+ * Return the Type of the given system-defined protocol and null if the protocol is not recognized.
+ */
+ public static Type getSystemProtocolRole( Protocol protocol, boolean baseRole )
+ {
+ if( "UMLRTFrameProtocol".equals( protocol.getName() ) )
+ return baseRole ? UMLRTFrameProtocol.getBaseRoleType() : null;
+ if( "UMLRTLogProtocol".equals( protocol.getName() ) )
+ return baseRole ? UMLRTLogProtocol.getBaseRoleType() : null;
+ if( "UMLRTTimerProtocol".equals( protocol.getName() ) )
+ return baseRole ? UMLRTTimerProtocol.getBaseRoleType() : null;
+ return null;
+ }
+
+ /**
+ * Return a function to construct the given system-defined protocol and null if the protocol is not recognized.
+ */
+ public static AbstractFunctionCall getSystemProtocolRoleCtor( Protocol protocol, boolean baseRole, Expression portAccess )
+ {
+ if( "UMLRTFrameProtocol".equals( protocol.getName() ) )
+ return baseRole ? UMLRTFrameProtocol.BaseRoleCtor( portAccess ) : null;
+ if( "UMLRTLogProtocol".equals( protocol.getName() ) )
+ return baseRole ? UMLRTLogProtocol.BaseRoleCtor( portAccess ) : null;
+ if( "UMLRTTimerProtocol".equals( protocol.getName() ) )
+ return baseRole ? UMLRTTimerProtocol.BaseRoleCtor( portAccess ) : null;
+ return null;
+ }
+
+ /**
+ * Return an expression to access the signal enumerator for the given system-defined
+ * protocol and null if the protocol is not recognized.
+ */
+ public static Expression getSystemProtocolSignalAccess( Signal signal )
+ {
+ Protocol protocol = (Protocol)XTUMLRTUtil.getOwner( signal );
+ if( "UMLRTBaseCommProtocol".equals( protocol.getName() ) )
+ return UMLRTBaseCommProtocol.Signal( signal );
+ if( "UMLRTFrameProtocol".equals( protocol.getName() ) )
+ return UMLRTFrameProtocol.Signal( signal );
+ if( "UMLRTTimerProtocol".equals( protocol.getName() ) )
+ return UMLRTTimerProtocol.Signal( signal );
+ return null;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/src/org/eclipse/papyrusrt/codegen/cpp/rts/UMLRTSUtil.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/src/org/eclipse/papyrusrt/codegen/cpp/rts/UMLRTSUtil.java
new file mode 100644
index 0000000..7823145
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.rts/src/org/eclipse/papyrusrt/codegen/cpp/rts/UMLRTSUtil.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.rts;
+
+import java.net.URI;
+import java.net.URL;
+import java.util.Stack;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.Bundle;
+
+public class UMLRTSUtil {
+
+ public static String getRTSRootPath() {
+
+ Bundle bundle = Platform.getBundle("com.zeligsoft.umlrt.rts");
+ if (bundle != null) {
+ Path path = new Path("umlrts");
+ URL url = FileLocator.find(bundle, path, null);
+ try {
+ URI uri = FileLocator.resolve(url).toURI();
+ return simplifyPath(uri.getRawPath());
+ } catch (Exception e) {
+ return "";
+ }
+ }
+ return "";
+ }
+
+ private static String simplifyPath(String path) {
+
+ StringBuilder result = new StringBuilder();
+ if (path == null || path.length() == 0) {
+ return result.toString();
+ }
+
+ String[] strs = path.split("/");
+ Stack<String> stack = new Stack<String>();
+
+ for (String s : strs) {
+ if (s.length() == 0 || s.equals(".")) {
+
+ } else if (s.equals("..")) {
+ if (!stack.isEmpty()) {
+ stack.pop();
+ }
+ } else {
+ stack.push(s);
+ }
+ }
+
+ if (stack.isEmpty()) {
+ result.append('/');
+ } else {
+ while (!stack.isEmpty()) {
+ result.insert(0, stack.pop());
+ result.insert(0, '/');
+ }
+ }
+
+ return result.toString();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/.classpath b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/.classpath
new file mode 100644
index 0000000..30d130d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/.project b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/.project
new file mode 100644
index 0000000..8c82070
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.cpp.statemachines.flat</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c9374ba
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT State Machine C++ Generator
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.cpp.statemachines.flat;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Require-Bundle: org.eclipse.papyrus.umlrt;bundle-version="1.0.1",
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.cpp.rts,
+ org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.codegen.lang.cpp,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrusrt.xtumlrt.umlrt.model,
+ org.eclipse.papyrusrt.codegen.statemachines.flat,
+ org.eclipse.papyrusrt.codegen.statemachines.flat.model,
+ org.eclipse.xtend.lib;bundle-version="2.7.2",
+ org.eclipse.xtext.xbase;bundle-version="2.7.2"
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: org.eclipse.papyrusrt.codegen.cpp.statemachines.flat.generator
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/about.html b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/about.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/build.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/build.properties
new file mode 100644
index 0000000..ae1489d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ plugin.xml
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/plugin.xml
new file mode 100644
index 0000000..d6d137a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.papyrusrt.codegen.cpp.generator">
+ <generator
+ class="org.eclipse.papyrusrt.codegen.cpp.statemachines.flat.generator.StateMachineGenerator$Factory"
+ type="StateMachineGenerator">
+ </generator>
+ </extension>
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/pom.xml
new file mode 100644
index 0000000..6395525
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.cpp.statemachines.flat</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/FlatModel2Cpp.xtend b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/FlatModel2Cpp.xtend
new file mode 100644
index 0000000..ccb00c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/FlatModel2Cpp.xtend
@@ -0,0 +1,1332 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.cpp.statemachines.flat
+
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern
+import org.eclipse.papyrusrt.codegen.cpp.TypesUtil
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement
+//import org.eclipse.papyrusrt.codegen.lang.cpp.Type
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberField
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BinaryOperation
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.FunctionCall
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IndexExpr
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.LogicalComparison
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.UnaryOperation
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.BreakStatement
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ConditionalStatement
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ExpressionStatement
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ReturnStatement
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.SwitchClause
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.SwitchStatement
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.VariableDeclarationStatement
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.WhileStatement
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+import org.eclipse.papyrusrt.xtumlrt.common.ActionChain
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import org.eclipse.papyrusrt.xtumlrt.common.Entity
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.xtumlrt.common.JunctionPoint
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.Port
+import org.eclipse.papyrusrt.xtumlrt.common.Pseudostate
+import org.eclipse.papyrusrt.xtumlrt.common.Signal
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Type
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTTrigger
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime.UMLRTCommsPort
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime.UMLRTCommsPortRole
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime.UMLRTMessage
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime.UMLRTSignal
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+import static extension org.eclipse.papyrusrt.codegen.statemachines.transformations.CppNamesUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTSMVirtualInheritanceExtensions.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+import java.util.ArrayList
+import java.util.Arrays
+import java.util.Collection
+import java.util.HashMap
+import java.util.HashSet
+import java.util.LinkedHashSet
+import java.util.Map
+
+import org.eclipse.xtend.lib.annotations.Data
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.ActionDeclarationGenerator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.ActionInvocationGenerator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.ActionNameComparator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.ChainNameComparator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GuardDeclarationGenerator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GuardInvocationGenerator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GuardNameComparator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GlobalConstants
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.InPlaceTransformation
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.StateNestingFlattener
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.TransitionDepthComparator
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.TransformationContext
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.VertexNameComparator
+
+/**
+ * This class contains the transformation from flat UML-RT state machines to the
+ * C/C++ language model.
+ *
+ * It implements the algorithms described in the technical report
+ *
+ * E. Posse. "Transforming flat UML-RT State Machines to a C/C++ language model".
+ * Technical Report ZTR-2014-EP-002, Version 2, Zeligsoft, Sep 2014.
+ *
+ * @author eposse
+ */
+class FlatModel2Cpp implements InPlaceTransformation
+{
+
+ /**
+ * The CppCodePattern that is being used for this transformation operation.
+ */
+ @Data static class CppGenerationTansformationContext implements TransformationContext
+ {
+ CppCodePattern cpp
+ Collection<State> discardedStates
+ Entity modelClass
+ }
+
+ CppCodePattern cpp
+ /** (Composite) States discarded by the flattener */
+ Collection<State> discardedStates
+ /** The class/capsule that owns the state machine */
+ Entity modelClass
+ /** The source state machine to transform */
+ StateMachine machine
+
+ /** Elements that go into the generated model. */
+ CppEnum statesDeclaration
+ MemberField currentStateField
+ Map<State, Enumerator> stateEnumerators
+ MemberField historyTableDeclaration
+ MemberFunction saveHistoryFunction
+ MemberFunction checkHistoryFunction
+ Map<ActionCode, MemberFunction> userActionFunctions
+ Map<Guard, MemberFunction> userGuardFunctions
+ Map<ActionChain, MemberFunction> actionChainFunctions
+ Map<ChoicePoint, MemberFunction> choicePointFunctions
+ Map<JunctionPoint, MemberFunction> junctionPointFunctions
+ Map<State, MemberFunction> stateFunctions
+ MemberFunction injectFunc
+ Parameter injectFuncParam
+ MemberFunction initializeFunc
+ Parameter initializeFuncParam
+ CppClass cppCapsuleClass
+
+ /** Objects used for the generation */
+ val actionDeclarationGenerator = new ActionDeclarationGenerator
+ val actionInvocationGenerator = new ActionInvocationGenerator
+ val guardDeclarationGenerator = new GuardDeclarationGenerator
+ val guardInvocationGenerator = new GuardInvocationGenerator
+
+
+ new ()
+ {
+ stateEnumerators = newHashMap
+ userActionFunctions = newHashMap
+ userGuardFunctions = newHashMap
+ actionChainFunctions = newHashMap
+ choicePointFunctions = newHashMap
+ junctionPointFunctions = newHashMap
+ stateFunctions = newHashMap
+ }
+
+ /**
+ * This is the main method of the transformation. It performs the
+ * transformation by invoking methods that generate each part of the
+ * target language model.
+ */
+ override boolean transformInPlace
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+ {
+ if (stateMachine === null
+ || context === null
+ || !(context instanceof CppGenerationTansformationContext))
+ return false
+ this.discardedStates = (context as CppGenerationTansformationContext).discardedStates
+ this.cpp = (context as CppGenerationTansformationContext).cpp
+ this.modelClass = (context as CppGenerationTansformationContext).modelClass
+ machine = stateMachine
+ try
+ {
+ cppCapsuleClass =
+ cpp.getCppClass( CppCodePattern.Output.CapsuleClass, modelClass )
+ generateStatesDeclaration
+ generateCurrentStateField
+ generateHistoryTableDeclaration
+ saveHistoryFunction = getSaveHistoryFunction
+ checkHistoryFunction = getCheckHistoryFunction
+ generateAllUserActionFunctions
+ generateAllUserGuardFunctions
+ generateAllActionChainFunctions
+ generateAllChoicePointFunctions
+ generateAllJunctionFunctions
+ generateAllStateFunctions
+ generateInjectFunc
+ generateInitializeFunc
+ generateCompilationUnit
+ return true
+ }
+ catch (Exception e)
+ {
+ CodeGenPlugin.error("[FlatModel2Cpp] error generating C++ code from flat state machine", e)
+ return false
+ }
+ }
+
+
+ /**
+ * Builds an enum type for the states of the state machine.
+ *
+ * The generated code would be something like:
+ *
+ * <p><pre>
+ * <code>enum State { s0, s1, s1_s0, s1_s1, s2, ..., UNVISITED };</code>
+ * </pre>
+ *
+ * The enumerators for former composite states go first so that they can be used as indices
+ * to the history table.
+ */
+ protected def generateStatesDeclaration()
+ {
+ statesDeclaration = new CppEnum( GlobalConstants.STATE_TYPE_NAME )
+ val comparator = new VertexNameComparator
+ // Add enumerators for each of the former composite states
+ var State[] formerCompositeStates = newArrayOfSize( discardedStates.size )
+ discardedStates.toArray( formerCompositeStates )
+ Arrays.sort( formerCompositeStates, comparator )
+ for (s : formerCompositeStates)
+ {
+ val stateEnum =
+ new Enumerator( s.cachedFullSMName.makeValidCName )
+ statesDeclaration.add( stateEnum )
+ stateEnumerators.put( s, stateEnum )
+ }
+ // Add enumerators for the remaining states
+ var State[] otherStates = newArrayOfSize( machine.allSubstates.size )
+ machine.allSubstates.toList.toArray( otherStates )
+ Arrays.sort( otherStates, comparator )
+ for (s : otherStates)
+ {
+ val stateEnum =
+ new Enumerator( s.cachedFullSMName.makeValidCName )
+ statesDeclaration.add( stateEnum )
+ stateEnumerators.put( s, stateEnum )
+ }
+ // Add an enumerator for the dummy UNVISITED state last
+ val unvisitedStateEnum = new Enumerator( GlobalConstants.UNVISITED )
+ statesDeclaration.add( unvisitedStateEnum )
+ stateEnumerators.put( StateNestingFlattener.UNVISITED, unvisitedStateEnum )
+ }
+
+ /**
+ * Generates a field to hold the current state.
+ *
+ * The generated code would be something like:
+ *
+ * <p><pre>
+ * <code>
+ * State currentState;
+ * </code>
+ * </pre>
+ */
+ protected def generateCurrentStateField()
+ {
+ currentStateField =
+ new MemberField
+ (
+ statesDeclaration.getType(),
+ GlobalConstants.CURRENT_STATE_FIELD_NAME
+ )
+ }
+
+ /**
+ * Generates a declaration for the history table for the state machine.
+ *
+ * The generated code would be something like:
+ *
+ * <p>
+ * <code>State[] history = { UNDEFINED, ..., UNDEFINED };
+ */
+ protected def generateHistoryTableDeclaration()
+ {
+ val numStates = discardedStates.size
+ if (numStates > 0)
+ {
+ val historyTableType =
+ statesDeclaration.getType().arrayOf( new IntegralLiteral(numStates) )
+ val tableDecl =
+ new MemberField
+ (
+ historyTableType,
+ GlobalConstants.HISTORY_TABLE_NAME// , initializer
+ )
+ val counter =
+ new Variable
+ (
+ LinkageSpec.UNSPECIFIED,
+ PrimitiveType.INT,
+ "i",
+ new IntegralLiteral(0)
+ )
+ val counterDecl = new VariableDeclarationStatement( counter )
+ val historyInitLoopStmt =
+ new WhileStatement
+ (
+ new LogicalComparison(
+ new ElementAccess( counter ),
+ LogicalComparison.Operator.LESS_THAN,
+ new IntegralLiteral( numStates )
+ )
+ )
+ val historyEntryInitStmt =
+ new ExpressionStatement
+ (
+ new BinaryOperation
+ (
+ new IndexExpr
+ (
+ new ElementAccess( tableDecl ),
+ new UnaryOperation
+ (
+ UnaryOperation.Operator.POST_INCREMENT,
+ new ElementAccess( counter )
+ )
+ ),
+ BinaryOperation.Operator.ASSIGN,
+ new ElementAccess
+ (
+ stateEnumerators.get( StateNestingFlattener.UNVISITED )
+ )
+ )
+ )
+ historyInitLoopStmt.add( historyEntryInitStmt )
+ val ctor =
+ cpp.getConstructor
+ (
+ CppCodePattern.Output.CapsuleClass,
+ modelClass
+ )
+ ctor.add( counterDecl )
+ ctor.add( historyInitLoopStmt )
+ historyTableDeclaration = tableDecl
+ }
+ }
+
+ /**
+ * Generates a function that saves history.
+ *
+ * The code generated is as follows:
+ *
+ * <p><pre>
+ * <code>
+ * void saveHistory(State compositeState, State subState) {
+ * history[compositeState] = subState;
+ * }
+ * <code>
+ * </pre>
+ *
+ * where <code>State</code> is the capsule's state type (an enum) and
+ * <code>history</code> is the capsule's history table.
+ *
+ * <p><b>Note:</b> The current implementation generates this as a normal
+ * function but it should be either a macro or an inline function.
+ * However the C/C++ language model does not currently support these.
+ *
+ * @see
+ * #generateStatesDeclaration
+ * #generateHistoryTableDeclaration
+ */
+ protected def create
+ if (historyTableDeclaration !== null)
+ new MemberFunction
+ (
+ PrimitiveType.VOID,
+ GlobalConstants.SAVE_HISTORY_FUNC_NAME
+ )
+ getSaveHistoryFunction()
+ {
+ if (it == null) return
+ val param1 = new Parameter( stateType , "compositeState" )
+ val param2 = new Parameter( stateType , "subState" )
+ // Body is "history[compositeState] = subState;"
+ val body =
+ new ExpressionStatement
+ (
+ new BinaryOperation
+ (
+ new IndexExpr
+ (
+ new ElementAccess( historyTableDeclaration ),
+ new ElementAccess( param1 )
+ ),
+ BinaryOperation.Operator.ASSIGN,
+ new ElementAccess( param2 )
+ )
+ )
+ add( param1 )
+ add( param2 )
+ add( body )
+ }
+
+ /**
+ * Generates a function that checks history.
+ *
+ * The code generated is as follows:
+ *
+ * <p><pre>
+ * <code>
+ * void checkHistory(State compositeState, State subState) {
+ * return history[compositeState] == subState;
+ * }
+ * <code>
+ * </pre>
+ *
+ * where <code>State</code> is the capsule's state type (an enum) and
+ * <code>history</code> is the capsule's history table.
+ *
+ * <p><b>Note:</b> The current implementation generates this as a normal
+ * function but it should be either a macro or an inline function.
+ * However the C/C++ language model does not currently support these.
+ *
+ * @see
+ * #generateStatesDeclaration
+ * #generateHistoryTableDeclaration
+ */
+ protected def create
+ if (historyTableDeclaration !== null)
+ new MemberFunction
+ (
+ PrimitiveType.BOOL,
+ GlobalConstants.CHECK_HISTORY_FUNC_NAME
+ )
+ getCheckHistoryFunction()
+ {
+ if (it == null) return
+ val param1 = new Parameter( stateType, "compositeState" )
+ val param2 = new Parameter( stateType, "subState" )
+ // Body is "history[compositeState] = subState;"
+ val body =
+ new ReturnStatement
+ (
+ new LogicalComparison
+ (
+ new IndexExpr
+ (
+ new ElementAccess( historyTableDeclaration ),
+ new ElementAccess( param1 )
+ ),
+ LogicalComparison.Operator.EQUIVALENT,
+ new ElementAccess( param2 )
+ )
+ )
+ add( param1 )
+ add( param2 )
+ add( body )
+ }
+
+ /**
+ * Generates declarations for action functions for actions occurring in
+ * a transition's chain.
+ *
+ * <p>This generation includes not only transition actions from the original
+ * model, but also state entry and exit actions, since the flattening
+ * transformation moves entry and exit actions to transition's action chains.
+ *
+ * <p><b>Notes:</b>
+ * <p>The "save history" action is not generated by this function, as
+ * there is only one declaration for the save history.
+ */
+ protected def generateAllUserActionFunctions()
+ {
+ for (t : machine.allTransitions)
+ {
+ if (t.actionChain !== null && t.actionChain.actions !== null)
+ {
+ for (a : t.actionChain.actions)
+ {
+ // The same action may occur in several transition chains but
+ // the function declaration is generated only once, as the
+ // visitor that performs the generation memoizes its results,
+ // so that subsequent invocations of the following method will
+ // yield the same function declaration object.
+ generateActionFunc( a, t )
+ }
+ }
+ }
+ }
+
+ /**
+ * Generates the function declaration for an action occurring in
+ * a transition's chain.
+ */
+ protected def dispatch generateActionFunc( SaveHistory a, Transition t )
+ {
+ // This is superfluous since this function is generated by
+ // {@link generateSaveHistoryFunction}, but we need to have a function
+ // that accepts {@link SaveHistory} actions when processing chains.
+ actionDeclarationGenerator.visit( a, null )
+ }
+
+ protected def dispatch generateActionFunc(ActionCode a, Transition t) {
+ val ctx =
+ new ActionDeclarationGenerator.UserActionContext
+ (
+ RTMessageType,
+ getRTDataType( t )
+ )
+ as ActionDeclarationGenerator.Context
+ val f = actionDeclarationGenerator.visit( a, ctx )
+ userActionFunctions.put( a, f )
+ }
+
+ /**
+ * Generates declarations for guard functions for guards occurring in
+ * a transition's chain.
+ *
+ * <p><b>Notes:</b>
+ * <p>The "check history" action is not generated by this function, as
+ * there is only one declaration for the check history guard.
+ */
+ protected def generateAllUserGuardFunctions()
+ {
+ for (t : machine.allTransitions)
+ {
+ if (t.guard !== null)
+ {
+ generateGuardFunc( t.guard, t )
+ }
+ }
+ }
+
+ /**
+ * Generates the function declaration for an action occurring in
+ * a transition's chain.
+ */
+ protected def dispatch generateGuardFunc( CheckHistory g, Transition t )
+ {
+ // This is superfluous since this function is generated by
+ // {@link generateSaveHistoryFunction}, but we need to have a function
+ // that accepts {@link CheckHistory} actions when processing chains.
+ // guardDeclarationGenerator.visit( g, null )
+ }
+
+ protected def dispatch generateGuardFunc( Guard g, Transition t )
+ {
+ if (g.body !== null && !(g.body instanceof CheckHistory))
+ {
+ var sourceTransition = getTransitionChainUniqueSource( t )
+ sourceTransition = if (sourceTransition === null) t else sourceTransition
+ val ctxt =
+ new GuardDeclarationGenerator.UserGuardContext
+ (
+ RTMessageType,
+ getRTDataType( sourceTransition )
+ )
+ as GuardDeclarationGenerator.Context
+ val f = guardDeclarationGenerator.visit( g, ctxt )
+ userGuardFunctions.put( g, f )
+ }
+ }
+
+
+ /**
+ * Generate function declarations for transition action chains.
+ *
+ * <p>Each function generated will have a sequence of calls, invoking either
+ * the action functions generated by {@link generateActionFunc} for
+ * transition, state entry and state exit actions, as well as invoking
+ * "save history" actions produced by the flattening transformation.
+ */
+ protected def generateAllActionChainFunctions()
+ {
+ for (t : machine.allTransitions)
+ {
+ if (t.actionChain !== null && !t.actionChain.actions.empty)
+ {
+ val f = generateActionChainFunc( t )
+ actionChainFunctions.put( t.actionChain, f )
+ }
+ }
+ }
+
+ /**
+ * Generates the function declaration for a single action chain.
+ */
+ protected def
+ create
+ new MemberFunction( PrimitiveType.VOID, t.actionChain.funcName.toString )
+ generateActionChainFunc( Transition t )
+ {
+ val param = new Parameter( RTMessageType, GlobalConstants.CHAIN_FUNC_PARAM )
+ add( param )
+ if (t.actionChain !== null)
+ {
+ for (ActionCode a : t.actionChain.actions)
+ {
+ val call = getActionInvocation( a, param )
+ if (call !== null) add( call as ExpressionStatement )
+ }
+ }
+ }
+
+ /**
+ * Generates a call to an action, either user action or action generated by
+ * the transformation.
+ */
+ protected def dispatch getActionInvocation( SaveHistory action, Parameter param )
+ {
+ val ctx =
+ new ActionInvocationGenerator.SaveHistoryActionContext
+ (
+ saveHistoryFunction,
+ stateEnumerators
+ )
+ as ActionInvocationGenerator.Context
+ actionInvocationGenerator.visit( action, ctx )
+ }
+
+ protected def dispatch getActionInvocation( ActionCode action, Parameter param )
+ {
+ val funcDecl = userActionFunctions.get( action )
+ val ctx =
+ new ActionInvocationGenerator.UserActionContext
+ (
+ funcDecl,
+ new ElementAccess( param )
+ )
+ as ActionInvocationGenerator.Context
+ actionInvocationGenerator.visit( action, ctx )
+ }
+
+ /**
+ * Generates all functions corresponding to choice points.
+ */
+ protected def generateAllChoicePointFunctions()
+ {
+ for (c : machine.allChoicePoints)
+ {
+ val f = getChoicePointFunction( c )
+ choicePointFunctions.put( c, f )
+ }
+ }
+
+ /**
+ * Generates the function corresponding to a given choice point.
+ */
+ protected def
+ create
+ new MemberFunction( statesDeclaration.type, p.funcName.toString )
+ getChoicePointFunction( ChoicePoint p )
+ {
+ val param = new Parameter( RTMessageType, GlobalConstants.CHAIN_FUNC_PARAM )
+ val cond = new ConditionalStatement()
+ for (t : p.directOutgoingTransitions) // TODO: else branch
+ {
+ var guard = getGuardInvocation( t.guard, param )
+ val newBranch = cond.add(guard)
+ if (t.actionChain !== null && !t.actionChain.actions.empty)
+ {
+ val actFunc = actionChainFunctions.get( t.actionChain )
+ val arg = new ElementAccess( param )
+ val call = new FunctionCall( actFunc, arg )
+ newBranch.add( new ExpressionStatement( call ) )
+ }
+ var destStmt = getDestination( t, false, new ElementAccess(param) )
+ newBranch.add(destStmt)
+ }
+ add( param )
+ add( cond )
+ }
+
+ protected def getGuardInvocation( Guard guard, Parameter param )
+ {
+ if (guard.body !== null && guard.body instanceof CheckHistory)
+ getCheckHistoryGuardInvocation( guard.body as CheckHistory, param )
+ else
+ getOtherGuardInvocation( guard, param )
+ }
+
+ protected def getCheckHistoryGuardInvocation( CheckHistory guard, Parameter param )
+ {
+ val ctx =
+ new GuardInvocationGenerator.CheckHistoryGuardContext
+ (
+ checkHistoryFunction,
+ stateEnumerators
+ )
+ as GuardInvocationGenerator.Context
+ guardInvocationGenerator.visit( guard, ctx )
+ }
+
+ protected def getOtherGuardInvocation( Guard guard, Parameter param )
+ {
+ val funcDecl = userGuardFunctions.get( guard )
+ val ctx =
+ new GuardInvocationGenerator.UserGuardContext
+ (
+ funcDecl,
+ new ElementAccess(param)
+ )
+ as GuardInvocationGenerator.Context
+ guardInvocationGenerator.visit( guard, ctx )
+ }
+
+ /**
+ * Generates all functions corresponding to junction points.
+ */
+ protected def generateAllJunctionFunctions()
+ {
+ for (j : machine.allJunctionPoints)
+ {
+ val f = getJunctionPointFunction( j )
+ junctionPointFunctions.put( j, f )
+ }
+ }
+
+ /**
+ * Generates the function corresponding to a specific junction point.
+ */
+ protected def
+ create
+ new MemberFunction( statesDeclaration.type, p.funcName.toString )
+ getJunctionPointFunction( JunctionPoint p )
+ {
+ val param = new Parameter( RTMessageType, GlobalConstants.JUNC_FUNC_PARAM )
+ val t = p.directOutgoingTransitions.get(0) // There should be only one. // TODO: add warning if not
+ val block = new ArrayList<Statement>
+ if (t.actionChain !== null && !t.actionChain.actions.empty)
+ {
+ val actFunc = actionChainFunctions.get( t.actionChain )
+ val arg = new ElementAccess( param )
+ val call = new FunctionCall( actFunc, arg )
+ block.add( new ExpressionStatement(call) )
+ }
+ val d = getDestination( t, false, new ElementAccess(param) )
+ block.add( d )
+ add( param )
+ add( block )
+ }
+
+ /**
+ * Generates all functions corresponding to states.
+ */
+ protected def generateAllStateFunctions()
+ {
+ for (s : machine.allSubstates)
+ {
+ val f = generateStateFunc( s )
+ stateFunctions.put( s, f )
+ }
+ }
+
+ /**
+ * Generates the function corresponding to a given state.
+ */
+ protected def
+ create
+ new MemberFunction( statesDeclaration.type, state.funcName.toString )
+ generateStateFunc( State state )
+ {
+ val param = new Parameter( RTMessageType, GlobalConstants.STATE_FUNC_PARAM )
+ val table = getPortSignalTransitionsTable( state )
+ val defRet = new ReturnStatement( new ElementAccess(currentStateField) )
+ val portSwitch = new SwitchStatement( getPortCond(param) )
+ for (port : table.keySet)
+ {
+ val sigSwitch = new SwitchStatement( getSigCond( param ) )
+ val portSignals = table.get( port )
+ for (signal : portSignals.keySet)
+ {
+ val transitions = portSignals.get( signal )
+ val sigCase = generatePortSignalCase( transitions, signal, param, defRet )
+ sigSwitch.add( sigCase )
+ }
+ val portCase = new SwitchClause( enumeratorFor( port ) )
+ portCase.add( sigSwitch )
+ portCase.add( defRet )
+ portSwitch.add( portCase )
+ }
+ val body = portSwitch
+ add( param )
+ add( body )
+ add( defRet )
+ }
+
+ /**
+ * Builds a table that contains for each port and signal, all the outgoing
+ * transitions of a given state whose trigger has that port and signal.
+ *
+ * @param s a {@link State}
+ * @return a table T indexed by {@link Port}s such that for each port p,
+ * the entry T[p] is a table T' indexed by {@link Signal}s such that
+ * for each signal e, T'[e] contains all outgoing {@link Transition}s
+ * from s whose trigger has port p and signal e. In other words,
+ * T[p][e] contains all transitions from s whose trigger has port p
+ * and signal e.
+ */
+ protected def getPortSignalTransitionsTable( State s )
+ {
+ val table = newHashMap
+ for (transition : s.allOutgoingTransitions)
+ {
+ for (trigger : transition.triggers)
+ {
+ if (trigger instanceof RTTrigger)
+ {
+ val signal = trigger.signal
+ for (port : trigger.ports)
+ {
+ if (!table.containsKey(port))
+ {
+ table.put( port, new HashMap<Signal, LinkedHashSet<Transition>> )
+ }
+ val portSignals = table.get( port )
+ if (!portSignals.containsKey( signal ))
+ {
+ portSignals.put( signal, newLinkedHashSet )
+ }
+ portSignals.get( signal ).add( transition )
+ }
+ }
+ }
+ }
+ return table
+ }
+
+ /**
+ * Generates the body of the case block for a particular port/signal pair.
+ *
+ * <p>It sorts the transitions by nesting depth, and filters out those
+ * which have no guard except for the first one.
+ *
+ * <p>If only one transition is left, the generated case contains the code
+ * for it, possibly with a conditional if it had a guard.
+ *
+ * <p>If there is more than one transition left, then they must have guards
+ * except possibly for the last one. In this case we generate a conditional.
+ */
+ protected def generatePortSignalCase
+ (
+ LinkedHashSet<Transition> transitions,
+ Signal signal,
+ Parameter param,
+ ReturnStatement defRet
+ )
+ {
+ val sigCase = new SwitchClause( enumeratorFor(signal) )
+ val sortedTransitions = sortTransitions( transitions )
+ if (sortedTransitions.length == 1)
+ {
+ val t = sortedTransitions.get(0)
+ val branch = new ArrayList<Statement>
+ if (t.actionChain !== null && !t.actionChain.actions.empty)
+ {
+ val actFunc = actionChainFunctions.get( t.actionChain )
+ val arg = new ElementAccess( param )
+ val call = new FunctionCall( actFunc, arg )
+ val callStmt = new ExpressionStatement( call )
+ branch.add( callStmt )
+ }
+ val d = getDestination( t, false, new ElementAccess(param) )
+ branch.add( d )
+ if (t.guard === null)
+ {
+ for (stmt : branch) sigCase.add( stmt )
+ }
+ else
+ {
+ // TODO: add a warning if there is a condition and only one transition
+ val cond = new ConditionalStatement()
+ val guard = getGuardInvocation( t.guard, param )
+ cond.add( guard ).add( branch )
+ sigCase.add( cond )
+ sigCase.add( defRet )
+ }
+ }
+ else
+ {
+ val cond = new ConditionalStatement()
+ for (t : sortedTransitions)
+ {
+ val branch = new ArrayList<Statement>
+ if (t.actionChain !== null && !t.actionChain.actions.empty)
+ {
+ val actFunc = actionChainFunctions.get( t.actionChain )
+ val arg = new ElementAccess( param )
+ val call = new FunctionCall( actFunc, arg )
+ val callStmt = new ExpressionStatement( call )
+ branch.add( callStmt )
+ }
+ val d = getDestination( t, false, new ElementAccess(param) )
+ branch.add( d )
+ if (t.guard === null)
+ { // Only the last one should have no guard
+ for (stmt : branch) cond.defaultBlock.add( stmt )
+ }
+ else
+ {
+ val guard = getGuardInvocation( t.guard, param )
+ cond.add( guard ).add( branch )
+ sigCase.add( cond )
+ sigCase.add( defRet )
+ }
+ }
+ }
+ return sigCase
+ }
+
+ /**
+ * Sorts transitions for the same port/signal pair by order of nesting
+ * depth, marking the first non-guarded transition as the default transition
+ * and filters-out all other non-guarded transitions.
+ */
+ protected def sortTransitions( LinkedHashSet<Transition> transitions )
+ {
+ var Transition[] transitionsArray = newArrayOfSize( transitions.size )
+ transitions.toArray( transitionsArray )
+ transitionsArray = transitionsArray.sortWith( new TransitionDepthComparator )
+ val sortedList = newArrayList
+ var Transition defaultTransition = null
+ var i = 0
+ while (defaultTransition === null && i < transitionsArray.length)
+ {
+ val t = transitionsArray.get( i )
+ val hasNonEmptyGuard = t.hasNonEmptyGuard
+ if (hasNonEmptyGuard)
+ {
+ sortedList.add( t )
+ }
+ else
+ {
+ defaultTransition = t
+ }
+ i++
+ }
+ sortedList.add( defaultTransition )
+ return sortedList
+ }
+
+ private static def boolean hasNonEmptyGuard( Transition t )
+ {
+ t.guard !== null
+ && t.guard instanceof Guard
+ && (t.guard as Guard).body.source != ""
+ }
+
+ /**
+ * Obtains the function call corresponding to a transition's destination.
+ *
+ * @param t - The {@link Transition}
+ * @param init - Whether we are looking for the destination to be obtained
+ * in the initialized method or in the inject method.
+ * @param destArg - The argument to pass to the destination if it is a
+ * function.
+ */
+ protected def getDestination( Transition t, boolean init, Expression destArg )
+ {
+ var Expression retVal
+ if (t.targetVertex instanceof ChoicePoint)
+ {
+ val c = t.targetVertex as ChoicePoint
+ val func = getChoicePointFunction( c )
+ retVal = new FunctionCall( func, destArg )
+ }
+ else if (t.targetVertex instanceof JunctionPoint)
+ {
+ val j = t.targetVertex as JunctionPoint
+ val func = getJunctionPointFunction( j )
+ retVal = new FunctionCall(func, destArg)
+ }
+ else
+ {
+ val s = t.targetVertex as State
+ retVal = enumeratorFor(s)
+ }
+ if (init)
+ {
+ new ExpressionStatement
+ (
+ new BinaryOperation
+ (
+ new ElementAccess( currentStateField ),
+ BinaryOperation.Operator.ASSIGN,
+ retVal
+ )
+ )
+ }
+ else
+ {
+ new ReturnStatement( retVal )
+ }
+ }
+
+ /**
+ * Generates the parameter for the main 'inject' function
+ */
+ protected def getInjectFuncParam()
+ {
+ if (injectFuncParam === null)
+ injectFuncParam =
+ new Parameter
+ (
+ RTMessageType,
+ GlobalConstants.INJECT_FUNC_PARAM
+ )
+ return injectFuncParam
+ }
+
+ /**
+ * Generates the main 'inject' function that receives and handles events.
+ */
+ protected def generateInjectFunc()
+ {
+ injectFunc =
+ new MemberFunction
+ (
+ PrimitiveType.VOID,
+ GlobalConstants.INJECT_FUNC_NAME
+ )
+ injectFunc.setVirtual()
+ injectFunc.add( getInjectFuncParam )
+ val stateSwitch = new SwitchStatement( stateCond )
+ for (s : machine.allSubstates)
+ {
+ val stateCase = new SwitchClause( enumeratorFor( s ) )
+ val func = stateFunctions.get( s )
+ val arg = new ElementAccess( getInjectFuncParam() )
+ val call = new FunctionCall( func, arg )
+ val update =
+ new BinaryOperation
+ (
+ new ElementAccess( currentStateField ),
+ BinaryOperation.Operator.ASSIGN,
+ call
+ )
+ stateCase.add( new ExpressionStatement(update) )
+ stateCase.add( new BreakStatement )
+ stateSwitch.add( stateCase )
+ }
+ injectFunc.add( stateSwitch )
+ }
+
+ protected def getInitializeFuncParam()
+ {
+ if (initializeFuncParam === null)
+ initializeFuncParam =
+ new Parameter
+ (
+ RTMessageType,
+ GlobalConstants.INITIALIZE_FUNC_PARAM
+ )
+ return initializeFuncParam
+ }
+
+ /**
+ * Build the initialize function which performs the initial transition.
+ *
+ * <p>This assumes that the top level of the state machine must have an
+ * initial pseudo-state, and that there is exactly one outgoing transition
+ * from such initial point.
+ *
+ * <p> If there is no initial point, the body of the initialize method is
+ * empty.
+ */
+ protected def generateInitializeFunc()
+ {
+ initializeFunc =
+ new MemberFunction
+ (
+ PrimitiveType.VOID,
+ GlobalConstants.INITIALIZE_FUNC_NAME
+ )
+ initializeFunc.setVirtual()
+ val param = getInitializeFuncParam
+ initializeFunc.add( param )
+ if (machine.top.initial !== null
+ && !machine.top.initial.allDirectOutgoingTransitions.empty)
+ {
+ val initialTransition = machine.top.initial.directOutgoingTransitions.get(0)
+ if (initialTransition.actionChain !== null
+ && !initialTransition.actionChain.actions.empty)
+ {
+ val actFunc = actionChainFunctions.get( initialTransition.actionChain )
+ val arg = new ElementAccess( getInitializeFuncParam )
+ val call = new FunctionCall( actFunc, arg )
+ initializeFunc.add( call )
+ }
+ val d = getDestination( initialTransition, true, new ElementAccess(param) )
+ initializeFunc.add( d )
+ }
+ }
+
+ /**
+ * Generates the compilation unit for the state machine (*)
+ *
+ * <p><b>Notes:</b> This implementation generates only a list of elements
+ * to be consumed by the capsule generator which is assumed to be
+ * responsible for putting together the full compilation unit.
+ */
+ protected def generateCompilationUnit()
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PUBLIC, injectFunc )
+ cppCapsuleClass.addMember( CppClass.Visibility.PUBLIC, initializeFunc )
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, statesDeclaration )
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, currentStateField )
+ if (historyTableDeclaration !== null)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, historyTableDeclaration )
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, saveHistoryFunction )
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, checkHistoryFunction )
+ }
+ var ActionCode[] userActionFunctionArray = newArrayOfSize( userActionFunctions.size )
+ userActionFunctions.keySet.toArray( userActionFunctionArray )
+ userActionFunctionArray = userActionFunctionArray.sortWith( new ActionNameComparator )
+ for (action : userActionFunctionArray)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, userActionFunctions.get( action ) )
+ }
+ var Guard[] userGuardFunctionArray = newArrayOfSize( userGuardFunctions.size )
+ userGuardFunctions.keySet.toArray( userGuardFunctionArray )
+ userGuardFunctionArray = userGuardFunctionArray.sortWith( new GuardNameComparator )
+ for (guard : userGuardFunctionArray)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, userGuardFunctions.get( guard ) )
+ }
+ var ActionChain[] actionChainFunctionArray = newArrayOfSize( actionChainFunctions.size )
+ actionChainFunctions.keySet.toArray( actionChainFunctionArray )
+ actionChainFunctionArray = actionChainFunctionArray.sortWith( new ChainNameComparator )
+ for (chain : actionChainFunctionArray)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, actionChainFunctions.get( chain ) )
+ }
+ var JunctionPoint[] junctionPointFunctionArray = newArrayOfSize( junctionPointFunctions.size )
+ junctionPointFunctions.keySet.toArray( junctionPointFunctionArray )
+ junctionPointFunctionArray = junctionPointFunctionArray.sortWith( new VertexNameComparator )
+ for (junction : junctionPointFunctionArray)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, junctionPointFunctions.get( junction ) )
+ }
+ var ChoicePoint[] choicePointFunctionArray = newArrayOfSize( choicePointFunctions.size )
+ choicePointFunctions.keySet.toArray( choicePointFunctionArray )
+ choicePointFunctionArray = choicePointFunctionArray.sortWith( new VertexNameComparator )
+ for (choice : choicePointFunctionArray)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, choicePointFunctions.get( choice ) )
+ }
+ var State[] stateFunctionArray = newArrayOfSize( stateFunctions.size )
+ stateFunctions.keySet.toArray( stateFunctionArray )
+ stateFunctionArray = stateFunctionArray.sortWith( new VertexNameComparator )
+ for (state : stateFunctionArray)
+ {
+ cppCapsuleClass.addMember( CppClass.Visibility.PRIVATE, stateFunctions.get( state ) )
+ }
+ }
+
+ /**
+ * Auxiliary methods
+ */
+
+ private dispatch def enumeratorFor( State s )
+ {
+ new ElementAccess( stateEnumerators.get(s) )
+ }
+
+ private dispatch def enumeratorFor( Port p )
+ {
+ val enumerator =
+ cpp.getEnumerator( CppCodePattern.Output.PortId, p, modelClass )
+ new ElementAccess( enumerator )
+ }
+
+ private dispatch def enumeratorFor( Signal s )
+ {
+ cpp.getEnumeratorAccess( CppCodePattern.Output.SignalId, s, null )
+ }
+
+ private def getStateType()
+ {
+ statesDeclaration.getType()
+ }
+
+ private def getRTMessageType()
+ {
+ UMLRTRuntime.UMLRTMessage.Element.getType().ref().const_()
+ }
+
+ private def getRTDataType( Transition t )
+ {
+ var org.eclipse.papyrusrt.codegen.lang.cpp.Type rtdataType = null
+ var NamedElement typeOwner = null
+ val Collection<Type> types = newLinkedHashSet
+ for (trigger : t.triggers)
+ {
+ if (trigger instanceof RTTrigger)
+ {
+ val params = trigger.signal.parameters
+ if (!params.empty)
+ {
+ val first = params.get(0)
+ types.add( first.type )
+ typeOwner = first
+ }
+ }
+ }
+ if (types.size == 1)
+ {
+ val type = types.get(0)
+ rtdataType = TypesUtil.createCppType( cpp, typeOwner, type )
+ }
+ rtdataType
+ }
+
+ /**
+ * Builds an expression to obtain the port enum id for the switch.
+ *
+ * <p>It assumes that the message parameter to the inject function is a
+ * pointer to the RTMessage type, as returned by {@link #getRTMessageType},
+ * this is, the signature of the inject function must be:
+ *
+ * <p><pre>
+ * <code>void inject(UMLRTMessage * msg)</code>
+ * </pre>
+ *
+ * <p>It also assumes that the port id and signal id are accessible from
+ * this type. Basically the assumption is that the relevant definitions are
+ * as follows:
+ *
+ * <p>
+ * <pre>
+ * <code>
+ * class UMLRTMessage : ... {
+ * public:
+ * UMLRTPort * destPort;
+ * UMLRTSignal * signal;
+ * }
+ *
+ * struct UMLRTPort {
+ * int id;
+ * // ...
+ * }
+ *
+ * class UMLRTSignal {
+ * public:
+ * int id;
+ * // ...
+ * }
+ * </code>
+ * </pre>
+ *
+ * <p>... where the typed <code>UMLRTPortId</code> and
+ * <code>UMLRTSignalId</code> can be cast to the <code>Port</code> and
+ * <code>Signal</code> enum types generated in the state machine's class.
+ *
+ * <p>Given this assumptions, the port condition generated has the form:
+ *
+ * <p><pre><code>(Port)(msg->destPort)->id</code></pre>
+ *
+ * <p>and the signal condition is:
+ *
+ * <p><pre><code>(ProtocolX::Signal)(msg->signal)->getId()</code></pre>
+ *
+ * <p>where <code>ProtocolX</code> is the name of the port's protocol
+ */
+ private def getPortCond( Parameter param )
+ {
+ val messagePortField = UMLRTMessage.destPort
+ val roleIdField = UMLRTCommsPortRole.id
+ new MemberAccess
+ (
+ UMLRTCommsPort.role
+ (
+ new MemberAccess
+ (
+ new ElementAccess( param ),
+ messagePortField
+ )
+ ),
+ roleIdField
+ )
+ }
+
+ private def getSigCond( Parameter param )
+ {
+ val messageSignalField = UMLRTMessage.signal
+ val signalIdAccessor = UMLRTSignal.getId
+ new MemberFunctionCall
+ (
+ new MemberAccess
+ (
+ new ElementAccess( param ),
+ messageSignalField
+ ),
+ signalIdAccessor
+ )
+ }
+
+ private def getStateCond()
+ {
+ new ElementAccess( currentStateField )
+ }
+
+ /**
+ * Looks for the source stable state which of the transition chain that contains the given
+ * transition t, if it is unique, this is, if there is a path
+ *
+ * <p>s --t1--> p_1 --t2--> p_2 --t3--> ... --t--> v
+ *
+ * <p>where t is the given transition, s is a state, each p_i is a pseudo-state with exactly
+ * one incoming transition. If any p_i has more than one incoming transition, then this
+ * method returns null, otherwise it returns t1.
+ */
+ private def getTransitionChainUniqueSource( Transition t )
+ {
+ val visited = new HashSet<Vertex>
+ var vertex = t.sourceVertex
+ var sourceTransition = t
+ while (vertex instanceof Pseudostate
+ && !(vertex as Pseudostate).directIncomingTransitions.isEmpty
+ && !visited.contains( vertex ))
+ {
+ visited.add( vertex )
+ sourceTransition = vertex.directIncomingTransitions.get(0)
+ vertex = sourceTransition.sourceVertex
+ }
+ if (vertex instanceof State)
+ return sourceTransition
+ return null
+ }
+
+}
+
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/FlatteningCppTransformer.xtend b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/FlatteningCppTransformer.xtend
new file mode 100644
index 0000000..430c3e6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/FlatteningCppTransformer.xtend
@@ -0,0 +1,47 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.cpp.statemachines.flat
+
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.FlatteningTransformer
+import org.eclipse.papyrusrt.xtumlrt.common.Entity
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.getOwner
+
+class FlatteningCppTransformer
+{
+ var CppCodePattern cpp
+ val FlatModel2Cpp flat2cpp = new FlatModel2Cpp
+
+ new ( CppCodePattern cpp )
+ {
+ this.cpp = cpp
+ }
+
+ def boolean transform( StateMachine stateMachine )
+ {
+ val flattener = new FlatteningTransformer
+
+ // First we flatten the state machine (inheritance and nesting)
+ val flatteningResult = flattener.transform( stateMachine )
+ if (flatteningResult === null || flatteningResult.success == false)
+ return false
+ // Then we transform to C++
+ // FlatModel2Cpp uses the discarded state list to construct the state enum
+ val ctx =
+ new FlatModel2Cpp.CppGenerationTansformationContext
+ (
+ this.cpp,
+ flatteningResult.discardedStates,
+ stateMachine.owner as Entity
+ )
+ return flat2cpp.transformInPlace( flatteningResult.stateMachine, ctx )
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/generator/StateMachineGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/generator/StateMachineGenerator.java
new file mode 100644
index 0000000..a018d46
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.statemachines.flat/src/org/eclipse/papyrusrt/codegen/cpp/statemachines/flat/generator/StateMachineGenerator.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.statemachines.flat.generator;
+
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.statemachines.flat.FlatteningCppTransformer;
+
+public class StateMachineGenerator extends AbstractCppGenerator
+{
+ private final StateMachine stateMachine;
+
+ public static class Factory implements AbstractCppGenerator.Factory<StateMachine>
+ {
+ @Override
+ public AbstractCppGenerator create( CppCodePattern cpp, StateMachine stateMachine )
+ {
+ return new StateMachineGenerator( cpp, stateMachine );
+ }
+ }
+
+ private StateMachineGenerator( CppCodePattern cpp, StateMachine stateMachine )
+ {
+ super( cpp );
+ this.stateMachine = stateMachine;
+ }
+
+ @Override
+ public String getLabel()
+ {
+ return super.getLabel() + ' ' + stateMachine.getName();
+ }
+
+ @Override
+ public boolean generate()
+ {
+ FlatteningCppTransformer generator = new FlatteningCppTransformer( cpp );
+
+ return generator.transform( stateMachine );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.classpath b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.classpath
new file mode 100644
index 0000000..248b4c5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.project b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.project
new file mode 100644
index 0000000..e2bd12e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.cpp.structure</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5f497a5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Structural CodeGen plugin
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.cpp.structure;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.papyrus.umlrt,
+ org.eclipse.papyrusrt.codegen.lang.cpp,
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.cpp.rts,
+ org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.xtend.lib;bundle-version="2.7.2"
+Export-Package: org.eclipse.papyrusrt.codegen.cpp.structure
+
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/about.html b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/about.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/build.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/build.properties
new file mode 100644
index 0000000..cf8dd8f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/build.properties
@@ -0,0 +1,7 @@
+source.. = xtend-gen/,\
+ src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/plugin.xml
new file mode 100644
index 0000000..934010b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension point="org.eclipse.papyrusrt.codegen.cpp.generator">
+ <generator
+ type="StructuralGenerator"
+ class="org.eclipse.papyrusrt.codegen.cpp.structure.CompositionGenerator$Factory"/>
+ </extension>
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/pom.xml
new file mode 100644
index 0000000..4889da3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.cpp.structure</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java
new file mode 100644
index 0000000..2bf1142
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CompositionGenerator.java
@@ -0,0 +1,485 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.structure;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.cpp.structure.model.Controller;
+import org.eclipse.papyrusrt.codegen.cpp.structure.model.ControllerAllocations;
+import org.eclipse.papyrusrt.codegen.cpp.structure.model.Deployment;
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.IPortInstance;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AddressOfExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BlockInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BooleanLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CppEnumOrderedInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IndexExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.StringLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.StandardLibrary;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart;
+import org.eclipse.papyrusrt.xtumlrt.common.VisibilityKind;
+
+public class CompositionGenerator extends AbstractCppGenerator
+{
+ private final org.eclipse.papyrusrt.xtumlrt.common.Capsule topCapsule;
+ private final ControllerAllocations controllerAllocations;
+
+ private final Map<Controller, Variable> controllerVars = new HashMap<Controller, Variable>();
+ private final Map<Controller, Variable> controllerSlotVars = new HashMap<Controller, Variable>();
+ private final Map<ICapsuleInstance, Enumerator> capsuleEnums = new HashMap<ICapsuleInstance, Enumerator>();
+ private final Map<ICapsuleInstance, Variable> capsuleTypeInstances = new HashMap<ICapsuleInstance, Variable>();
+ private final Map<ICapsuleInstance, Variable[]> capsulePortArrays = new HashMap<ICapsuleInstance, Variable[]>();
+ private final Map<ICapsuleInstance, VarWrapper[]> portArrays = new HashMap<ICapsuleInstance, VarWrapper[]>();
+
+ private static class VarWrapper
+ {
+ public final Variable variable;
+ public VarWrapper( Variable variable ) { this.variable = variable; }
+ }
+
+ private Deployment deployment;
+
+ public static class Factory implements AbstractCppGenerator.Factory<org.eclipse.papyrusrt.xtumlrt.common.Capsule>
+ {
+ @Override
+ public AbstractCppGenerator create( CppCodePattern cpp, org.eclipse.papyrusrt.xtumlrt.common.Capsule topCapsule )
+ {
+ ControllerAllocations controllerAllocations = null;
+ File file = cpp.getControllerAllocations( topCapsule );
+ if( file != null )
+ controllerAllocations = ControllerAllocations.load( file );
+
+ // If there isn't an allocations file, then create one that will put everything onto
+ // the same controller.
+ if( controllerAllocations == null )
+ controllerAllocations = ControllerAllocations.Default;
+
+ return new CompositionGenerator( cpp, topCapsule, controllerAllocations );
+ }
+ }
+
+ private CompositionGenerator( CppCodePattern cpp, org.eclipse.papyrusrt.xtumlrt.common.Capsule topCapsule, ControllerAllocations controllerAllocations )
+ {
+ super( cpp );
+ this.topCapsule = topCapsule;
+ this.controllerAllocations = controllerAllocations;
+ }
+
+ @Override
+ public String getLabel()
+ {
+ return super.getLabel() + ' ' + topCapsule.getName();
+ }
+
+ @Override
+ public boolean generate()
+ {
+ deployment = Deployment.build( cpp, topCapsule, controllerAllocations );
+ if( deployment == null )
+ return false;
+
+ ElementList elements = cpp.getElementList( CppCodePattern.Output.Deployment, topCapsule );
+ if( elements == null
+ || ! cpp.markWritable( elements ) )
+ return false;
+
+ CppEnum capsuleIdEnum = new CppEnum( "CapsuleInstanceId" );
+ elements.addElement( capsuleIdEnum );
+ // Create an enumerator for each capsule instance.
+ for( Controller controller : deployment.getControllers() )
+ {
+ int localId = 0;
+ for( ICapsuleInstance capsule : controller.getCapsules() )
+ {
+ Enumerator enumerator = new Enumerator( "InstId_" + capsule.getQualifiedName( '_' ), new IntegralLiteral( localId++ ) );
+ capsuleIdEnum.add( enumerator );
+ capsuleEnums.put( capsule, enumerator );
+ }
+ }
+
+ for( Controller controller : deployment.getControllers() )
+ {
+ // Initialize data for each statically allocated capsule instance.
+ for( ICapsuleInstance capsule : controller.getCapsules() )
+ {
+ // Do not generate the user capsule class for dynamic instances.
+ if( capsule.isDynamic() )
+ continue;
+
+ Variable borderPortArray = getPortArray( elements, capsule, true );
+ if( borderPortArray != null )
+ {
+ borderPortArray = createCapsulePortPointerArray( borderPortArray );
+ if( borderPortArray != null )
+ elements.addElement( borderPortArray );
+ }
+
+ Variable internalPortArray = getPortArray( elements, capsule, false );
+
+ ConstructorCall ctorCall = new ConstructorCall( cpp.getConstructor( CppCodePattern.Output.CapsuleClass, capsule.getType() ) );
+ ctorCall.addArgument( new AddressOfExpr( getSlotAccess( capsule ) ) );
+ ctorCall.addArgument( borderPortArray == null ? StandardLibrary.NULL() : new ElementAccess( borderPortArray ) );
+ ctorCall.addArgument( internalPortArray == null ? StandardLibrary.NULL() : new ElementAccess( internalPortArray ) );
+ ctorCall.addArgument( new BooleanLiteral( ! capsule.isDynamic() ) );
+
+ char[] instNameChars = capsule.getQualifiedName( '_' ).toCharArray();
+ String instName = null;
+ if( instNameChars.length <= 0 )
+ throw new RuntimeException( "invalid attempt to generate code for unnamed Capsule" );
+ else if( Character.isLowerCase( instNameChars[0] ) )
+ instName = new String( instNameChars ) + '_';
+ else
+ {
+ instNameChars[0] = Character.toLowerCase( instNameChars[0] );
+ instName = new String( instNameChars );
+ }
+
+ Variable instVar
+ = new Variable(
+ LinkageSpec.STATIC,
+ cpp.getCppClass( CppCodePattern.Output.CapsuleClass, capsule.getType() ).getType(),
+ instName,
+ ctorCall );
+ elements.addElement( instVar );
+ capsuleTypeInstances.put( capsule, instVar );
+ }
+
+ Variable controllerSlotVar = controllerSlotVars.get( controller );
+ AbstractFunctionCall controllerCtor
+ = UMLRTRuntime.UMLRTController.Ctor(
+ new StringLiteral( controller.getName() ),
+ new IntegralLiteral( controller.getNumCapsules() ), // controllerSlotVar not initialized yet
+ new ElementAccess( controllerSlotVar ) );
+ Variable controllerVar
+ = new Variable(
+ LinkageSpec.EXTERN,
+ UMLRTRuntime.UMLRTController.getType(),
+ controller.getName(),
+ controllerCtor );
+ elements.addElement( controllerVar );
+ controllerVars.put( controller, controllerVar );
+ }
+
+ // Generate code to connect everything.
+ for( Controller controller : deployment.getControllers() )
+ {
+ BlockInitializer arrayInit = new BlockInitializer( UMLRTRuntime.UMLRTSlot.getType().arrayOf( null ) );
+
+ // Generate tables for each capsule instance.
+ for( ICapsuleInstance capsule : controller.getCapsules() )
+ {
+ Variable partArray = createCapsulePartArray( elements, capsule );
+ if( partArray != null )
+ elements.addElement( partArray );
+
+ Variable borderPortArray = getPortArray( elements, capsule, true );
+
+ Expression[] minusOnes = new Expression[capsule.getPorts().size()];
+ for( int i = 0; i < minusOnes.length; ++i )
+ minusOnes[i] = new IntegralLiteral( -1 );
+ Variable slotToBorderMap
+ = new Variable(
+ LinkageSpec.STATIC,
+ PrimitiveType.INT.arrayOf( null ),
+ "slotToBorderMap_" + capsule.getQualifiedName( '_' ),
+ new BlockInitializer( PrimitiveType.INT.arrayOf( null ), minusOnes ) );
+ elements.addElement( slotToBorderMap );
+
+ Variable userClassVar = capsuleTypeInstances.get( capsule );
+ arrayInit.addExpression(
+ new BlockInitializer(
+ UMLRTRuntime.UMLRTSlot.getType(),
+ new StringLiteral( capsule.getQualifiedName( '.' ) ),
+ new IntegralLiteral( capsule.getIndex() ),
+ new AddressOfExpr( new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule.getType() ) ) ),
+ capsule.getContainer() == null
+ ? StandardLibrary.NULL()
+ : new AddressOfExpr(
+ new ElementAccess(
+ cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule.getContainer().getType() ) ) ),
+ capsule.getCapsulePart() == null
+ ? new IntegralLiteral( 0 )
+ : cpp.getEnumeratorAccess(
+ CppCodePattern.Output.PartId,
+ capsule.getCapsulePart(),
+ capsule.getContainer() == null ? null : capsule.getContainer().getType() ),
+ userClassVar == null ? StandardLibrary.NULL() : new AddressOfExpr( new ElementAccess( userClassVar ) ),
+ new AddressOfExpr( new ElementAccess( controllerVars.get( deployment.getController( capsule ) ) ) ),
+ new IntegralLiteral( partArray == null ? 0 : partArray.getNumInitializedInstances() ),
+ partArray == null ? StandardLibrary.NULL() : new ElementAccess( partArray ),
+ new IntegralLiteral( borderPortArray == null ? 0 : borderPortArray.getNumInitializedInstances() ),
+ borderPortArray == null ? StandardLibrary.NULL() : new ElementAccess( borderPortArray ),
+ new ElementAccess( slotToBorderMap ),
+ BooleanLiteral.TRUE(),
+ BooleanLiteral.FALSE() ) );
+ }
+
+ Variable capsuleInstancesInit = controllerSlotVars.get( controller );
+ capsuleInstancesInit.setInitializer( arrayInit );
+ elements.addElement( capsuleInstancesInit );
+ }
+
+ // Generate main
+ new CppMainGenerator().generate(cpp.getOutputFolder().getAbsolutePath() + "/main.cc", deployment);
+
+ return true;
+ }
+
+ private Expression getSlotAccess( ICapsuleInstance capsule )
+ {
+ Controller controller = deployment.getController( capsule );
+ Variable controllerSlotVar = controllerSlotVars.get( controller );
+ if( controllerSlotVar == null )
+ {
+ controllerSlotVar
+ = new Variable(
+ LinkageSpec.EXTERN,
+ UMLRTRuntime.UMLRTSlot.getType().arrayOf( null ),
+ controller.getName() + "_slots" );
+ controllerSlotVars.put( controller, controllerSlotVar );
+ }
+
+ return new IndexExpr( new ElementAccess( controllerSlotVar ), new ElementAccess( capsuleEnums.get( capsule ) ) );
+ }
+
+ private Variable createCapsulePartArray( ElementList elements, ICapsuleInstance capsule )
+ {
+ BlockInitializer slotArrayInit = new BlockInitializer( UMLRTRuntime.UMLRTSlot.getType().ptr().arrayOf( null ) );
+ Variable slotArrayVar
+ = new Variable(
+ LinkageSpec.STATIC,
+ slotArrayInit.getType(),
+ "slots_" + capsule.getQualifiedName( '_' ),
+ slotArrayInit );
+
+ BlockInitializer init = new BlockInitializer( UMLRTRuntime.UMLRTCapsulePart.getType().arrayOf( null ) );
+ Variable var
+ = new Variable(
+ LinkageSpec.STATIC,
+ UMLRTRuntime.UMLRTCapsulePart.getType().arrayOf( null ),
+ "parts_" + capsule.getQualifiedName( '_' ),
+ init );
+
+ Variable capsuleClassVar = cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule.getType() );
+
+ for( CapsulePart part : XTUMLRTUtil.getAllCapsuleParts( capsule.getType() ) )
+ {
+ // The part points to an array of slots. If the part is replicated at most one time,
+ // then we avoid creating the array and instead point to a single slot.
+ Expression slotAccess = null;
+ List<? extends ICapsuleInstance> contained = capsule.getContained( part );
+ if( contained == null
+ || contained.size() <= 0 )
+ slotAccess = StandardLibrary.NULL();
+ else
+ {
+ slotAccess
+ = new AddressOfExpr(
+ new IndexExpr(
+ new ElementAccess( slotArrayVar ),
+ new IntegralLiteral( slotArrayVar.getNumInitializedInstances() ) ) );
+ for( ICapsuleInstance sub : contained )
+ slotArrayInit.addExpression( new AddressOfExpr( getSlotAccess( sub ) ) );
+ }
+
+ init.addExpression(
+ new BlockInitializer(
+ UMLRTRuntime.UMLRTCapsulePart.getType(),
+ new AddressOfExpr( new ElementAccess( capsuleClassVar ) ),
+ cpp.getEnumeratorAccess( CppCodePattern.Output.PartId, part, capsule.getType() ),
+ new IntegralLiteral( contained == null ? 0 : contained.size() ),
+ slotAccess ) );
+ }
+
+ if( slotArrayVar.getNumInitializedInstances() > 0 )
+ elements.addElement( slotArrayVar );
+
+ return var.getNumInitializedInstances() <= 0 ? null : var;
+ }
+
+ private Variable createCapsulePortArray( ICapsuleInstance capsule, boolean border )
+ {
+ Variable[] vars = capsulePortArrays.get( capsule );
+ if( vars == null )
+ {
+ vars = new Variable[2];
+ capsulePortArrays.put( capsule, vars );
+ }
+
+ Variable var = vars[border ? 0 : 1];
+ if( var == null )
+ {
+ var = new Variable(
+ LinkageSpec.EXTERN, // extern so port farEnds can reference each other
+ UMLRTRuntime.UMLRTCommsPort.getType().arrayOf( null ),
+ ( border ? "border" : "internal" ) + "ports_" + capsule.getQualifiedName( '_' ) );
+ vars[border ? 0 : 1] = var;
+ }
+
+ return var;
+ }
+
+ private Variable getPortArray( ElementList elements, ICapsuleInstance capsule, boolean border )
+ {
+ VarWrapper[] vars = portArrays.get( capsule );
+ if( vars == null )
+ {
+ vars = new VarWrapper[2];
+ portArrays.put( capsule, vars );
+ }
+
+ VarWrapper var = vars[border ? 0 : 1];
+ if( var == null )
+ {
+ var = new VarWrapper( createPortArray( elements, capsule, border ) );
+ vars[border ? 0 : 1] = var;
+
+ if( var.variable != null )
+ elements.addElement( var.variable );
+ }
+
+ return var.variable;
+ }
+
+ private Variable createPortArray( ElementList elements, ICapsuleInstance capsule, boolean border )
+ {
+ // The port array must be initialized in the same order as the corresponding PortId enum.
+ CppEnumOrderedInitializer arrayInit = null;
+
+ CppCodePattern.Output CppCodePattern_Output_portId
+ = border ? CppCodePattern.Output.BorderPortId : CppCodePattern.Output.InternalPortId;
+
+ // This generates two arrays. One has an element for each port, the other is the array of
+ // farEnd ports instances. The farEnd array has an entry for each instance, the port array
+ // has an entry for each port.
+ // E.g., if there are two ports, one not replicated and the other replicated twice, then the
+ // port array will have two elements and the farEnd array will have three.
+ // Further, the port array is initialized using slices of the farEnd array. E.g.,
+ // farEndArray[3] = { farEndA0, farEndA1, farEndB };
+ // portArray[2] = { &farEndArray[0], &farEndArray[2] );
+
+ BlockInitializer farEndInit = new BlockInitializer( UMLRTRuntime.UMLRTCommsPortFarEnd.getType().arrayOf( null ) );
+ Variable farEndPorts
+ = new Variable(
+ LinkageSpec.STATIC,
+ farEndInit.getType(),
+ ( border ? "border" : "internal" ) + "farEndList_" + capsule.getQualifiedName( '_' ),
+ farEndInit );
+
+ for( IPortInstance port : capsule.getPorts() )
+ {
+ if( border != ( VisibilityKind.PUBLIC.equals( port.getType().getVisibility() ) ) )
+ continue;
+
+ // This generates an expression to access the start of the farEnd array.
+ // For index 0 this is the array "farEndList_capsulename". For other indexes it
+ // is the address of the corresponding element "&farEndList_capsulename[n]".
+ int farEndCount = 0;
+ Expression farEndAccess
+ = farEndPorts.getNumInitializedInstances() == 0
+ ? new ElementAccess( farEndPorts )
+ : new AddressOfExpr(
+ new IndexExpr(
+ new ElementAccess( farEndPorts ),
+ new IntegralLiteral( farEndPorts.getNumInitializedInstances() ) ) );
+ for( IPortInstance.IFarEnd farEnd : port.getFarEnds() )
+ {
+ ++farEndCount;
+ ICapsuleInstance farEndCapsule = farEnd.getContainer();
+ farEndInit.addExpression(
+ new BlockInitializer(
+ UMLRTRuntime.UMLRTCommsPortFarEnd.getType(),
+ new IntegralLiteral( farEnd.getIndex() ),
+ new AddressOfExpr(
+ new IndexExpr(
+ new ElementAccess( createCapsulePortArray( farEndCapsule, ! XTUMLRTUtil.isInternalPort( farEnd.getType() ) ) ),
+ cpp.getEnumeratorAccess(
+ XTUMLRTUtil.isInternalPort( farEnd.getType() ) ? CppCodePattern.Output.InternalPortId : CppCodePattern.Output.BorderPortId,
+ farEnd.getType(),
+ farEndCapsule.getType() ) ) ) ) );
+ }
+
+ BlockInitializer portInit = new BlockInitializer( UMLRTRuntime.UMLRTCommsPort.getType() );
+ portInit.addExpression(
+ new AddressOfExpr(
+ new ElementAccess(
+ cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, port.getContainer().getType() ) ) ) );
+ portInit.addExpression(
+ cpp.getEnumeratorAccess( CppCodePattern_Output_portId, port.getType(), capsule.getType() ) );
+ portInit.addExpression( new AddressOfExpr( getSlotAccess( port.getContainer() ) ) );
+ portInit.addExpression( new IntegralLiteral( farEndCount ) );
+ portInit.addExpression( farEndCount <= 0 ? StandardLibrary.NULL() : farEndAccess );
+
+ // TODO some fields need the actual values
+ portInit.addExpression( StandardLibrary.NULL() ); // mutable UMLRTMessageQueue * deferQueue; // Deferred messages on this port.
+ portInit.addExpression( StandardLibrary.NULL() ); // mutable char * registeredName;
+ portInit.addExpression( BooleanLiteral.from( XTUMLRTUtil.isAutomatic( port.getType() ) ) );
+ portInit.addExpression( BooleanLiteral.from( border ) );
+ portInit.addExpression( BooleanLiteral.TRUE() ); // unsigned generated : 1; // True for code-generated ports (registeredName is not from heap).
+ portInit.addExpression( BooleanLiteral.from( XTUMLRTUtil.isApplicationLocked( port.getType() ) ) );
+ portInit.addExpression( BooleanLiteral.from( XTUMLRTUtil.isNotification( port.getType() ) ) );
+ portInit.addExpression( BooleanLiteral.FALSE() ); // unsigned proxy : 1; // True for proxy border ports created if the slot port replication is less than the capsule border port replication.
+ portInit.addExpression( BooleanLiteral.from( port.isRelay() ) );
+ portInit.addExpression( BooleanLiteral.FALSE() ); // unsigned sap : 1; // True if the port is an SAP.
+ portInit.addExpression( BooleanLiteral.FALSE() ); // unsigned spp : 1; // True if the port is an SPP.
+ portInit.addExpression( BooleanLiteral.FALSE() ); // unsigned unbound : 1; // True to represent the unbound port. Has no far-end instances and is replaced when binding.
+ portInit.addExpression( BooleanLiteral.from( XTUMLRTUtil.isWired( port.getType() ) ) );
+
+ if( arrayInit == null )
+ arrayInit
+ = new CppEnumOrderedInitializer(
+ cpp.getCppEnum( CppCodePattern_Output_portId, port.getContainer().getType() ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.getType().arrayOf( null ) );
+ arrayInit.putExpression( cpp.getEnumerator( CppCodePattern_Output_portId, port.getType(), capsule.getType() ), portInit );
+ }
+
+ if( arrayInit == null
+ || arrayInit.getNumInitializers() <= 0 )
+ return null;
+
+ if( farEndPorts.getNumInitializedInstances() > 0 )
+ elements.addElement( farEndPorts );
+
+ Variable portArray = createCapsulePortArray( capsule, border );
+ portArray.setInitializer( arrayInit );
+ return portArray;
+ }
+
+ private Variable createCapsulePortPointerArray( Variable var )
+ {
+ if( var == null )
+ return null;
+
+ BlockInitializer init = new BlockInitializer( UMLRTRuntime.UMLRTCommsPort.getType().const_().ptr().arrayOf( null ) );
+ for( int i = 0; i < var.getNumInitializedInstances(); ++i )
+ init.addExpression(
+ new AddressOfExpr(
+ new IndexExpr(
+ new ElementAccess( var ),
+ new IntegralLiteral( i ) ) ) );
+ return new Variable( LinkageSpec.STATIC, init.getType(), var.getName().getIdentifier() + "_ptrs", init );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend
new file mode 100644
index 0000000..6a03c20
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/CppMainGenerator.xtend
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.structure
+
+import java.io.BufferedWriter
+import java.io.File
+import java.io.FileWriter
+import org.eclipse.papyrusrt.codegen.cpp.structure.model.Deployment
+
+class CppMainGenerator {
+
+ def generate(String filePath, Deployment deployment) {
+
+ val file = new File(filePath);
+
+ val writer = new BufferedWriter(new FileWriter(file));
+ writer.write(doGenerate(deployment).toString)
+ writer.close
+ }
+
+ def private doGenerate(Deployment deployment) {
+ '''#include "umlrtmain.hh"
+#include "umlrtmessagepool.hh"
+#include "umlrtsignalelementpool.hh"
+#include "umlrttimerpool.hh"
+#include "umlrtuserconfig.hh"
+#include "Controllers.hh"
+#include <stdio.h>
+
+// main.cc
+
+// Application-wide signal pool.
+static UMLRTSignalElement signalElementBuffer[USER_CONFIG_SIGNAL_ELEMENT_POOL_SIZE];
+static UMLRTSignalElementPool signalElementPool( signalElementBuffer, USER_CONFIG_SIGNAL_ELEMENT_POOL_SIZE );
+
+// Application-wide message pool.
+static UMLRTMessage messageBuffer[USER_CONFIG_MESSAGE_POOL_SIZE];
+static UMLRTMessagePool messagePool( messageBuffer, USER_CONFIG_MESSAGE_POOL_SIZE );
+
+// Application-wide timer pool.
+static UMLRTTimer timers[USER_CONFIG_TIMER_POOL_SIZE];
+static UMLRTTimerPool timerPool( timers, USER_CONFIG_TIMER_POOL_SIZE );
+
+// Generated application main.
+int main( int argc, char * argv[] )
+{
+ // Initialize application-wide signal- and message-pools.
+ UMLRTController::initializePools( &signalElementPool, &messagePool, &timerPool );
+
+ // Will only output arguments found on command-line after '--userargs' argument.
+ UMLRTMain::setArgs( argc, argv );
+
+ if( UMLRTMain::targetStartup() )
+ {
+ // Spawn the controllers
+ «FOR c : deployment.controllers»
+ «c.name».spawn();
+ «ENDFOR»
+
+ bool main_ok = UMLRTMain::mainLoop();
+ if( main_ok )
+ {
+ // Wait for completion.
+ «FOR c : deployment.controllers»
+ «c.name».join();
+ «ENDFOR»
+ }
+ return UMLRTMain::targetShutdown( main_ok );
+ }
+
+ return EXIT_FAILURE;
+}
+'''
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/Controller.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/Controller.java
new file mode 100644
index 0000000..92bff30
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/Controller.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.structure.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+
+public class Controller
+{
+ private final String name;
+ private final List<ICapsuleInstance> capsules = new ArrayList<ICapsuleInstance>();
+
+ public Controller( String name )
+ {
+ this.name = name;
+ }
+
+ public void add( ICapsuleInstance capsule ) { capsules.add( capsule ); }
+
+ public String getName() { return name; }
+ public Iterable<ICapsuleInstance> getCapsules() { return capsules; }
+ public int getNumCapsules() { return capsules.size(); }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/ControllerAllocations.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/ControllerAllocations.java
new file mode 100644
index 0000000..b07965f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/ControllerAllocations.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.structure.model;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+
+public class ControllerAllocations
+{
+ // CapsuleName -> ControllerName
+ private final Map<String, String> allocations = new HashMap<String, String>();
+ private final List<Controller> controllers = new ArrayList<Controller>();
+
+ public static final ControllerAllocations Default = new ControllerAllocations()
+ {
+ @Override public String getController( ICapsuleInstance capsule ) { return "DefaultController"; }
+ };
+
+ public Iterable<Controller> getControllers() { return controllers; }
+
+ public static ControllerAllocations load( File allocationsFile )
+ {
+ if( allocationsFile == null
+ || ! allocationsFile.exists() )
+ return null;
+
+ Properties properties = new Properties();
+ FileReader reader = null;
+ try
+ {
+ reader = new FileReader( allocationsFile );
+ properties.load( reader );
+ }
+ catch( IOException e )
+ {
+ CodeGenPlugin.error( e );
+ return null;
+ }
+ finally
+ {
+ if( reader != null )
+ try { reader.close(); }
+ catch( IOException e ) { CodeGenPlugin.error( e ); }
+ }
+
+ Set<String> controllerNames = new HashSet<String>();
+ ControllerAllocations allocs = new ControllerAllocations();
+ for( String key : properties.stringPropertyNames() )
+ {
+ String controllerName = properties.getProperty( key );
+ allocs.allocations.put( key, controllerName );
+
+ if( controllerNames.add( controllerName ) )
+ allocs.controllers.add( new Controller( controllerName ) );
+ }
+ return allocs;
+ }
+
+ /**
+ * Return the controller allocated to this capsule instance or null if there is
+ * no such allocation.
+ */
+ public String getController( ICapsuleInstance capsule )
+ {
+ // Look for an allocation for this specific instance.
+ String controllerName = allocations.get( capsule.getQualifiedName( '.' ) );
+ if( controllerName != null )
+ return controllerName;
+
+ // Otherwise look for a generic allocation for this capsule type.
+ String typeName = capsule.getType().getName();
+ controllerName = allocations.get( typeName );
+ if( controllerName != null )
+ return controllerName;
+
+ // Otherwise there is no allocation so return null.
+ return null;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/Deployment.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/Deployment.java
new file mode 100644
index 0000000..a64d9e3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.structure/src/org/eclipse/papyrusrt/codegen/cpp/structure/model/Deployment.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.structure.model;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.eclipse.papyrusrt.codegen.cpp.ConnectorReporter;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.instance.model.CapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+
+public class Deployment
+{
+ private final ControllerAllocations controllerAllocations;
+ private final Map<String, Controller> controllers = new LinkedHashMap<String, Controller>();
+ private final Map<ICapsuleInstance, Controller> capsules = new LinkedHashMap<ICapsuleInstance, Controller>();
+
+ private Deployment( ControllerAllocations controllerAllocations )
+ {
+ this.controllerAllocations = controllerAllocations;
+ }
+
+ /**
+ * Build a deployment instance by examining the top capsule and creating the structural
+ * connections for all related capsule instances.
+ */
+ public static Deployment build( CppCodePattern cpp, Capsule topType, ControllerAllocations controllerAllocations )
+ {
+ Deployment deployment = new Deployment( controllerAllocations );
+
+ // Create the instance model and then examine all capsule instances to create
+ // controllers.
+ CapsuleInstance topInstance = new CapsuleInstance( topType );
+ ConnectorReporter connReporter = new ConnectorReporter( topInstance );
+ topInstance.connect( connReporter, false );
+ deployment.allocate( topInstance );
+ connReporter.log( cpp.getOutputFolder() );
+
+ return deployment;
+ }
+
+ public Iterable<Controller> getControllers() { return controllers.values(); }
+
+ private void allocate( ICapsuleInstance capsule )
+ {
+ Controller controller = getController( capsule );
+ controller.add( capsule );
+ capsules.put( capsule, controller );
+
+ for( ICapsuleInstance contained : capsule.getContained() )
+ allocate( contained );
+ }
+
+ // Return the controller for this capsule instance.
+ public Controller getController( ICapsuleInstance capsule )
+ {
+ if( capsule == null )
+ return null;
+
+ Controller controller = capsules.get( capsule );
+ if( controller != null )
+ return controller;
+
+ // First look for a controller allocation for this instance.
+ String controllerName = controllerAllocations.getController( capsule );
+
+ // If there isn't a controller for this capsule instance, then use the one
+ // for its container.
+ if( controllerName == null )
+ {
+ controller = getController( capsule.getContainer() );
+ capsules.put( capsule, controller );
+ return controller;
+ }
+
+ // Otherwise either create a new controller or reuse one that has already
+ // been created for this name.
+ controller = controllers.get( controllerName );
+ if( controller == null )
+ {
+ controller = new Controller( controllerName );
+ controllers.put( controllerName, controller );
+ }
+
+ capsules.put( capsule, controller );
+ return controller;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.classpath b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.project b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.project
new file mode 100644
index 0000000..bc878d9
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.cpp.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..da3b423
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Zeligsoft UML-RT C++ CodeGen Tests
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.cpp.test
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.junit;bundle-version="4.11.0",
+ org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.xtumlrt.common.model
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/about.html b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/about.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/build.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/build.properties
new file mode 100644
index 0000000..17daa5b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/pom.xml
new file mode 100644
index 0000000..d931f68
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.cpp.test</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/src/org/eclipse/papyrusrt/codegen/cpp/test/ConnectorCreationTest.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/src/org/eclipse/papyrusrt/codegen/cpp/test/ConnectorCreationTest.java
new file mode 100644
index 0000000..277b0cd
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/src/org/eclipse/papyrusrt/codegen/cpp/test/ConnectorCreationTest.java
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.cpp.ConnectorReporter;
+import org.eclipse.papyrusrt.codegen.instance.model.CapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.IPortInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.PortInstance.FarEnd;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart;
+import org.eclipse.papyrusrt.xtumlrt.common.CommonFactory;
+import org.eclipse.papyrusrt.xtumlrt.common.Connector;
+import org.eclipse.papyrusrt.xtumlrt.common.ConnectorEnd;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class ConnectorCreationTest
+{
+ /**
+ * A utility for holding a model that is defined in the pattern of the connector
+ * requirements. This is a Top level with two parts, each with a single port.
+ * The two ports are connection. The variation points are the capsule and port
+ * replication factors.
+ */
+ private static class Model
+ {
+ public final String label;
+ public Capsule top;
+ public Capsule capsule1;
+ public Capsule capsule2;
+ public Port port1;
+ public Port port2;
+ public CapsulePart part1;
+ public CapsulePart part2;
+
+ private Model( String label ) { this.label = label; }
+
+ public static Model create( String label, int part1Upper, int port1Upper, int part2Upper, int port2Upper )
+ {
+ Model model = new Model( label );
+
+ Protocol protocol = CommonFactory.eINSTANCE.createProtocol();
+ protocol.setName( "Protocol" );
+
+ model.port1 = CommonFactory.eINSTANCE.createPort();
+ model.port1.setName( "p1" );
+ model.port1.setType( protocol );
+ model.port1.setUpperBound( port1Upper );
+ model.port2 = CommonFactory.eINSTANCE.createPort();
+ model.port2.setName( "p2" );
+ model.port2.setType( protocol );
+ model.port2.setUpperBound( port2Upper );
+
+ model.top = CommonFactory.eINSTANCE.createCapsule();
+ model.capsule1 = CommonFactory.eINSTANCE.createCapsule();
+ model.capsule2 = CommonFactory.eINSTANCE.createCapsule();
+ model.top.setName( "Top" );
+ model.capsule1.setName( "Capsule1" );
+ model.capsule2.setName( "Capsule2" );
+ model.capsule1.getPorts().add( model.port1 );
+ model.capsule2.getPorts().add( model.port2 );
+
+ model.part1 = CommonFactory.eINSTANCE.createCapsulePart();
+ model.part2 = CommonFactory.eINSTANCE.createCapsulePart();
+ model.part1.setName( "part1" );
+ model.part1.setType( model.capsule1 );
+ model.part1.setLowerBound( 1 );
+ model.part1.setUpperBound( part1Upper );
+ model.part2.setName( "part2" );
+ model.part2.setType( model.capsule2 );
+ model.part2.setLowerBound( 1 );
+ model.part2.setUpperBound( part2Upper );
+ model.top.getParts().add( model.part1 );
+ model.top.getParts().add( model.part2 );
+
+ ConnectorEnd end1 = CommonFactory.eINSTANCE.createConnectorEnd();
+ ConnectorEnd end2 = CommonFactory.eINSTANCE.createConnectorEnd();
+ end1.setPartWithPort( model.part1 );
+ end1.setRole( model.port1 );
+ end2.setPartWithPort( model.part2 );
+ end2.setRole( model.port2 );
+
+ Connector conn = CommonFactory.eINSTANCE.createConnector();
+ conn.setName( label );
+ conn.getEnds().add( end1 );
+ conn.getEnds().add( end2 );
+ model.top.getConnectors().add( conn );
+
+ return model;
+ }
+
+ public CapsuleInstance createConnectedCapsule()
+ {
+ CapsuleInstance topInstance = new CapsuleInstance( top );
+ ConnectorReporter connReporter = new ConnectorReporter( topInstance );
+ topInstance.connect( connReporter, false );
+ connReporter.log( System.out );
+ return topInstance;
+ }
+ }
+
+ @SuppressWarnings( "unchecked" )
+ private void assertBinding( Model model, CapsuleInstance top, int cap0, int port0, int cap1, int port1 )
+ {
+ List<? extends ICapsuleInstance> part1Instances = top.getContained( model.part1 );
+ List<? extends ICapsuleInstance> part2Instances = top.getContained( model.part2 );
+ assertNotNull( part1Instances );
+ assertNotNull( part2Instances );
+
+ ICapsuleInstance c0 = part1Instances.get( cap0 );
+ ICapsuleInstance c1 = part2Instances.get( cap1 );
+ assertNotNull( c0 );
+ assertNotNull( c1 );
+
+ IPortInstance p0 = c0.getPort( model.port1 );
+ IPortInstance p1 = c1.getPort( model.port2 );
+ assertNotNull( p0 );
+ assertNotNull( p1 );
+
+ ArrayList<FarEnd> farEnds0 = (ArrayList<FarEnd>)p0.getFarEnds();
+ ArrayList<FarEnd> farEnds1 = (ArrayList<FarEnd>)p1.getFarEnds();
+ assertNotNull( farEnds0 );
+ assertNotNull( farEnds1 );
+
+ FarEnd farEnd0 = farEnds0.get( port0 );
+ FarEnd farEnd1 = farEnds1.get( port1 );
+ assertNotNull( farEnd0 );
+ assertNotNull( farEnd1 );
+
+ assertEquals( farEnd0.getContainer(), c1 );
+ assertEquals( farEnd0.getOwner(), p1 );
+ assertEquals( farEnd1.getContainer(), c0 );
+ assertEquals( farEnd1.getOwner(), p0 );
+ }
+
+ @Test
+ public void caseA()
+ {
+ Model model = Model.create( "Case_A", 3, 3, 2, 1 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+ }
+
+ @Test
+ public void caseB()
+ {
+ Model model = Model.create( "Case_B", 3, 3, 2, 2 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 1, 0, 0, 1 );
+ assertBinding( model, topInstance, 2, 0, 1, 0 );
+ }
+
+ @Test
+ public void caseC()
+ {
+ Model model = Model.create( "Case_C", 3, 3, 2, 3 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 0, 1, 0, 1 );
+ assertBinding( model, topInstance, 1, 0, 0, 2 );
+ assertBinding( model, topInstance, 1, 1, 1, 0 );
+ assertBinding( model, topInstance, 2, 0, 1, 1 );
+ assertBinding( model, topInstance, 2, 1, 1, 2 );
+ }
+
+ @Test
+ public void caseD()
+ {
+ Model model = Model.create( "Case_D", 3, 3, 2, 4 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 0, 1, 0, 1 );
+ assertBinding( model, topInstance, 1, 0, 0, 2 );
+ assertBinding( model, topInstance, 1, 1, 0, 3 );
+ assertBinding( model, topInstance, 2, 0, 1, 0 );
+ assertBinding( model, topInstance, 2, 1, 1, 1 );
+ }
+
+ @Test
+ public void caseE()
+ {
+ Model model = Model.create( "Case_E", 3, 3, 2, 5 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 0, 1, 0, 1 );
+ assertBinding( model, topInstance, 0, 2, 0, 2 );
+ assertBinding( model, topInstance, 1, 0, 0, 3 );
+ assertBinding( model, topInstance, 1, 1, 1, 0 );
+ assertBinding( model, topInstance, 1, 2, 1, 1 );
+ assertBinding( model, topInstance, 2, 0, 1, 2 );
+ assertBinding( model, topInstance, 2, 1, 1, 3 );
+ }
+
+ @Test
+ public void caseF()
+ {
+ Model model = Model.create( "Case_F", 3, 3, 4, 1 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 1, 0, 1, 0 );
+ assertBinding( model, topInstance, 2, 0, 2, 0 );
+ }
+
+ @Test
+ public void caseG()
+ {
+ Model model = Model.create( "Case_G", 3, 3, 4, 2 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 0, 1, 0, 1 );
+ assertBinding( model, topInstance, 1, 0, 1, 0 );
+ assertBinding( model, topInstance, 1, 1, 1, 1 );
+ assertBinding( model, topInstance, 2, 0, 2, 0 );
+ assertBinding( model, topInstance, 2, 1, 2, 1 );
+ }
+
+ @Test
+ public void caseH()
+ {
+ Model model = Model.create( "Case_H", 3, 3, 4, 3 );
+ assertNotNull( model );
+
+ CapsuleInstance topInstance = model.createConnectedCapsule();
+ assertNotNull( topInstance );
+
+ assertBinding( model, topInstance, 0, 0, 0, 0 );
+ assertBinding( model, topInstance, 0, 1, 0, 1 );
+ assertBinding( model, topInstance, 0, 2, 1, 0 );
+ assertBinding( model, topInstance, 1, 0, 1, 1 );
+ assertBinding( model, topInstance, 1, 1, 2, 0 );
+ assertBinding( model, topInstance, 1, 2, 2, 1 );
+ assertBinding( model, topInstance, 2, 0, 3, 0 );
+ assertBinding( model, topInstance, 2, 1, 3, 1 );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp.test/src/org/eclipse/papyrusrt/codegen/cpp/test/CppCodeGenTestSuite.java b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/src/org/eclipse/papyrusrt/codegen/cpp/test/CppCodeGenTestSuite.java
new file mode 100644
index 0000000..5d051eb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp.test/src/org/eclipse/papyrusrt/codegen/cpp/test/CppCodeGenTestSuite.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.test;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith( Suite.class )
+@SuiteClasses(
+{
+ ConnectorCreationTest.class,
+} )
+public class CppCodeGenTestSuite { }
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/.classpath b/codegen/org.eclipse.papyrusrt.codegen.cpp/.classpath
new file mode 100644
index 0000000..248b4c5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/.project b/codegen/org.eclipse.papyrusrt.codegen.cpp/.project
new file mode 100644
index 0000000..8a5c8f3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.cpp</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.cpp/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.cpp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e22160f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT C++ Code Generator
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.cpp;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.emf.common,
+ org.eclipse.papyrus.codegen.base;bundle-version="1.0.2",
+ org.eclipse.papyrus.cpp.profile,
+ org.eclipse.papyrus.umlrt;bundle-version="1.0.1",
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.cpp.rts,
+ org.eclipse.papyrusrt.codegen.lang.cpp,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.papyrusrt.codegen.xtumlrt.trans,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrusrt.xtumlrt.umlrt.model,
+ org.eclipse.papyrusrt.xtumlrt.platform.cpp.model,
+ org.eclipse.uml2.types,
+ org.eclipse.uml2.uml;bundle-version="4.1.0",
+ org.eclipse.xtend.lib;bundle-version="2.7.2"
+Export-Package: org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.codegen.instance.model
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrusrt.codegen.cpp.CppCodeGenPlugin
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/about.html b/codegen/org.eclipse.papyrusrt.codegen.cpp/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/about.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/build.properties b/codegen/org.eclipse.papyrusrt.codegen.cpp/build.properties
new file mode 100644
index 0000000..700eef7
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/build.properties
@@ -0,0 +1,8 @@
+source.. = xtend-gen/,\
+ src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ schema/,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp/plugin.xml
new file mode 100644
index 0000000..1943b2c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/plugin.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension-point id="generator" name="C++ Code Generator" schema="schema/generator.exsd"/>
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.cpp/pom.xml
new file mode 100644
index 0000000..d299cfe
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.cpp</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/schema/generator.exsd b/codegen/org.eclipse.papyrusrt.codegen.cpp/schema/generator.exsd
new file mode 100644
index 0000000..2e3309f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/schema/generator.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrusrt.codegen.cpp" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.papyrusrt.codegen.cpp" id="generator" name="C++ Code Generator"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="generator" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="generator">
+ <complexType>
+ <attribute name="type" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator$Factory"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/AbstractCppGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/AbstractCppGenerator.java
new file mode 100644
index 0000000..01aa59d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/AbstractCppGenerator.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+
+public abstract class AbstractCppGenerator
+{
+ protected final CppCodePattern cpp;
+
+ protected AbstractCppGenerator( CppCodePattern cpp )
+ {
+ this.cpp = cpp;
+ }
+
+ /**
+ * Subclasses should override this implement to provide an appropriate label
+ * in the codegen results.
+ */
+ public String getLabel()
+ {
+ return getClass().getSimpleName();
+ }
+
+ public abstract boolean generate();
+
+ public static interface Factory<T extends NamedElement>
+ {
+ public AbstractCppGenerator create( CppCodePattern cpp, T t );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/ChangeTracker.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/ChangeTracker.java
new file mode 100644
index 0000000..5a3b4ba
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/ChangeTracker.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+* Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.codegen.base.codesync.ChangeObject;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator.GeneratorKey;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+
+public interface ChangeTracker
+{
+ public void prune( Map<GeneratorKey, AbstractCppGenerator> generators );
+ public void consumeChanges( Map<GeneratorKey, AbstractCppGenerator> generators );
+ public void addChanges( List<ChangeObject> changeList );
+ public void closeResource( Resource resource );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/ConnectorReporter.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/ConnectorReporter.java
new file mode 100644
index 0000000..1118611
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/ConnectorReporter.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.PortInstance;
+
+import org.eclipse.papyrusrt.codegen.cpp.ConnectorReporter;
+import org.eclipse.papyrusrt.xtumlrt.common.Connector;
+
+/**
+ * This utility class is used to report on connections that are allocated while
+ * generating the InstanceModel.
+ */
+public class ConnectorReporter
+{
+ private final ICapsuleInstance capsule;
+ private final Map<Connector, List<Connection>> connections = new LinkedHashMap<Connector, List<Connection>>();
+ private final List<ConnectorReporter> inners = new ArrayList<ConnectorReporter>();
+
+ public ConnectorReporter( ICapsuleInstance capsule )
+ {
+ this.capsule = capsule;
+ }
+
+ private static class Connection
+ {
+ public final PortInstance.FarEnd far0;
+ public final PortInstance.FarEnd far1;
+ public Connection( PortInstance.FarEnd far0, PortInstance.FarEnd far1 )
+ {
+ this.far0 = far0;
+ this.far1 = far1;
+ }
+ }
+
+ public void record( Connector conn, PortInstance.FarEnd far0, PortInstance.FarEnd far1 )
+ {
+ List<Connection> conns = connections.get( conn );
+ if( conns == null )
+ {
+ conns = new ArrayList<ConnectorReporter.Connection>();
+ connections.put( conn, conns );
+ }
+
+ conns.add( new Connection( far0, far1 ) );
+ }
+
+ public ConnectorReporter createInner( ICapsuleInstance sub )
+ {
+ ConnectorReporter inner = new ConnectorReporter( sub );
+ inners.add( inner );
+ return inner;
+ }
+
+ public void log( PrintStream stm )
+ {
+ for( Map.Entry<Connector, List<Connection>> entry : connections.entrySet() )
+ {
+ stm.append( capsule.getQualifiedName( '.' ) );
+ stm.append( '.' );
+ stm.append( entry.getKey().getName() );
+ stm.append( '\n' );
+ for( Connection conn : entry.getValue() )
+ {
+ stm.append( " " );
+ stm.append( conn.far0.toString() );
+ stm.append( " <-> ");
+ stm.append( conn.far1.toString() );
+ stm.append( '\n' );
+ }
+ }
+
+ for( ConnectorReporter inner : inners )
+ inner.log( stm );
+ }
+
+ public void log( File outFolder )
+ {
+ PrintStream stm = null;
+ try
+ {
+ File file = new File( outFolder, capsule.getType().getName() + "-connections.log" );
+ stm = new PrintStream( new BufferedOutputStream( new FileOutputStream( file ) ) );
+ log( stm );
+ }
+ catch( IOException e ) { }
+ finally
+ {
+ if( stm != null )
+ stm.close();
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodeGenPlugin.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodeGenPlugin.java
new file mode 100644
index 0000000..b8d74b6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodeGenPlugin.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import org.eclipse.core.runtime.Plugin;
+
+public class CppCodeGenPlugin extends Plugin
+{
+ public static final String ID = "org.eclipse.papyrusrt.codegen.cpp";
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodeGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodeGenerator.java
new file mode 100644
index 0000000..86e2838
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodeGenerator.java
@@ -0,0 +1,323 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtCppProfileTranslator;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtModelTranslator;
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.Entity;
+import org.eclipse.papyrusrt.xtumlrt.common.Model;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+import org.eclipse.papyrusrt.xtumlrt.common.Package;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine;
+import org.eclipse.papyrusrt.xtumlrt.common.StructType;
+import org.eclipse.papyrusrt.xtumlrt.common.util.CommonSwitch;
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.CppInclude;
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.GenerationProperties;
+import org.eclipse.papyrusrt.xtumlrt.platformmodel.PlatformElement;
+
+/**
+ * The top-level interface to the CodeGenerator. This will be used by the UI
+ * action to generate code for a specific set of model elements.
+ * <p>
+ * The generator is responsible for examining the input model and invoking the
+ * generators needed to create code for the model elements.
+ */
+public class CppCodeGenerator
+{
+ private final CppCodePattern cpp;
+ private final List<EObject> targets = new ArrayList<EObject>();
+ private String top;
+ private ChangeTracker changeTracker;
+
+ /**
+ * This works with the org.eclipse.papyrusrt.codegen.cpp.generator extension
+ * point to provide a generator for StateMachine.
+ */
+ public static enum Kind
+ {
+ BasicClass("ClassGenerator"),
+ Protocol("ProtocolGenerator"),
+ Capsule("CapsuleGenerator "),
+ StateMachine("StateMachineGenerator"),
+ EmptyStateMachine("EmptyStateMachineGenerator"),
+ Structural("StructuralGenerator");
+
+ public final String id;
+
+ private Kind( String id )
+ {
+ this.id = id;
+ }
+ }
+
+ public CppCodeGenerator( CppCodePattern cpp,
+ UML2xtumlrtModelTranslator translator )
+ {
+ this.cpp = cpp;
+ this.changeTracker = new UML2ChangeTracker( translator, top );
+ UML2ChangeTracker.setActiveInstance( (UML2ChangeTracker)this.changeTracker );
+ }
+
+ public CppCodeGenerator( CppCodePattern cpp,
+ UML2xtumlrtModelTranslator translator,
+ String top )
+ {
+ this( cpp, translator );
+ this.top = top;
+ }
+
+ public CppCodeGenerator( CppCodePattern cpp,
+ UML2xtumlrtModelTranslator translator,
+ String top, EObject target )
+ {
+ this( cpp, translator, top );
+ this.targets.add( target );
+ }
+
+ public CppCodeGenerator( CppCodePattern cpp,
+ UML2xtumlrtModelTranslator translator,
+ String top,
+ List<EObject> targets )
+ {
+ this( cpp, translator, top );
+ this.targets.addAll( targets );
+ }
+
+ public ChangeTracker getChangeTracker()
+ {
+ return this.changeTracker;
+ }
+
+ public void setTop( String top )
+ {
+ this.top = top;
+ }
+
+ public void setTarget( EObject target )
+ {
+ this.targets.add( target );
+ }
+
+ public void setTargets( List<EObject> targets )
+ {
+ this.targets.addAll( targets );
+ }
+
+ protected static class GeneratorKey
+ {
+ public final Kind kind;
+ public final EObject object;
+
+ public GeneratorKey( Kind kind, EObject object )
+ {
+ this.kind = kind;
+ this.object = object;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return kind.hashCode() ^ object.hashCode();
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if (!(obj instanceof GeneratorKey)) return false;
+
+ GeneratorKey other = (GeneratorKey) obj;
+ return kind == other.kind && object.equals( other.object );
+ }
+ }
+
+ public IStatus generate()
+ {
+ long start = System.currentTimeMillis();
+ MultiStatus status = new MultiStatus( CodeGenPlugin.ID, IStatus.OK,
+ "UML-RT Code Generation", null );
+
+ Map<GeneratorKey, AbstractCppGenerator> generators = new LinkedHashMap<GeneratorKey, AbstractCppGenerator>();
+ Collector collector = new Collector( generators );
+ for (EObject target : targets)
+ {
+ if (!toBeGenerated( target ))
+ continue;
+ if (!collector.doSwitch( target ))
+ status.add( CodeGenPlugin.error( "Error while examining model changes" ) );
+ }
+ status.add( CodeGenPlugin.info( "Examined model changes "
+ + (System.currentTimeMillis() - start) + "ms" ) );
+
+ start = System.currentTimeMillis();
+ changeTracker.prune( generators );
+ status.add( CodeGenPlugin.info( "Prune unchanged elements "
+ + (System.currentTimeMillis() - start) + "ms" ) );
+
+ for (AbstractCppGenerator generator : generators.values())
+ {
+ try
+ {
+ start = System.currentTimeMillis();
+ if (generator.generate())
+ status.add( CodeGenPlugin.info( generator.getLabel() + ' '
+ + (System.currentTimeMillis() - start) + "ms" ) );
+ else status.add( CodeGenPlugin.error( "Error while generating "
+ + generator.getLabel() ) );
+ }
+ catch (Exception e)
+ {
+ status.add( CodeGenPlugin.error( e ) );
+ }
+ }
+
+ start = System.currentTimeMillis();
+ changeTracker.consumeChanges( generators );
+ status.add( CodeGenPlugin.info( "Consume changes to elements "
+ + (System.currentTimeMillis() - start) + "ms" ) );
+
+ return status;
+ }
+
+ private boolean toBeGenerated( EObject target )
+ {
+ if (!(target instanceof NamedElement)) return false;
+ NamedElement element = (NamedElement)target;
+ GenerationProperties genProperties = UML2xtumlrtCppProfileTranslator.getGenerationProperties( element );
+ if (genProperties == null) return true;
+ return genProperties.isGenerate();
+ }
+
+ private class Collector extends CommonSwitch<Boolean>
+ {
+ private final GeneratorManager genManager = GeneratorManager.getInstance();
+ public final Map<GeneratorKey, AbstractCppGenerator> generators;
+
+ public Collector( Map<GeneratorKey, AbstractCppGenerator> generators )
+ {
+ this.generators = generators;
+ }
+
+ /**
+ * Return true if a generator was created and inserted and false
+ * otherwise.
+ */
+ private <T extends NamedElement> boolean createGenerator( Kind kind, T object )
+ {
+ GeneratorKey key = new GeneratorKey( kind, object );
+ if (generators.get( key ) != null) return false;
+
+ AbstractCppGenerator generator = genManager.getGenerator( kind, cpp, object );
+ if (generator == null) return false;
+
+ generators.put( key, generator );
+ return true;
+ }
+
+ // Unhandled kinds of elements are ignored.
+ @Override
+ public Boolean defaultCase( EObject object )
+ {
+ return true;
+ }
+
+ @Override
+ public Boolean caseModel( Model model )
+ {
+ if (!toBeGenerated( model )) return true;
+ for (Entity element : model.getTopEntities())
+ doSwitch( element );
+ for (Protocol element : model.getTopProtocols())
+ doSwitch( element );
+ for( Package element : model.getRootPackages() )
+ doSwitch( element );
+
+ return true;
+ }
+
+ @Override
+ public Boolean casePackage( Package packge )
+ {
+ if (!toBeGenerated( packge )) return true;
+ for (Entity element : packge.getEntities())
+ doSwitch( element );
+ for (Protocol element : packge.getProtocols())
+ doSwitch( element );
+ for( Package element : packge.getPackages() )
+ doSwitch( element );
+
+ return true;
+ }
+
+ @Override
+ public Boolean caseProtocol( Protocol protocol )
+ {
+ if (!toBeGenerated( protocol )) return true;
+ // If this is a <<ProtocolContainer>> then create a Protocol
+ // generator for it and
+ // examine all capsules, select the ones that have a port that uses
+ // this protocol.
+ // TODO: perhaps we should generate also all basic classes used by
+ // the protocol?
+ if (!UMLRTRuntime.isSystemProtocol( protocol )
+ && createGenerator( Kind.Protocol, protocol ))
+ {
+ Model model = XTUMLRTUtil.getModel( protocol );
+ if (model == null) return true;
+ for (Capsule capsule : XTUMLRTUtil.getAllCapsules( model ))
+ {
+ for (Port port : XTUMLRTUtil.getAllRTPorts( capsule ))
+ if (port.getType() == protocol) doSwitch( capsule );
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public Boolean caseStructType( StructType struct )
+ {
+ if (!toBeGenerated( struct )) return true;
+ createGenerator( Kind.BasicClass, struct );
+ return true;
+ }
+
+ @Override
+ public Boolean caseCapsule( Capsule capsule )
+ {
+ if (!toBeGenerated( capsule )) return true;
+ createGenerator( Kind.Capsule, capsule );
+
+ StateMachine behaviour = capsule.getBehaviour();
+ if( behaviour != null && toBeGenerated( behaviour ) )
+ createGenerator( Kind.StateMachine, behaviour );
+ else
+ createGenerator( Kind.EmptyStateMachine, capsule );
+
+ // TODO Until there is a way to allocate capsules to threads, we treat the
+ // CapsuleType called "Top" specially.
+ if( top.equals( capsule.getName() ) )
+ createGenerator( Kind.Structural, capsule );
+
+ return true;
+ }
+ };
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java
new file mode 100644
index 0000000..b9d8adb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppCodePattern.java
@@ -0,0 +1,493 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyBlob;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtCppProfileTranslator;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.Signal;
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.CppInclude;
+
+/**
+ * The Code Pattern implements the top-level of the documented code pattern. This is
+ * used for sharing language model elements between different parts of the generator's
+ * implementation.
+ */
+public class CppCodePattern
+{
+ private File outputFolder;
+ private final Map<Key, ElementList> elementLists = new HashMap<CppCodePattern.Key, ElementList>();
+ private final Map<Key, CppClass> cppClasses = new HashMap<CppCodePattern.Key, CppClass>();
+ private final Map<Key, Variable> variables = new HashMap<CppCodePattern.Key, Variable>();
+ private final Map<Key, CppEnum> cppEnums = new HashMap<CppCodePattern.Key, CppEnum>();
+ private final Map<Key, Enumerator> enumerators = new HashMap<CppCodePattern.Key, Enumerator>();
+ private final Map<Key, Constructor> constructors = new HashMap<CppCodePattern.Key, Constructor>();
+ private final List<ElementList> outputs = new ArrayList<ElementList>();
+
+ /**
+ * Describes the meaning of each type of "file" that can be produced by the generator.
+ */
+ public static enum Output
+ {
+ CapsuleClass,
+ ProtocolClass,
+ BasicClass,
+ ProtocolBaseRole,
+ ProtocolConjugateRole,
+ SignalId,
+ OutSignals,
+ InSignals,
+ PortId,
+ BorderPortId,
+ InternalPortId,
+ PartId,
+ Deployment,
+ UMLRTCapsuleClass;
+ }
+
+ public CppCodePattern()
+ {
+ }
+
+ public File getOutputFolder()
+ {
+ return this.outputFolder;
+ }
+
+ public void setOutputFolder( File outputFolder )
+ {
+ this.outputFolder = outputFolder;
+ }
+
+ /**
+ * Mark the given element list as writable. Files that are not marked as writable
+ * can be referenced but output should not be produced.
+ */
+ public boolean markWritable( ElementList elements )
+ {
+ if( ! elementLists.containsValue( elements ) )
+ return false;
+
+ outputs.add( elements );
+ return true;
+ }
+
+ public File getControllerAllocations( NamedElement topCapsule )
+ {
+ File allocationsFile = new File( outputFolder.getParentFile(), topCapsule.getName() + ".controllers" );
+ return allocationsFile.exists() ? allocationsFile : null;
+ }
+
+ public ElementList getElementList( Output output, NamedElement element )
+ {
+ Key k = new Key( output, element, null );
+ switch( output )
+ {
+ case Deployment:
+ ElementList elementList = elementLists.get( k );
+ if( elementList == null )
+ {
+ elementList = new ElementList( new FileName( "Controllers" ) );
+ elementLists.put( k, elementList );
+ }
+ return elementList;
+ default:
+ return getElementList( k, element );
+ }
+ }
+
+ public CppClass getWritableCppClass( Output output, NamedElement element )
+ {
+ CppClass cls = getCppClass( output, element );
+ HeaderFile header = cls.getDefinedIn();
+ if( header instanceof ElementList )
+ markWritable( (ElementList)header );
+ return cls;
+ }
+
+ public CppClass getCppClass( Output output, NamedElement element )
+ {
+ Key k = new Key( output, element, null );
+ CppClass cls = cppClasses.get( k );
+ if( cls == null )
+ {
+ switch( output )
+ {
+ case CapsuleClass:
+ case ProtocolClass:
+ case BasicClass:
+ cls = new CppClass( getName( output, element ) );
+ ElementList elements = getElementList( k, element );
+ elements.addElement( cls );
+ apply_C_Cpp_Include_Stereotypes( elements, element );
+ break;
+ case OutSignals:
+ cls = new CppClass( "OutSignals" );
+ getCppClass( Output.ProtocolClass, element ).addMember( CppClass.Visibility.PUBLIC, cls );
+ break;
+ case InSignals:
+ cls = new CppClass( "InSignals" );
+ getCppClass( Output.ProtocolClass, element ).addMember( CppClass.Visibility.PUBLIC, cls );
+ break;
+ case ProtocolBaseRole:
+ case ProtocolConjugateRole:
+ // TODO fix ordering in the language model, until then force the protocol class to
+ // be generated before the role.
+ getCppClass( Output.ProtocolClass, element );
+ cls = new CppClass( getName( output, element ) );
+ getElementList( new Key( Output.ProtocolClass, element, null ), element ).addElement( cls );
+ break;
+ default:
+ throw new RuntimeException( "code pattern does not contain a CppClass for " + output.toString() );
+ }
+
+ cppClasses.put( k, cls );
+ }
+
+ return cls;
+ }
+
+ public Constructor getConstructor( Output output, NamedElement element )
+ {
+ Key k = new Key( output, element, null );
+ Constructor ctor = constructors.get( k );
+ if( ctor == null )
+ {
+ switch( output )
+ {
+ case CapsuleClass:
+ case ProtocolBaseRole:
+ case ProtocolConjugateRole:
+ ctor = new Constructor();
+ getCppClass( output, element ).addMember( CppClass.Visibility.PUBLIC, ctor );
+ break;
+ default:
+ throw new RuntimeException( "code pattern does not contain a Constructor for " + output.toString() );
+ }
+
+ constructors.put( k, ctor );
+ }
+
+ return ctor;
+ }
+
+ public Variable getVariable( Output output, NamedElement element )
+ {
+ Key k = new Key( output, element, null );
+ Variable var = variables.get( k );
+ if( var == null )
+ {
+ switch( output )
+ {
+ case UMLRTCapsuleClass:
+ var = new Variable( LinkageSpec.EXTERN, UMLRTRuntime.UMLRTCapsuleClass.getType().const_(), getName( output, element ) );
+ break;
+ default:
+ throw new RuntimeException( "code pattern does not contain a Variable for " + output.toString() );
+ }
+
+ variables.put( k, var );
+ }
+
+ return var;
+ }
+
+ public CppEnum getCppEnum( Output output, NamedElement element )
+ {
+ Key k = new Key( output, element, null );
+ CppEnum enm = cppEnums.get( k );
+ if( enm == null )
+ {
+ Output clsKind = null;
+ String enumName = null;
+ Expression firstLiteral = null;
+ switch( output )
+ {
+ case SignalId:
+ clsKind = Output.ProtocolClass;
+ enumName = "SignalId";
+ firstLiteral = UMLRTRuntime.UMLRTSignal.FIRST_PROTOCOL_SIGNAL_ID();
+ break;
+ case PortId:
+ clsKind = Output.CapsuleClass;
+ enumName = "PortId";
+ break;
+ case PartId:
+ clsKind = Output.CapsuleClass;
+ enumName = "PartId";
+ break;
+ case BorderPortId:
+ clsKind = Output.CapsuleClass;
+ enumName = "BorderPortId";
+ break;
+ case InternalPortId:
+ clsKind = Output.CapsuleClass;
+ enumName = "InternalPortId";
+ break;
+ default:
+ throw new RuntimeException( "code pattern does not contain a CppEnum for " + output.toString() );
+ }
+
+ CppClass cls = getCppClass( clsKind, element );
+ enm = new CppEnum( cls, enumName, firstLiteral );
+ cls.addMember( CppClass.Visibility.PUBLIC, enm );
+
+ cppEnums.put( k, enm );
+ }
+
+ return enm;
+ }
+
+ public Enumerator getEnumerator( Output output, NamedElement element, NamedElement context )
+ {
+ Key k = new Key( output, element, context );
+ Enumerator enumerator = enumerators.get( k );
+ if( enumerator == null )
+ {
+ switch( output )
+ {
+ case SignalId:
+ {
+ if( ! ( element instanceof Signal ) )
+ throw new RuntimeException( "code pattern requires Signal for " + output.toString() + " but got " + element.getClass().getCanonicalName() );
+
+ if( ! ( context instanceof NamedElement ) )
+ throw new RuntimeException( "code pattern requires NamedElement as owner for " + output.toString() + " but got " + context.getClass().getCanonicalName() );
+ NamedElement owner = context;
+ enumerator = getCppEnum( output, owner ).add( getName( output, element ) );
+ break;
+ }
+ case PortId:
+ case PartId:
+ case BorderPortId:
+ case InternalPortId:
+ {
+ if( ! ( context instanceof NamedElement ) )
+ throw new RuntimeException( "code pattern requires NamedElement as owner for " + output.toString() + " but got " + context.getClass().getCanonicalName() );
+ NamedElement owner = context;
+ enumerator = getCppEnum( output, owner ).add( getName( output, element ) );
+ break;
+ }
+ default:
+ throw new RuntimeException( "code pattern does not contain an Enumerator for " + output.toString() );
+ }
+
+ enumerators.put( k, enumerator );
+ }
+
+ return enumerator;
+ }
+
+ public Expression getEnumeratorAccess( Output output, NamedElement element, NamedElement context )
+ {
+ CppClass cls = null;
+ switch( output )
+ {
+ case SignalId:
+ {
+ if( ! ( element instanceof Signal ) )
+ throw new RuntimeException( "code pattern requires Signal for " + output.toString() + " but got " + element.getClass().getCanonicalName() );
+
+ Signal signal = (Signal) element;
+ if( context == null)
+ {
+ Protocol protocol = (Protocol) XTUMLRTUtil.getOwner( signal );
+ if( UMLRTRuntime.isSystemProtocol( protocol ) )
+ return UMLRTRuntime.getSystemProtocolSignalAccess( signal );
+ context = protocol;
+ }
+ cls = getCppClass( Output.ProtocolClass, context );
+ break;
+ }
+ case PartId:
+ {
+ if( ! ( element instanceof CapsulePart ) )
+ throw new RuntimeException( "code pattern requires Property for " + output.toString() + " but got " + element.getClass().getCanonicalName() );
+
+ if( context == null )
+ {
+ CapsulePart part = (CapsulePart)element;
+ NamedElement capsule = XTUMLRTUtil.getOwner( part );
+ context = capsule;
+ }
+ cls = getCppClass( Output.CapsuleClass, context );
+ break;
+ }
+ case PortId:
+ case BorderPortId:
+ case InternalPortId:
+ {
+ if( ! ( element instanceof Port ) )
+ throw new RuntimeException( "code pattern requires Port for " + output.toString() + " but got " + element.getClass().getCanonicalName() );
+
+ if( context == null )
+ {
+ Port port = (Port)element;
+ NamedElement capsule = XTUMLRTUtil.getOwner( port );
+ context = capsule;
+ }
+ cls = getCppClass( Output.CapsuleClass, context );
+ break;
+ }
+ default:
+ throw new RuntimeException( "no enumerator access expression defined for " + output );
+ }
+
+ Enumerator enumerator = getEnumerator( output, element, context );
+ return new MemberAccess( cls, enumerator );
+ }
+
+ private String getName( Output output, NamedElement element )
+ {
+ switch( output )
+ {
+ case CapsuleClass:
+ return "Capsule_" + element.getName();
+ case ProtocolBaseRole:
+ return element.getName() + "_baserole";
+ case ProtocolConjugateRole:
+ return element.getName() + "_conjrole";
+ case SignalId:
+ return "signal_" + element.getName();
+ case PortId:
+ return "port_" + element.getName();
+ case BorderPortId:
+ return "borderport_" + element.getName();
+ case InternalPortId:
+ return "internalport_" + element.getName();
+ case PartId:
+ return "part_" + element.getName();
+ default:
+ return element.getName();
+ }
+ }
+
+ private ElementList getElementList( Key k, NamedElement element )
+ {
+ ElementList elementList = elementLists.get( k );
+ if( elementList == null )
+ {
+ switch( k.output )
+ {
+ case UMLRTCapsuleClass:
+ return getElementList( Output.CapsuleClass, element );
+ default:
+ elementList = new ElementList( new FileName( element.getName() ) );
+ break;
+ }
+ elementLists.put( k, elementList );
+ }
+
+ return elementList;
+ }
+
+ private static class Key
+ {
+ public final Output output;
+ public final NamedElement element;
+ public final NamedElement context;
+ public Key( Output output, NamedElement element, NamedElement context )
+ {
+ this.output = output;
+ this.element = element;
+ this.context = context;
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if( ! ( obj instanceof Key ) )
+ return false;
+ Key other = (Key)obj;
+ if (context == null)
+ return output == other.output
+ && element.equals( other.element )
+ && other.context == null;
+ return output == other.output
+ && element.equals( other.element )
+ && context.equals( other.context );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return output.ordinal() ^ element.hashCode();
+ }
+ }
+
+ // TODO Accessors for common parts of the top-level of the code pattern. E.g., the
+ // SignalId is needed by several generators; there should be an accessor here.
+
+ public boolean write( )
+ {
+ String baseFolder = outputFolder.getAbsolutePath();
+
+ boolean ret = true;
+ for( ElementList output : outputs )
+ {
+ CppWriter out = CppWriter.create( baseFolder, output );
+ try
+ {
+ if( ! output.write( out ) )
+ {
+ ret = false;
+ System.err.println( "Failure while writing '" + output.getName().getAbsolutePath() + "' to disk" );
+ }
+ }
+ finally
+ {
+ out.close();
+ }
+ }
+
+ // Generate makefile
+ new CppMakefileGenerator().generate(outputFolder.getAbsolutePath() + "/Makefile");
+
+ return ret;
+ }
+
+ private void apply_C_Cpp_Include_Stereotypes( ElementList elements, NamedElement element )
+ {
+ CppInclude include = UML2xtumlrtCppProfileTranslator.getCppInclude( element );
+ if( include == null )
+ return;
+
+ String text = include.getHeader();
+ if( text != null
+ && ! text.trim().isEmpty() )
+ elements.addDeclDependency( new DependencyBlob( text ) );
+
+ text = include.getBody();
+ if( text != null
+ && ! text.trim().isEmpty() )
+ elements.addDefnDependency( new DependencyBlob( text ) );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppMakefileGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppMakefileGenerator.xtend
new file mode 100644
index 0000000..65aa4b3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppMakefileGenerator.xtend
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp
+
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTSUtil
+import java.io.BufferedWriter
+import java.io.File
+import java.io.FileWriter
+
+class CppMakefileGenerator {
+
+ def generate(String path) {
+
+ val file = new File(path);
+
+ val writer = new BufferedWriter(new FileWriter(file));
+ writer.write(doGenerate(UMLRTSUtil.getRTSRootPath).toString)
+ writer.close
+ }
+
+ def private doGenerate(String rtsPath) {
+ '''################################################
+# Makefile
+################################################
+
+# Location of RTS root.
+UMLRTS_ROOT ?= «IF rtsPath == ""»./umlrt.rts«ELSE»«rtsPath»«ENDIF»
+
+# Compiler
+# This can be overridden while invoking make with CC=xxx.
+CC=g++
+
+INCLUDES+=\
+ $(UMLRTS_ROOT)/include
+
+CPPFLAGS+= $(foreach d, $(DEFINES), -D$d) $(foreach i, $(INCLUDES), -I$i)
+
+# This can be overridden while invoking make with DEBUG=1
+DEBUG=0
+
+# Add debugging compile flags
+ifeq ($(DEBUG),1)
+CXXFLAGS+= -g -O0
+endif
+
+SRCS = $(wildcard *.cc)
+OBJS = $(SRCS:.cc=.o)
+
+MAIN = main
+
+LDPATH+=-L$(UMLRTS_ROOT)/lib
+
+LIBS+=-lrts -lpthread -lrt
+
+all: $(MAIN)
+
+$(MAIN): $(OBJS) $(UMLRTS_ROOT)/lib/librts.a
+ $(CC) $(CXXFLAGS) $(CPPFLAGS) -o $(MAIN) $(OBJS) $(LDPATH) $(LIBS)
+
+clean :
+ $(RM) *.o *~ $(MAIN)
+
+info:
+ @echo SRCS = $(SRCS)
+ @echo OBJS = $(OBJS)
+ @echo CMD = $(CC) $(CXXFLAGS) $(CPPFLAGS) -o $(MAIN) $(OBJS) $(LDPATH) $(LIBS)
+'''
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppProjectGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppProjectGenerator.xtend
new file mode 100644
index 0000000..a1ad3b8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/CppProjectGenerator.xtend
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp
+
+import java.io.BufferedWriter
+import java.io.File
+import java.io.FileWriter
+
+class CppProjectGenerator {
+
+ def boolean generate(String path, String projectName) {
+
+ val project = new File(new File(path), projectName)
+ if(project.exists){
+ if(!project.isDirectory){
+ return false;
+ }
+ }else{
+ val result = project.mkdirs()
+ if(!result){
+ // failed to create directory
+ return result
+ }
+ }
+
+ // generate .project metadata
+ val projectFile = new File(project, ".project")
+ if(!projectFile.exists){
+ val writer = new BufferedWriter(new FileWriter(projectFile));
+ writer.write(generateProjectMetadata(projectName).toString)
+ writer.close
+ }
+ // generate .cproject metadata
+ val cprojectFile = new File(project, ".cproject")
+ if(!cprojectFile.exists){
+ val writer = new BufferedWriter(new FileWriter(cprojectFile));
+ writer.write(generateCProjectMetadata(projectName).toString)
+ writer.close
+ }
+
+ return true
+ }
+
+ def private generateProjectMetadata(String projectName){
+ '''<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>«projectName»</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+</projectDescription>
+'''
+ }
+
+ def private generateCProjectMetadata(String projectName){
+ '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="cdt.managedbuild.toolchain.gnu.base.4997491962">
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="${ProjName}" buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.4997491961" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
+ <folderInfo id="cdt.managedbuild.toolchain.gnu.base.8320418219" name="/" resourcePath="">
+ <toolChain id="cdt.managedbuild.toolchain.gnu.base.9623027664" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1127549341" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
+ <builder id="cdt.managedbuild.target.gnu.builder.base.6925958497" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.4527526645" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1689764086" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1003716063" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.base.8030371610" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.793805426" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.base.2851231432" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1578285699" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
+ <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.540722823" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="cdt.managedbuild.tool.gnu.assembler.base.1716199300" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
+ <inputType id="cdt.managedbuild.tool.gnu.assembler.input.345505909" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.4997491961" moduleId="org.eclipse.cdt.core.settings" name="Default">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="«projectName».cdt.1970989858" name="«projectName»"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
+ <buildTargets>
+ <target name="all" path="src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+ <buildCommand>make</buildCommand>
+ <buildArguments/>
+ <buildTarget>all</buildTarget>
+ <stopOnError>true</stopOnError>
+ <useDefaultCommand>true</useDefaultCommand>
+ <runAllBuilders>true</runAllBuilders>
+ </target>
+ <target name="clean" path="src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+ <buildCommand>make</buildCommand>
+ <buildArguments/>
+ <buildTarget>clean</buildTarget>
+ <stopOnError>true</stopOnError>
+ <useDefaultCommand>true</useDefaultCommand>
+ <runAllBuilders>true</runAllBuilders>
+ </target>
+ <target name="info" path="src" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+ <buildCommand>make</buildCommand>
+ <buildArguments/>
+ <buildTarget>info</buildTarget>
+ <stopOnError>true</stopOnError>
+ <useDefaultCommand>true</useDefaultCommand>
+ <runAllBuilders>true</runAllBuilders>
+ </target>
+ </buildTargets>
+ </storageModule>
+</cproject>
+'''
+ }
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/GeneratorManager.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/GeneratorManager.java
new file mode 100644
index 0000000..b912a6a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/GeneratorManager.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.StructType;
+import org.eclipse.papyrusrt.xtumlrt.common.Type;
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPassiveClass;
+
+import org.eclipse.papyrusrt.codegen.cpp.internal.BasicClassGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.internal.CapsuleGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.internal.EclipseGeneratorManager;
+import org.eclipse.papyrusrt.codegen.cpp.internal.EmptyStateMachineGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.internal.ProtocolGenerator;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.GeneratorManager;
+
+public class GeneratorManager
+{
+ private static GeneratorManager INSTANCE;
+
+ public static void setInstance( GeneratorManager instance )
+ {
+ if( INSTANCE != null )
+ throw new RuntimeException( "Invalid attempt to replace GeneratorManager" );
+ INSTANCE = instance;
+ }
+
+ public static GeneratorManager getInstance()
+ {
+ if( INSTANCE == null )
+ INSTANCE = new EclipseGeneratorManager();
+ return INSTANCE;
+ }
+
+ public AbstractCppGenerator getGenerator( CppCodeGenerator.Kind kind, CppCodePattern cpp, NamedElement element )
+ {
+ // Default behaviour is to fall-back to built in defaults where possible.
+ switch( kind )
+ {
+ case BasicClass:
+ if( element instanceof RTPassiveClass || element instanceof StructType )
+ return new BasicClassGenerator( cpp, (Type)element );
+ break;
+ case Protocol:
+ if( element instanceof Protocol )
+ return new ProtocolGenerator( cpp, (Protocol)element );
+ break;
+ case Capsule:
+ if( element instanceof Capsule )
+ return new CapsuleGenerator( cpp, (Capsule)element );
+ break;
+ case EmptyStateMachine:
+ return new EmptyStateMachineGenerator( cpp, element );
+ default:
+ break;
+ }
+
+ CodeGenPlugin.error( "ignoring request for unknown generator " + kind.id );
+ throw new RuntimeException( "cannot find generator id " + kind.id );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/TypesUtil.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/TypesUtil.java
new file mode 100644
index 0000000..937db08
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/TypesUtil.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtCppProfileTranslator;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.StandardLibrary;
+import org.eclipse.papyrusrt.codegen.utils.QualifiedNames;
+import org.eclipse.papyrusrt.xtumlrt.platformmodel.PlatformElement;
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.CppPtr;
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPassiveClass;
+
+public class TypesUtil
+{
+ public static Type createCppType( CppCodePattern cpp, NamedElement element, org.eclipse.papyrusrt.xtumlrt.common.Type modelType )
+ {
+ Type type = createType( cpp, modelType );
+ if( type == null )
+ throw new RuntimeException( "unable to create C++ type for " + QualifiedNames.fullName(element) );
+
+ // TODO what other C_Cpp stereotypes could be applied?
+
+ if (element.getAnnotations() == null)
+ return type;
+ for( PlatformElement annotation : UML2xtumlrtCppProfileTranslator.getPlatformElements(element) )
+ {
+ if (annotation instanceof CppPtr)
+ type = type.ptr();
+ }
+
+ return type;
+ }
+
+ private static Type createType( CppCodePattern cpp, org.eclipse.papyrusrt.xtumlrt.common.Type modelType )
+ {
+ // If this is a system-defined type then do not look at the model.
+ Type type = UMLRTRuntime.getSystemType( modelType );
+ if( type != null )
+ return type;
+
+ // Otherwise find an appropriate type using the content of the model.
+ if( modelType instanceof org.eclipse.papyrusrt.xtumlrt.common.PrimitiveType )
+ return createType( (org.eclipse.papyrusrt.xtumlrt.common.PrimitiveType)modelType );
+ if( modelType instanceof org.eclipse.papyrusrt.xtumlrt.common.StructType )
+ return createType( cpp, (org.eclipse.papyrusrt.xtumlrt.common.StructType)modelType );
+ if( modelType instanceof RTPassiveClass )
+ return createType( cpp, (RTPassiveClass)modelType );
+ return PrimitiveType.VOID.ptr();
+ }
+
+ private static Type createType( CppCodePattern cpp, org.eclipse.papyrusrt.xtumlrt.common.StructType type )
+ {
+ CppClass cls = cpp.getCppClass( CppCodePattern.Output.BasicClass, type );
+ cls.setKind( CppClass.Kind.STRUCT );
+ return cls.getType();
+ }
+
+ private static Type createType( CppCodePattern cpp, RTPassiveClass cls )
+ {
+ return cpp.getCppClass( CppCodePattern.Output.BasicClass, cls ).getType();
+ }
+
+ private static Type createBuiltInType( String name )
+ {
+ if( "char".equals( name ) ) return PrimitiveType.CHAR;
+ if( "double".equals( name ) ) return PrimitiveType.DOUBLE;
+ if( "float".equals( name ) ) return PrimitiveType.FLOAT;
+ if( "int".equals( name ) ) return PrimitiveType.INT;
+ if( "void".equals( name ) ) return PrimitiveType.VOID;
+ if( "long".equals( name ) ) return PrimitiveType.LONG;
+ if( "long double".equals( name ) ) return PrimitiveType.LONGDOUBLE;
+ if( "short".equals( name ) ) return PrimitiveType.SHORT;
+ if( "unsigned int".equals( name ) ) return PrimitiveType.UINT;
+ if( "unsigned short".equals( name ) ) return PrimitiveType.USHORT;
+ if( "unsigned char".equals( name ) ) return PrimitiveType.UCHAR;
+ if( "unsigned long".equals( name ) ) return PrimitiveType.ULONG;
+ if( "bool".equals( name ) ) return PrimitiveType.BOOL;
+ return null;
+ }
+
+ private static Type createUMLType( String name )
+ {
+ if( "Boolean".equals( name ) ) return PrimitiveType.BOOL;
+ if( "Integer".equals( name ) ) return PrimitiveType.INT;
+ if( "Real".equals( name ) ) return PrimitiveType.DOUBLE;
+ if( "String".equals( name ) ) return PrimitiveType.CHAR.ptr();
+ if( "UnlimitedNatural".equals( name ) ) return PrimitiveType.ULONGLONG;
+ return null;
+ }
+
+ private static Type createAnsiCLibraryType( String name )
+ {
+ if( "int8_t".equals( name ) ) return StandardLibrary.int8_t;
+ if( "int16_t".equals( name ) ) return StandardLibrary.int16_t;
+ if( "int32_t".equals( name ) ) return StandardLibrary.int32_t;
+ if( "int64_t".equals( name ) ) return StandardLibrary.int64_t;
+ if( "uint8_t".equals( name ) ) return StandardLibrary.uint8_t;
+ if( "uint16_t".equals( name ) ) return StandardLibrary.uint16_t;
+ if( "uint32_t".equals( name ) ) return StandardLibrary.uint32_t;
+ if( "uint64_t".equals( name ) ) return StandardLibrary.uint64_t;
+ if( "wchar_t".equals( name ) ) return StandardLibrary.wchar_t;
+ return null;
+ }
+
+ private static Type createType( org.eclipse.papyrusrt.xtumlrt.common.PrimitiveType xtumlrtType )
+ {
+ String name = xtumlrtType.getName();
+
+ Type type = createBuiltInType( name );
+ if( type != null )
+ return type;
+
+ type = createUMLType( name );
+ if( type != null )
+ return type;
+
+ type = createAnsiCLibraryType( name );
+ if( type != null )
+ return type;
+
+ return PrimitiveType.VOID.ptr();
+ }
+}
+
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/UML2ChangeTracker.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/UML2ChangeTracker.java
new file mode 100644
index 0000000..85e2259
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/UML2ChangeTracker.java
@@ -0,0 +1,360 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.logging.Level;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.codegen.base.codesync.ChangeObject;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator.GeneratorKey;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator.Kind;
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtModelTranslator;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine;
+import org.eclipse.uml2.uml.Behavior;
+import org.eclipse.uml2.uml.DataType;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.util.UMLSwitch;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+
+@SuppressWarnings( "deprecation" )
+public class UML2ChangeTracker implements ChangeTracker
+{
+ private static UML2ChangeTracker ACTIVE_INSTANCE = null;
+ private static final Map<Resource, Multimap<Kind, EObject>> alreadyGenerated = new HashMap<Resource, Multimap<Kind, EObject>>(); // HashMultimap.create();
+ private static final Map<Resource, Multimap<Kind, EObject>> changed = new HashMap<Resource, Multimap<Kind, EObject>>(); // HashMultimap.create();
+
+ private UML2xtumlrtModelTranslator translator;
+ private String top;
+
+ public UML2ChangeTracker( UML2xtumlrtModelTranslator translator )
+ {
+ this.translator = translator;
+ }
+
+ public UML2ChangeTracker( UML2xtumlrtModelTranslator translator, String top )
+ {
+ this.translator = translator;
+ this.top = top;
+ }
+
+ public void setTop( String top )
+ {
+ this.top = top;
+ }
+
+ public static void setActiveInstance( UML2ChangeTracker trackerInstance )
+ {
+ ACTIVE_INSTANCE = trackerInstance;
+ }
+
+ public static UML2ChangeTracker getActiveInstance()
+ {
+ return ACTIVE_INSTANCE;
+ }
+
+ @Override
+ public void prune( Map<GeneratorKey, AbstractCppGenerator> generators )
+ {
+ Iterator<Entry<GeneratorKey, AbstractCppGenerator>> iterator = generators
+ .entrySet().iterator();
+ while (iterator.hasNext())
+ {
+ Entry<GeneratorKey, AbstractCppGenerator> next = iterator.next();
+ GeneratorKey key = next.getKey();
+ EObject umlElement = translator.getSource( (NamedElement) key.object );
+
+ if (alreadyGeneratedContains( key.kind, umlElement )
+ && !changedContains( key.kind, umlElement ))
+ {
+ if (key.kind == Kind.Capsule)
+ {
+ boolean portWithChangedProtocol = false;
+ for (org.eclipse.uml2.uml.Port umlPort
+ : UMLRealTimeProfileUtil.getAllRTPorts( (org.eclipse.uml2.uml.Class) umlElement ))
+ {
+ org.eclipse.uml2.uml.Package protocol = UMLRealTimeProfileUtil.getProtocol( umlPort );
+ if (changedContains( Kind.Protocol, protocol ))
+ {
+ portWithChangedProtocol = true;
+ break;
+ }
+ }
+
+ if (!portWithChangedProtocol)
+ {
+ CodeGenPlugin.getLogger()
+ .log( Level.INFO,
+ "Pruning "
+ + ((org.eclipse.uml2.uml.NamedElement) umlElement)
+ .getQualifiedName()
+ + " from generation." );
+ iterator.remove();
+ }
+ else
+ {
+ addAlreadyGenerated( key.kind, umlElement );
+ }
+ }
+ else
+ {
+ CodeGenPlugin.getLogger()
+ .log( Level.INFO,
+ "Pruning "
+ + ((org.eclipse.uml2.uml.NamedElement) umlElement)
+ .getQualifiedName()
+ + " from generation." );
+ iterator.remove();
+ }
+ }
+ else
+ {
+ addAlreadyGenerated( key.kind, umlElement );
+ }
+ }
+ }
+
+ @Override
+ public void consumeChanges( Map<GeneratorKey, AbstractCppGenerator> generators )
+ {
+ for (GeneratorKey gk : generators.keySet())
+ {
+ EObject umlElement = translator.getSource( (NamedElement) gk.object );
+ removeChanged( gk.kind, umlElement );
+ }
+ }
+
+ private boolean alreadyGeneratedContains( Kind kind, EObject object )
+ {
+ if (object != null)
+ {
+ Resource resource = object.eResource();
+ if (resource != null)
+ {
+ Multimap<Kind, EObject> multimap = alreadyGenerated.get( resource );
+ if (multimap != null)
+ {
+ return multimap.containsEntry( kind, object );
+ }
+ }
+ }
+ return false;
+ }
+
+ private void addAlreadyGenerated( Kind kind, EObject object )
+ {
+ if (object != null)
+ {
+ Resource resource = object.eResource();
+ if (resource != null)
+ {
+ Multimap<Kind, EObject> multimap = alreadyGenerated.get( resource );
+ if (multimap == null)
+ {
+ multimap = HashMultimap.create();
+ alreadyGenerated.put( resource, multimap );
+ }
+ multimap.put( kind, object );
+ }
+ }
+ }
+
+ private boolean changedContains( Kind kind, EObject object )
+ {
+ if (object != null)
+ {
+ Resource resource = object.eResource();
+ if (resource != null)
+ {
+ Multimap<Kind, EObject> multimap = changed.get( resource );
+ if (multimap != null)
+ {
+ return multimap.containsEntry( kind, object );
+ }
+ }
+ }
+ return false;
+ }
+
+ private void removeChanged( Kind kind, EObject object )
+ {
+ if (object != null)
+ {
+ Resource resource = object.eResource();
+ if (resource != null)
+ {
+ Multimap<Kind, EObject> multimap = changed.get( resource );
+ if (multimap != null)
+ {
+ multimap.remove( kind, object );
+ }
+ }
+ }
+ }
+
+ @Override
+ public void addChanges( List<ChangeObject> changeList )
+ {
+ if (changeList != null)
+ {
+ ChangeCollector changeCollector = new ChangeCollector( changed );
+ for (ChangeObject change : changeList)
+ {
+ changeCollector.doSwitch( change.eObject );
+ }
+ }
+ }
+
+ @Override
+ public void closeResource( Resource resource )
+ {
+ if (changed.remove( resource ) != null)
+ {
+ CodeGenPlugin.getLogger().log( Level.INFO,
+ "Cleaning up changed map for resource: "
+ + resource.getURI()
+ .toString() );
+ }
+
+ if (alreadyGenerated.remove( resource ) != null)
+ {
+ CodeGenPlugin.getLogger().log( Level.INFO,
+ "Cleaning up already generated map for resource: "
+ + resource.getURI()
+ .toString() );
+ }
+ }
+
+ private class ChangeCollector extends UMLSwitch<Boolean>
+ {
+ final Map<Resource, Multimap<Kind, EObject>> changed;
+
+ public ChangeCollector( Map<Resource, Multimap<Kind, EObject>> changed )
+ {
+ this.changed = changed;
+ }
+
+ // Unhandled kinds of elements are ignored.
+ @Override
+ public Boolean defaultCase( EObject object )
+ {
+ EObject container = object.eContainer();
+ if (container != null)
+ {
+ doSwitch( container );
+ }
+
+ return Boolean.TRUE;
+ }
+
+ @Override
+ public Boolean casePackage( org.eclipse.uml2.uml.Package object )
+ {
+ // If this is a <<ProtocolContainer>> then create a Protocol
+ // generator for it and
+ // examine all capsules, select the ones that have a port that uses
+ // this protocol.
+ if (UMLRealTimeProfileUtil.isProtocolContainer( object ))
+ {
+ org.eclipse.papyrusrt.xtumlrt.common.NamedElement xtumlrtElement = translator.getGenerated( object );
+ if (xtumlrtElement != null && !UMLRTRuntime.isSystemProtocol( xtumlrtElement ))
+ {
+ createChange( Kind.Protocol, object );
+ for (Element element : object.getModel().getOwnedElements())
+ {
+ if (UMLRealTimeProfileUtil.isCapsule( element ))
+ for (org.eclipse.uml2.uml.Port umlPort
+ : UMLRealTimeProfileUtil.getAllRTPorts( (org.eclipse.uml2.uml.Class) element ))
+ if (UMLRealTimeProfileUtil.getProtocol( umlPort ) == object)
+ doSwitch( element );
+ }
+ }
+ }
+
+ return Boolean.TRUE;
+ }
+
+ @Override
+ public Boolean caseDataType( DataType object )
+ {
+ createChange( Kind.BasicClass, object );
+ return Boolean.TRUE;
+ }
+
+ @Override
+ public Boolean caseClass( org.eclipse.uml2.uml.Class object )
+ {
+ if (!UMLRealTimeProfileUtil.isCapsule( object ))
+ {
+ createChange( Kind.BasicClass, object );
+ return Boolean.TRUE;
+ }
+
+ // If the Class has been stereotyped with "Capsule" then the
+ // structural as well
+ // as state machine elements must be created.
+ createChange( Kind.Capsule, object );
+
+ Behavior behaviour = object.getClassifierBehavior();
+ if (behaviour == null)
+ {
+ behaviour = object.getOwnedBehavior( null );
+ }
+
+ if (behaviour instanceof StateMachine)
+ {
+ createChange( Kind.StateMachine, behaviour );
+ }
+ else
+ {
+ createChange( Kind.EmptyStateMachine, object );
+ }
+
+ // TODO Until there is a way to allocate capsules to threads, we
+ // treat the CapsuleType called "Top" specially.
+ if (top == null
+ || top.equals( object.getName() ))
+ {
+ createChange( Kind.Structural, object );
+ }
+
+ return true;
+ }
+
+ private void createChange( Kind kind, EObject object )
+ {
+ if (object != null)
+ {
+ Resource resource = object.eResource();
+ if (resource != null)
+ {
+ Multimap<Kind, EObject> multimap = changed.get( resource );
+ if (multimap == null)
+ {
+ multimap = HashMultimap.create();
+ changed.put( resource, multimap );
+ }
+ multimap.put( kind, object );
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/BasicClassGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/BasicClassGenerator.java
new file mode 100644
index 0000000..381b35e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/BasicClassGenerator.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.internal;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+import org.eclipse.papyrusrt.xtumlrt.common.Attribute;
+import org.eclipse.papyrusrt.xtumlrt.common.Entity;
+import org.eclipse.papyrusrt.xtumlrt.common.Operation;
+import org.eclipse.papyrusrt.xtumlrt.common.Parameter;
+import org.eclipse.papyrusrt.xtumlrt.common.StructMember;
+import org.eclipse.papyrusrt.xtumlrt.common.Type;
+import org.eclipse.papyrusrt.xtumlrt.common.StructType;
+import org.eclipse.papyrusrt.xtumlrt.common.VisibilityKind;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.TypesUtil;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberField;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ExpressionBlob;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.UserCode;
+
+public class BasicClassGenerator extends AbstractCppGenerator
+{
+ private final Type element;
+
+ public BasicClassGenerator( CppCodePattern cpp, Type element )
+ {
+ super( cpp );
+ this.element = element;
+ }
+
+ @Override
+ public String getLabel()
+ {
+ return super.getLabel() + ' ' + element.getName();
+ }
+
+ private CppClass.Visibility getVisibility( VisibilityKind visibility )
+ {
+ switch( visibility )
+ {
+ case PUBLIC:
+ return CppClass.Visibility.PUBLIC;
+ case PROTECTED:
+ return CppClass.Visibility.PROTECTED;
+ case PRIVATE:
+ return CppClass.Visibility.PRIVATE;
+ default:
+ break;
+ }
+
+ return null;
+ }
+
+ /**
+ * Look for a single return-type parameter and return the translated type. Return
+ * void if there is no return type parameter. Return null if there is more than
+ * one such parameter.
+ */
+ private org.eclipse.papyrusrt.codegen.lang.cpp.Type getReturnType( Operation operation )
+ {
+ org.eclipse.papyrusrt.codegen.lang.cpp.Type type = null;
+ for( Parameter param : operation.getParameters() )
+ switch( param.getDirection() )
+ {
+ case OUT:
+ case IN_OUT:
+ if( type != null )
+ return null;
+ type = TypesUtil.createCppType( cpp, param, param.getType() );
+ break;
+ default:
+ break;
+ }
+
+ return type == null ? PrimitiveType.VOID : type;
+ }
+
+ @Override
+ public boolean generate()
+ {
+ CppClass cls = cpp.getWritableCppClass( CppCodePattern.Output.BasicClass, element );
+ return generate( cls );
+ }
+
+ /**
+ * Generate the receiver model object's values into the given C++ class.
+ */
+ protected boolean generate( CppClass cls )
+ {
+ if( element instanceof StructType )
+ {
+ cls.setKind( CppClass.Kind.STRUCT );
+ generateFields( cls ); // Structs are POD without operations and all attributes are public
+ }
+ else if( element instanceof Entity )
+ {
+ generateAttributes( cls );
+ generateOperations( cls );
+ }
+
+ return true;
+ }
+
+ private boolean generateOperations( CppClass cls )
+ {
+ for( Operation operation : ((Entity)element).getOperations() )
+ {
+ CppClass.Visibility cppVisibility = getVisibility( operation.getVisibility() );
+ if( cppVisibility == null )
+ continue;
+
+ org.eclipse.papyrusrt.codegen.lang.cpp.Type returnType = getReturnType( operation );
+ if( returnType == null )
+ throw new RuntimeException( "could not determine return type for " + operation.toString() );
+
+ MemberFunction function = new MemberFunction( returnType, operation.getName() );
+ for( Parameter param : operation.getParameters() )
+ switch( param.getDirection() )
+ {
+ case OUT:
+ break;
+ case IN:
+ org.eclipse.papyrusrt.codegen.lang.cpp.Type type = TypesUtil.createCppType( cpp, param, param.getType() );
+ function.add( new org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter( type, param.getName() ) );
+ break;
+ default:
+ throw new RuntimeException( "unhandled paramater direction for " + param.toString() );
+ }
+
+ // Find some C++ code that is associated with this Operation
+ ActionCode code = operation.getBody();
+ if( code != null )
+ {
+ String source = code.getSource();
+ if( source != null )
+ function.add( new UserCode( source ) );
+ }
+
+ if( operation.isStatic() )
+ cls.addStaticMember( cppVisibility, function );
+ else
+ cls.addMember( cppVisibility, function );
+ }
+ return true;
+ }
+
+ private boolean generateAttributes( CppClass cls )
+ {
+ for( Attribute attr : ((Entity)element).getAttributes() )
+ {
+ CppClass.Visibility cppVisibility = getVisibility( attr.getVisibility() );
+ if( cppVisibility == null )
+ continue;
+
+ org.eclipse.papyrusrt.codegen.lang.cpp.Type type = TypesUtil.createCppType( cpp, attr, attr.getType() );
+ MemberField field = null;
+ if( attr.getDefault() == null
+ || attr.getDefault().isEmpty() )
+ field = new MemberField( type, attr.getName() );
+ else
+ field = new MemberField( type, attr.getName(), new ExpressionBlob( attr.getDefault() ) );
+
+ if( attr.isStatic() )
+ cls.addStaticMember( cppVisibility, field );
+ else
+ cls.addMember( cppVisibility, field );
+ }
+ return true;
+ }
+
+ private boolean generateFields( CppClass cls )
+ {
+ for (StructMember member : ((StructType)element).getStructMembers())
+ {
+ org.eclipse.papyrusrt.codegen.lang.cpp.Type type = TypesUtil.createCppType( cpp, member, member.getType() );
+ MemberField field = new MemberField( type, member.getName() );
+ cls.addMember( CppClass.Visibility.PUBLIC, field );
+ }
+ return true;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/CapsuleGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/CapsuleGenerator.java
new file mode 100644
index 0000000..9ed8a8a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/CapsuleGenerator.java
@@ -0,0 +1,829 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.internal;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern.Output;
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.instance.model.CapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.ICapsuleInstance;
+import org.eclipse.papyrusrt.codegen.instance.model.IPortInstance;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AddressOfExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BinaryOperation;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BlockInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BooleanLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CppEnumOrderedInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IndexExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.NewExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.StringLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.StandardLibrary;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.CodeBlock;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ConditionalStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ReturnStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.SwitchClause;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.SwitchStatement;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsuleKind;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.RedefinableElement;
+
+public class CapsuleGenerator extends BasicClassGenerator
+{
+ private final Capsule capsule;
+
+ private Boolean internalPortsFound;
+
+ public CapsuleGenerator( CppCodePattern cpp, Capsule capsule )
+ {
+ super( cpp, capsule );
+ this.capsule = capsule;
+ }
+
+ @Override
+ public String getLabel()
+ {
+ return super.getLabel() + ' ' + capsule.getName();
+ }
+
+ @Override
+ public boolean generate()
+ {
+ CppClass cls = cpp.getWritableCppClass( CppCodePattern.Output.CapsuleClass, capsule );
+ RedefinableElement element = capsule.getRedefines();
+ Capsule modelSuperClass = null;
+ if (element != null && element instanceof Capsule) modelSuperClass = (Capsule)element;
+ CppClass superClass = null;
+ if (modelSuperClass == null) {
+ cls.addBase( CppClass.Access.PUBLIC, UMLRTRuntime.UMLRTCapsule.Element );
+ }
+ else {
+ // In UML-RT a capsule may have one super-class at most.
+ superClass = cpp.getWritableCppClass(CppCodePattern.Output.CapsuleClass, modelSuperClass);
+ cls.addBase( CppClass.Access.PUBLIC, superClass);
+ }
+
+ Parameter param_st = new Parameter( UMLRTRuntime.UMLRTSlot.getType().ptr(), "st" );
+ Parameter param_bp = new Parameter( UMLRTRuntime.UMLRTCommsPort.getType().ptr().ptr().const_(), "border" );
+ Parameter param_internal = new Parameter( UMLRTRuntime.UMLRTCommsPort.getType().ptr().const_(), "internal" );
+ Parameter param_stat = new Parameter( PrimitiveType.BOOL, "isStat" );
+
+ Constructor ctor = cpp.getConstructor( CppCodePattern.Output.CapsuleClass, capsule );
+ ctor.add( param_st );
+ ctor.add( param_bp );
+ ctor.add( param_internal );
+ ctor.add( param_stat );
+
+ AbstractFunctionCall baseCtorCall = null;
+ if( modelSuperClass == null )
+ baseCtorCall
+ = UMLRTRuntime.UMLRTCapsule.Ctor(
+ StandardLibrary.NULL(), // we don't use the RTS interface
+ new AddressOfExpr( new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule ) ) ),
+ new ElementAccess( param_st ),
+ new ElementAccess( param_bp ),
+ new ElementAccess( param_internal ),
+ new ElementAccess( param_stat ) );
+ else
+ {
+ baseCtorCall = new ConstructorCall( cpp.getConstructor( CppCodePattern.Output.CapsuleClass, modelSuperClass ) );
+ baseCtorCall.addArgument( StandardLibrary.NULL() ); // we don't use the RTS interface
+ baseCtorCall.addArgument( new AddressOfExpr( new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule ) ) ) );
+ baseCtorCall.addArgument( new ElementAccess( param_st ) );
+ baseCtorCall.addArgument( new ElementAccess( param_bp ) );
+ baseCtorCall.addArgument( new ElementAccess( param_internal ) );
+ baseCtorCall.addArgument( new ElementAccess( param_stat ) );
+ }
+ ctor.addBaseInitializer( baseCtorCall );
+
+ // Connect all ports using a shallowly connected capsule instance.
+ CapsuleInstance instance = new CapsuleInstance( capsule );
+ instance.connect( null, true );
+
+ // If the Capsule generation has been successful then add on the operations and attributes
+ // in the base generator.
+ return generatePorts( cls )
+ && generateParts( cls, instance )
+ && generateRTSFunctions( cls, instance )
+ && super.generate( cls );
+ }
+
+ /* E.g., Each contained part gets
+ * const UMLRTCapsuleRole * role_name() const
+ * {
+ * return slot->capsuleClass->subcapsuleRoles[...];
+ * }
+ */
+ private boolean generateParts( CppClass capsuleClass, CapsuleInstance instance )
+ {
+ CppEnumOrderedInitializer subCapsuleInit
+ = new CppEnumOrderedInitializer(
+ cpp.getCppEnum( CppCodePattern.Output.PartId, capsule ),
+ UMLRTRuntime.UMLRTCapsuleRole.getType().arrayOf( null ) );
+ Variable subCapsules = new Variable( LinkageSpec.STATIC, UMLRTRuntime.UMLRTCapsuleRole.getType().arrayOf( null ).const_(), "roles", subCapsuleInit );
+
+ for( CapsulePart part : XTUMLRTUtil.getAllCapsuleParts( capsule ) )
+ {
+ // The RTS does not allow an optional plugin role.
+ boolean isPlugin = part.getKind() == CapsuleKind.PLUGIN;
+ subCapsuleInit.putExpression(
+ cpp.getEnumerator( CppCodePattern.Output.PartId, part, capsule ),
+ new BlockInitializer(
+ UMLRTRuntime.UMLRTCapsulePart.getType(),
+ new StringLiteral( part.getName() ),
+ new AddressOfExpr( new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, part.getType() ) ) ),
+ new IntegralLiteral( XTUMLRTUtil.getLowerBound( part ) ),
+ new IntegralLiteral( XTUMLRTUtil.getUpperBound( part ) ),
+ new BooleanLiteral( ! isPlugin && XTUMLRTUtil.getUpperBound( part ) > XTUMLRTUtil.getLowerBound( part ) ),
+ new BooleanLiteral( isPlugin ) ) );
+
+ MemberFunction function
+ = new MemberFunction(
+ UMLRTRuntime.UMLRTCapsulePart.getType().const_().ptr(),
+ part.getName(),
+ Type.CVQualifier.CONST );
+
+ Enumerator partId = cpp.getEnumerator( CppCodePattern.Output.PartId, part, capsule );
+ function.add(
+ new ReturnStatement(
+ new AddressOfExpr(
+ new IndexExpr(
+ new MemberAccess( UMLRTRuntime.UMLRTCapsule.slot(), UMLRTRuntime.UMLRTSlot.parts ),
+ new ElementAccess( partId ) ) ) ) );
+
+ capsuleClass.addMember( CppClass.Visibility.PROTECTED, function );
+ }
+
+ if( subCapsuleInit.getNumInitializers() > 0 )
+ cpp.getElementList( CppCodePattern.Output.UMLRTCapsuleClass, capsule ).addElement( subCapsules );
+ else
+ subCapsules = null;
+
+ generateUMLRTCapsuleClass( subCapsules, instance );
+ return true;
+ }
+
+ private static enum PortKind
+ {
+ Border( CppCodePattern.Output.BorderPortId, UMLRTRuntime.UMLRTCapsule.borderPortsField ),
+ Internal( CppCodePattern.Output.InternalPortId, UMLRTRuntime.UMLRTCapsule.internalPortsField );
+
+ private PortKind( CppCodePattern.Output cppOutput, org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement inheritedField )
+ {
+ this.cppOutput = cppOutput;
+ this.inheritedField = inheritedField;
+ }
+
+ public final CppCodePattern.Output cppOutput;
+ private final org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement inheritedField;
+
+ public Expression generatePortIdAccess( CppCodePattern cpp, Capsule capsule, Port port )
+ {
+ return cpp.getEnumeratorAccess( cppOutput, port, capsule );
+ }
+
+ /**
+ * Generates an expression to access the specified port. This overrides the default case
+ * to access the given array variable. This is used when generating non-member functions
+ * like instantiate.
+ */
+ public Expression generatePortAccess( CppCodePattern cpp, Expression arrayVarAccess, Capsule capsule, Port port )
+ {
+ Expression expr = new IndexExpr( arrayVarAccess, generatePortIdAccess( cpp, capsule, port ) );
+
+ // Internal ports are stored in an array of values, border ports in an array of pointers.
+ return this == Internal ? new AddressOfExpr( expr ) : expr;
+ }
+
+ /**
+ * Generates an expression to access the specified port. This default case uses the
+ * port array variable that is inherited from the UMLRTCapsule base class.
+ */
+ public Expression generatePortAccess( CppCodePattern cpp, Capsule capsule, Port port )
+ {
+ return generatePortAccess( cpp, new ElementAccess( inheritedField ), capsule, port );
+ }
+ }
+
+ private Expression generatePortAccess( Port port )
+ {
+ return ( XTUMLRTUtil.isInternalPort( port ) ? PortKind.Internal : PortKind.Border ).generatePortAccess( cpp, capsule, port );
+ }
+
+ private Expression generateSlotAccess( Expression slot, ICapsuleInstance capsuleInstance )
+ {
+ Expression partArrayAccess
+ = new IndexExpr(
+ new MemberAccess( slot, UMLRTRuntime.UMLRTSlot.parts ),
+ cpp.getEnumeratorAccess( CppCodePattern.Output.PartId, capsuleInstance.getCapsulePart(), capsule ) );
+ Expression slotAccess
+ = new IndexExpr(
+ new MemberAccess( partArrayAccess, UMLRTRuntime.UMLRTCapsulePart.slots ),
+ new IntegralLiteral( capsuleInstance.getIndex() ) );
+ return slotAccess;
+ }
+
+ private Expression generatePortAccess( Expression slot, ICapsuleInstance capsuleInstance, Port port )
+ {
+ if( XTUMLRTUtil.isInternalPort( port ) )
+ return PortKind.Internal.generatePortAccess( cpp, capsule, port );
+
+ Expression portsAccess
+ = new MemberAccess(
+ generateSlotAccess( slot, capsuleInstance ),
+ UMLRTRuntime.UMLRTSlot.ports );
+ return new AddressOfExpr( PortKind.Border.generatePortAccess( cpp, portsAccess, capsuleInstance.getType(), port ) );
+ }
+
+ private Expression generatePortAccess( PortKind portKind, org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement arrayVar, IPortInstance port )
+ {
+ return portKind.generatePortAccess( cpp, new ElementAccess( arrayVar ), port.getContainer().getType(), port.getType() );
+ }
+
+ private Expression generateBorderPortAccess( org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement borderPorts, IPortInstance port )
+ {
+ return generatePortAccess( PortKind.Border, borderPorts, port );
+ }
+
+ private Expression generateFarEndPortAccess( PortKind portKind, IPortInstance port, Expression index )
+ {
+ return
+ new IndexExpr(
+ new MemberAccess(
+ generatePortAccess( portKind, UMLRTRuntime.UMLRTCapsule.borderPortsField, port ),
+ UMLRTRuntime.UMLRTCommsPort.farEnds ),
+ index );
+ }
+
+ private boolean generatePorts( CppClass capsuleClass )
+ {
+ for( Port port : XTUMLRTUtil.getAllRTPorts( capsule ) )
+ {
+ Protocol protocol = port.getType();
+ if( protocol == null )
+ continue;
+
+ CppCodePattern.Output roleKind
+ = port.isConjugate() ? CppCodePattern.Output.ProtocolConjugateRole : CppCodePattern.Output.ProtocolBaseRole;
+
+ Type protocolRoleType = null;
+ AbstractFunctionCall roleCtorCall = null;
+ Expression portAccess = generatePortAccess( port );
+
+ // If this is a system-defined protocol, then generate an external function call.
+ if( UMLRTRuntime.isSystemProtocol( protocol ) )
+ {
+ protocolRoleType = UMLRTRuntime.getSystemProtocolRole( protocol, roleKind == Output.ProtocolBaseRole );
+
+ // If this system-defined protocol does not apply to this PortRole, then ignore
+ // it and continue to the next port.
+ if( protocolRoleType == null )
+ continue;
+
+ roleCtorCall = UMLRTRuntime.getSystemProtocolRoleCtor( protocol, roleKind == Output.ProtocolBaseRole, portAccess );
+ }
+ else
+ {
+ // Otherwise this is a model-defined role.
+ protocolRoleType = cpp.getCppClass( roleKind, protocol ).getType();
+
+ Constructor roleCtor = cpp.getConstructor( roleKind, protocol );
+ roleCtorCall = new ConstructorCall( roleCtor, portAccess );
+ }
+
+ MemberFunction function = new MemberFunction( protocolRoleType, port.getName(), Type.CVQualifier.CONST );
+ function.add( new ReturnStatement( roleCtorCall ) );
+
+ capsuleClass.addMember( CppClass.Visibility.PROTECTED, function );
+ }
+
+ return true;
+ }
+
+ private boolean isInternalPort( IPortInstance port )
+ {
+ return XTUMLRTUtil.isInternalPort( port.getType() );
+ }
+
+ private boolean hasInternalPorts()
+ {
+ if( internalPortsFound != null )
+ return internalPortsFound.booleanValue();
+
+ for( Port port : XTUMLRTUtil.getAllRTPorts( capsule ) )
+ if( XTUMLRTUtil.isInternalPort( port ) )
+ return internalPortsFound = Boolean.TRUE;
+ return internalPortsFound = Boolean.FALSE;
+ }
+
+ /*
+ * The instantiate function creates a new instance of the user's capsule.
+ */
+ private Function generateInstantiate( CapsuleInstance instance )
+ {
+ ElementList elementList = cpp.getElementList( CppCodePattern.Output.UMLRTCapsuleClass, capsule );
+
+ Parameter slot = new Parameter( UMLRTRuntime.UMLRTSlot.getType().ptr(), "slot" );
+ Parameter borderPorts = new Parameter( UMLRTRuntime.UMLRTCommsPort.getType().ptr().ptr().const_(), "borderPorts" );
+
+ Function instantiate = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "instantiate_" + capsule.getName() );
+ instantiate.add( new Parameter( UMLRTRuntime.UMLRTRtsInterface.getType().const_().ptr(), "rts" ) );
+ instantiate.add( slot );
+ instantiate.add( borderPorts );
+
+ Variable internalPorts = null;
+ if( hasInternalPorts() )
+ {
+ Variable capsuleClass = cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule );
+ internalPorts
+ = new Variable(
+ UMLRTRuntime.UMLRTCommsPort.getType().ptr().const_(),
+ "internalPorts",
+ UMLRTRuntime.UMLRTFrameProtocol.createPorts(
+ new ElementAccess( slot ),
+ new AddressOfExpr( new ElementAccess( capsuleClass ) ),
+ new MemberAccess(
+ new ElementAccess( capsuleClass ),
+ UMLRTRuntime.UMLRTCapsuleClass.numPortRolesInternal ),
+ new MemberAccess(
+ new ElementAccess( capsuleClass ),
+ UMLRTRuntime.UMLRTCapsuleClass.portRolesInternal ),
+ BooleanLiteral.FALSE() ) );
+ instantiate.add( internalPorts );
+ }
+
+ ConstructorCall ctorCall = new ConstructorCall( cpp.getConstructor( CppCodePattern.Output.CapsuleClass, capsule ) );
+ ctorCall.addArgument( new ElementAccess( slot ) );
+ ctorCall.addArgument( new ElementAccess( borderPorts ) );
+ ctorCall.addArgument( internalPorts == null ? StandardLibrary.NULL() : new ElementAccess( internalPorts ) );
+ ctorCall.addArgument( BooleanLiteral.FALSE() ); // instantiate produces only non-static instances
+
+ // Connect all border and internal ports as needed.
+ for( IPortInstance port : instance.getPorts() )
+ {
+ int localIndex = 0;
+ if( isInternalPort( port ) )
+ for( IPortInstance.IFarEnd far : port.getFarEnds() )
+ instantiate.add(
+ UMLRTRuntime.UMLRTFrameService.connectPorts(
+ generatePortAccess( PortKind.Internal, internalPorts, port ),
+ new IntegralLiteral( localIndex++ ),
+ generatePortAccess( new ElementAccess( slot ), far.getContainer(), far.getType() ),
+ new IntegralLiteral( far.getIndex() ) ) );
+ else if( port.isRelay() )
+ for( IPortInstance.IFarEnd far : port.getFarEnds() )
+ instantiate.add(
+ UMLRTRuntime.UMLRTFrameService.connectRelayPort(
+ generateBorderPortAccess( borderPorts, port ),
+ new IntegralLiteral( localIndex++ ),
+ far.getContainer().getCapsulePart() == null
+ ? generateBorderPortAccess( borderPorts, far.getOwner() )
+ : generatePortAccess( new ElementAccess( slot ), far.getContainer(), far.getType() ),
+ new IntegralLiteral( far.getIndex() ) ) );
+ else
+ for( IPortInstance.IFarEnd far : port.getFarEnds() )
+ instantiate.add(
+ UMLRTRuntime.UMLRTFrameService.connectPorts(
+ generateBorderPortAccess( borderPorts, port ),
+ new IntegralLiteral( localIndex++ ),
+ far.getContainer().getCapsulePart() == null
+ ? generateBorderPortAccess( borderPorts, far.getOwner() )
+ : generatePortAccess( new ElementAccess( slot ), far.getContainer(), far.getType() ),
+ new IntegralLiteral( far.getIndex() ) ) );
+ }
+
+ // Connect all part border ports to each other.
+ Set<ICapsuleInstance> connected = new HashSet<ICapsuleInstance>();
+ connected.add( instance );
+ for( ICapsuleInstance sub : instance.getContained() )
+ {
+ for( IPortInstance port : sub.getPorts() )
+ {
+ if( isInternalPort( port ) )
+ continue;
+
+ int localId = -1;
+ for( IPortInstance.IFarEnd far : port.getFarEnds() )
+ {
+ // This is incremented first so that it will allow for farEnds that are skipped.
+ ++localId;
+
+ // Ignore farEnds that are not connected ones that are for ports on parts that
+ // have already been considered.
+ if( connected.contains( far.getContainer() ) )
+ continue;
+
+ AbstractFunctionCall connectCall
+ = UMLRTRuntime.UMLRTFrameService.connectPorts(
+ generatePortAccess( new ElementAccess( slot ), sub, port.getType() ),
+ new IntegralLiteral( localId ),
+ generatePortAccess( new ElementAccess( slot ), far.getContainer(), far.getType() ),
+ new IntegralLiteral( far.getIndex() ) );
+
+ instantiate.add( connectCall );
+ }
+ }
+
+ connected.add( sub );
+ }
+
+ // Instantiate all non-optional instances.
+ for( ICapsuleInstance sub : instance.getContained() )
+ {
+ if( sub.isDynamic() )
+ continue;
+
+ AbstractFunctionCall instantiateCall
+ = new MemberFunctionCall(
+ new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, sub.getType() ) ),
+ UMLRTRuntime.UMLRTCapsuleClass.instantiate );
+ instantiateCall.addArgument( StandardLibrary.NULL() ); // we don't use the rts interface
+ instantiateCall.addArgument(
+ new IndexExpr(
+ new MemberAccess(
+ new IndexExpr(
+ new MemberAccess( new ElementAccess( slot ), UMLRTRuntime.UMLRTSlot.parts ),
+ cpp.getEnumeratorAccess( CppCodePattern.Output.PartId, sub.getCapsulePart(), capsule ) ),
+ UMLRTRuntime.UMLRTCapsulePart.slots ),
+ new IntegralLiteral( sub.getIndex() ) ) );
+ instantiateCall.addArgument(
+ UMLRTRuntime.UMLRTFrameService.createBorderPorts(
+ new IndexExpr(
+ new MemberAccess(
+ new IndexExpr(
+ new MemberAccess( new ElementAccess( slot ), UMLRTRuntime.UMLRTSlot.parts ),
+ cpp.getEnumeratorAccess( CppCodePattern.Output.PartId, sub.getCapsulePart(), capsule ) ),
+ UMLRTRuntime.UMLRTCapsulePart.slots ),
+ new IntegralLiteral( sub.getIndex() ) ),
+ new MemberAccess(
+ new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, sub.getCapsulePart().getType() ) ),
+ UMLRTRuntime.UMLRTCapsuleClass.numPortRolesBorder ) ) );
+
+ instantiate.add( instantiateCall );
+ }
+
+ instantiate.add(
+ new BinaryOperation(
+ new MemberAccess( new ElementAccess( slot ), UMLRTRuntime.UMLRTSlot.capsule ),
+ BinaryOperation.Operator.ASSIGN,
+ new NewExpr( ctorCall ) ) );
+
+ elementList.addElement( instantiate );
+
+ return instantiate;
+ }
+
+ private boolean generateBindPortFunction( CppClass cls, CapsuleInstance instance )
+ {
+ MemberFunction func = new MemberFunction( PrimitiveType.VOID, "bindPort" );
+ func.setVirtual();
+ cls.addMember( CppClass.Visibility.PUBLIC, func );
+
+ Parameter isBorder = new Parameter( PrimitiveType.BOOL, "isBorder" );
+ Parameter portId = new Parameter( PrimitiveType.INT, "portId" );
+ Parameter index = new Parameter( PrimitiveType.INT, "index" );
+ func.add( isBorder );
+ func.add( portId );
+ func.add( index );
+
+ ConditionalStatement isBorderCond = new ConditionalStatement();
+ func.add( isBorderCond );
+
+ CodeBlock isBorderBlock = isBorderCond.add( new ElementAccess( isBorder ) );
+ SwitchStatement isBorderSwitch = new SwitchStatement( new ElementAccess( portId ) );
+ isBorderBlock.add( isBorderSwitch );
+
+ CodeBlock isNotBorderBlock = isBorderCond.defaultBlock();
+
+ for( IPortInstance port : instance.getPorts() )
+ {
+ if( ! XTUMLRTUtil.isWired( port.getType() ) )
+ continue;
+
+ if( XTUMLRTUtil.isInternalPort( port.getType() ) )
+ {
+ isNotBorderBlock.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ BooleanLiteral.TRUE() ) );
+ isNotBorderBlock.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ BooleanLiteral.TRUE() ) );
+ }
+ else if( port.isRelay() )
+ {
+ SwitchClause clause = new SwitchClause( cpp.getEnumeratorAccess( CppCodePattern.Output.BorderPortId, port.getType(), capsule ) );
+
+ for( IPortInstance.IFarEnd far : port.getFarEnds() )
+ {
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.connectRelayPort(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ generatePortAccess(
+ UMLRTRuntime.UMLRTCapsule.slot(),
+ far.getContainer(),
+ far.getOwner().getType() ),
+ new IntegralLiteral( far.getIndex() ) ) );
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.bindSubcapsulePort(
+ BooleanLiteral.TRUE(), // isBorder
+ new MemberAccess(
+ generateSlotAccess( UMLRTRuntime.UMLRTCapsule.slot(), far.getContainer() ),
+ UMLRTRuntime.UMLRTSlot.capsule ),
+ new ElementAccess( portId ),
+ new ElementAccess( index ) ) );
+ }
+
+ isBorderSwitch.add( clause );
+ }
+ else
+ {
+ SwitchClause clause = new SwitchClause( cpp.getEnumeratorAccess( CppCodePattern.Output.BorderPortId, port.getType(), capsule ) );
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ BooleanLiteral.TRUE() ) );
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ BooleanLiteral.TRUE() ) );
+ isBorderSwitch.add( clause );
+ }
+ }
+
+ return true;
+ }
+
+ private boolean generateUnbindPortFunction( CppClass cls, CapsuleInstance instance )
+ {
+ MemberFunction func = new MemberFunction( PrimitiveType.VOID, "unbindPort" );
+ func.setVirtual();
+ cls.addMember( CppClass.Visibility.PUBLIC, func );
+
+ Parameter isBorder = new Parameter( PrimitiveType.BOOL, "isBorder" );
+ Parameter portId = new Parameter( PrimitiveType.INT, "portId" );
+ Parameter index = new Parameter( PrimitiveType.INT, "index" );
+ func.add( isBorder );
+ func.add( portId );
+ func.add( index );
+
+ ConditionalStatement isBorderCond = new ConditionalStatement();
+ func.add( isBorderCond );
+
+ CodeBlock isBorderBlock = isBorderCond.add( new ElementAccess( isBorder ) );
+ SwitchStatement isBorderSwitch = new SwitchStatement( new ElementAccess( portId ) );
+ isBorderBlock.add( isBorderSwitch );
+
+ CodeBlock isNotBorderBlock = isBorderCond.defaultBlock();
+
+ for( IPortInstance port : instance.getPorts() )
+ {
+ if( ! XTUMLRTUtil.isWired( port.getType() ) )
+ continue;
+
+ if( XTUMLRTUtil.isInternalPort( port.getType() ) )
+ {
+ isNotBorderBlock.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ BooleanLiteral.TRUE() ) );
+ isNotBorderBlock.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Internal, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ BooleanLiteral.TRUE() ) );
+ isNotBorderBlock.add(
+ UMLRTRuntime.UMLRTFrameService.disconnectPort(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ) ) );
+ }
+ else if( port.isRelay() )
+ {
+ SwitchClause clause = new SwitchClause( cpp.getEnumeratorAccess( CppCodePattern.Output.BorderPortId, port.getType(), capsule ) );
+
+ for( IPortInstance.IFarEnd far : port.getFarEnds() )
+ {
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.unbindSubcapsulePort(
+ BooleanLiteral.TRUE(), // isBorder
+ new MemberAccess(
+ generateSlotAccess( UMLRTRuntime.UMLRTCapsule.slot(), far.getContainer() ),
+ UMLRTRuntime.UMLRTSlot.capsule ),
+ new ElementAccess( portId ),
+ new ElementAccess( index ) ) );
+ }
+
+ isBorderSwitch.add( clause );
+ }
+ else
+ {
+ SwitchClause clause = new SwitchClause( cpp.getEnumeratorAccess( CppCodePattern.Output.BorderPortId, port.getType(), capsule ) );
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ BooleanLiteral.TRUE() ) );
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.sendBoundUnbound(
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.port ),
+ new MemberAccess(
+ generateFarEndPortAccess( PortKind.Border, port, new ElementAccess( index ) ),
+ UMLRTRuntime.UMLRTCommsPortFarEnd.index ),
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ),
+ BooleanLiteral.TRUE() ) );
+ clause.add(
+ UMLRTRuntime.UMLRTFrameService.disconnectPort(
+ generatePortAccess( port.getType() ),
+ new ElementAccess( index ) ) );
+ isBorderSwitch.add( clause );
+ }
+ }
+
+ return true;
+ }
+
+ private boolean generateRTSFunctions( CppClass cls, CapsuleInstance instance )
+ {
+ return generateBindPortFunction( cls, instance )
+ && generateUnbindPortFunction( cls, instance );
+ }
+
+ private Variable generateUMLRTCapsuleClass( Variable subCapsules, CapsuleInstance instance )
+ {
+ CppEnumOrderedInitializer border_init = null;
+ CppEnumOrderedInitializer internal_init = null;
+ for( Port port : XTUMLRTUtil.getAllRTPorts( capsule ) )
+ {
+ String regOverride = XTUMLRTUtil.getRegistrationOverride( port );
+
+ // TODO some fields need values
+ BlockInitializer init = new BlockInitializer( UMLRTRuntime.UMLRTCommsPortRole.getType() );
+ init.addExpression( cpp.getEnumeratorAccess( CppCodePattern.Output.PortId, port, capsule ) );
+ init.addExpression( new StringLiteral( port.getType().getName() ) );
+ init.addExpression( new StringLiteral( port.getName() ) );
+ init.addExpression( regOverride == null ? StandardLibrary.NULL() : new StringLiteral( regOverride ) );
+ init.addExpression( new IntegralLiteral( XTUMLRTUtil.getLowerBound( port ) ) );
+ init.addExpression( BooleanLiteral.from( XTUMLRTUtil.isAutomatic( port ) ) );
+ init.addExpression( BooleanLiteral.from( port.isConjugate() ) );
+ init.addExpression( BooleanLiteral.from( XTUMLRTUtil.isApplicationLocked( port ) ) );
+ init.addExpression( BooleanLiteral.from( XTUMLRTUtil.isNotification( port ) ) );
+ init.addExpression( BooleanLiteral.FALSE() ); // unsigned sap : 1; // True if the port is an SAP.
+ init.addExpression( BooleanLiteral.FALSE() ); // unsigned spp : 1; // True if the port is an SPP.
+ init.addExpression( BooleanLiteral.from( XTUMLRTUtil.isWired( port ) ) );
+
+ if( ! XTUMLRTUtil.isInternalPort( port ) )
+ {
+ if( border_init == null )
+ border_init
+ = new CppEnumOrderedInitializer(
+ cpp.getCppEnum( CppCodePattern.Output.BorderPortId, capsule ),
+ UMLRTRuntime.UMLRTCommsPortRole.getType().arrayOf( null ) );
+
+ border_init.putExpression(
+ cpp.getEnumerator( CppCodePattern.Output.BorderPortId, port, capsule ),
+ init );
+ }
+ else
+ {
+ if( internal_init == null )
+ internal_init
+ = new CppEnumOrderedInitializer(
+ cpp.getCppEnum( CppCodePattern.Output.InternalPortId, capsule ),
+ UMLRTRuntime.UMLRTCommsPortRole.getType().arrayOf( null ) );
+
+ internal_init.putExpression(
+ cpp.getEnumerator( CppCodePattern.Output.InternalPortId, port, capsule ),
+ init );
+ }
+ }
+
+ Variable portroles_border = null;
+ if( border_init != null
+ && border_init.getNumInitializers() > 0 )
+ {
+ portroles_border
+ = new Variable(
+ LinkageSpec.STATIC,
+ UMLRTRuntime.UMLRTCommsPortRole.getType().const_().arrayOf( null ),
+ "portroles_border",
+ border_init );
+ cpp.getElementList( CppCodePattern.Output.UMLRTCapsuleClass, capsule ).addElement( portroles_border );
+ }
+
+ Variable portroles_internal = null;
+ if( internal_init != null
+ && internal_init.getNumInitializers() > 0 )
+ {
+ portroles_internal
+ = new Variable(
+ LinkageSpec.STATIC,
+ UMLRTRuntime.UMLRTCommsPortRole.getType().const_().arrayOf( null ),
+ "portroles_internal",
+ internal_init );
+ cpp.getElementList( CppCodePattern.Output.UMLRTCapsuleClass, capsule ).addElement( portroles_internal );
+ }
+
+ RedefinableElement element = capsule.getRedefines();
+ Capsule baseClass = null;
+ if( element != null ) baseClass = (Capsule)element;
+ BlockInitializer init
+ = new BlockInitializer(
+ UMLRTRuntime.UMLRTCapsuleClass.getType(),
+ new StringLiteral( capsule.getName() ),
+ baseClass == null
+ ? StandardLibrary.NULL()
+ : new AddressOfExpr( new ElementAccess( cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, baseClass ) ) ),
+ new ElementAccess( generateInstantiate( instance ) ),
+ new IntegralLiteral( subCapsules == null ? 0 : subCapsules.getNumInitializedInstances() ),
+ subCapsules == null ? StandardLibrary.NULL() : new ElementAccess( subCapsules ),
+ new IntegralLiteral( border_init == null ? 0 : border_init.getNumInitializers() ),
+ portroles_border == null ? StandardLibrary.NULL() : new ElementAccess( portroles_border ),
+ new IntegralLiteral( internal_init == null ? 0 : internal_init.getNumInitializers() ),
+ portroles_internal == null ? StandardLibrary.NULL() : new ElementAccess( portroles_internal ) );
+
+ Variable var = cpp.getVariable( CppCodePattern.Output.UMLRTCapsuleClass, capsule );
+ cpp.getElementList( CppCodePattern.Output.UMLRTCapsuleClass, capsule ).addElement( var );
+ var.setInitializer( init );
+ return var;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/EclipseGeneratorManager.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/EclipseGeneratorManager.java
new file mode 100644
index 0000000..1e9db1d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/EclipseGeneratorManager.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.GeneratorManager;
+
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+
+public class EclipseGeneratorManager extends GeneratorManager
+{
+ private static final String EXTENSION_POINT = "generator"; //$NON-NLS-1$
+
+ private Map<String, GeneratorDescriptor> generators;
+
+ public EclipseGeneratorManager()
+ {
+ generators = loadExtensions();
+ }
+
+ private static Map<String, GeneratorDescriptor> loadExtensions()
+ {
+ Map<String, GeneratorDescriptor> generators = new HashMap<String, GeneratorDescriptor>();
+
+ IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor( CppCodeGenPlugin.ID, EXTENSION_POINT );
+ for( IConfigurationElement element : elements )
+ {
+ GeneratorDescriptor desc = new GeneratorDescriptor( element );
+ if( generators.containsKey( desc.getType() ) )
+ CodeGenPlugin.error( "Ignoring duplicate generator for " + desc.getType() );
+ else
+ generators.put( desc.getType(), desc );
+ }
+
+ return generators;
+ }
+
+ @Override
+ @SuppressWarnings( "unchecked" )
+ public AbstractCppGenerator getGenerator( CppCodeGenerator.Kind kind, CppCodePattern cpp, NamedElement element )
+ {
+ // Look for a registered generator for the given kind.
+ GeneratorDescriptor desc = generators.get( kind.id );
+ if( desc != null )
+ return desc.getFactory().create( cpp, element );
+
+ // If a generator has not been registered, then fall-back to built in defaults where possible.
+ return super.getGenerator( kind, cpp, element );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/EmptyStateMachineGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/EmptyStateMachineGenerator.java
new file mode 100644
index 0000000..a1ca329
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/EmptyStateMachineGenerator.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.internal;
+
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+
+public class EmptyStateMachineGenerator extends AbstractCppGenerator
+{
+ private final NamedElement element;
+
+ public EmptyStateMachineGenerator( CppCodePattern cpp, NamedElement element )
+ {
+ super( cpp );
+ this.element = element;
+ }
+
+ @Override public String getLabel() { return super.getLabel() + ' ' + element.getName(); }
+
+ @Override
+ public boolean generate()
+ {
+ CppClass cls = cpp.getCppClass( CppCodePattern.Output.CapsuleClass, element );
+
+ MemberFunction initialize = new MemberFunction( PrimitiveType.VOID, "initialize" );
+ initialize.setVirtual();
+ initialize.add( new Parameter( UMLRTRuntime.UMLRTMessage.getType().const_().ref(), "msg" ) );
+ cls.addMember( CppClass.Visibility.PUBLIC, initialize );
+
+ MemberFunction inject = new MemberFunction( PrimitiveType.VOID, "inject" );
+ inject.setVirtual();
+ inject.add( new Parameter( UMLRTRuntime.UMLRTMessage.getType().const_().ref(), "msg" ) );
+ cls.addMember( CppClass.Visibility.PUBLIC, inject );
+
+ return true;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/GeneratorDescriptor.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/GeneratorDescriptor.java
new file mode 100644
index 0000000..f17d11a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/GeneratorDescriptor.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+
+@SuppressWarnings( "rawtypes" )
+public class GeneratorDescriptor
+{
+ private static final String Attr_Type = "type";
+ private static final String Attr_Class = "class";
+
+ private final IConfigurationElement element;
+
+ private String type;
+ private AbstractCppGenerator.Factory factory;
+
+ public GeneratorDescriptor( IConfigurationElement element )
+ {
+ this.element = element;
+ this.type = element.getAttribute( Attr_Type );
+ }
+
+ public String getType() { return type; }
+
+ public AbstractCppGenerator.Factory getFactory()
+ {
+ if( factory == null )
+ synchronized( this )
+ {
+ if( factory == null )
+ {
+ try
+ {
+ factory = (AbstractCppGenerator.Factory)element.createExecutableExtension( Attr_Class );
+ }
+ catch( CoreException e )
+ {
+ String id = element.getDeclaringExtension().getNamespaceIdentifier() + '.' + element.getDeclaringExtension().getSimpleIdentifier();
+ CodeGenPlugin.error( "Error in class attribute of " + id, e );
+ }
+ }
+ }
+
+ return factory;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/ProtocolGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/ProtocolGenerator.java
new file mode 100644
index 0000000..23bcbd3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/cpp/internal/ProtocolGenerator.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.cpp.internal;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.TypesUtil;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern.Output;
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Typedef;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AddressOfExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.Sizeof;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.StandardLibrary;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ExpressionStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ReturnStatement;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.Signal;
+
+public class ProtocolGenerator extends AbstractCppGenerator
+{
+ private final Protocol protocol;
+
+ public ProtocolGenerator( CppCodePattern cpp, Protocol protocol )
+ {
+ super( cpp );
+ this.protocol = protocol;
+ }
+
+ @Override
+ public String getLabel()
+ {
+ return super.getLabel() + ' ' + protocol.getName();
+ }
+
+ @Override
+ public boolean generate()
+ {
+ CppClass cls = cpp.getWritableCppClass( CppCodePattern.Output.ProtocolClass, protocol );
+ cls.addBase( CppClass.Access.PUBLIC, UMLRTRuntime.UMLRTProtocol.Element );
+ cpp.getCppEnum( Output.SignalId, protocol );
+
+ CppClass outSignals = cpp.getCppClass( CppCodePattern.Output.OutSignals, protocol );
+ CppClass inSignals = cpp.getCppClass( CppCodePattern.Output.InSignals, protocol );
+
+ Typedef baseRoleTypedef = new Typedef( outSignals.getType(), "Base" );
+ cls.addMember( CppClass.Visibility.PUBLIC, baseRoleTypedef );
+
+ Typedef conjRoleTypedef = new Typedef( inSignals.getType(), "Conjugate" );
+ cls.addMember( CppClass.Visibility.PUBLIC, conjRoleTypedef );
+
+ // The default interpretation is to send signal, so Base is for the set of signals
+ // that can be sent.
+ CppClass sendRole = getRole( CppCodePattern.Output.ProtocolBaseRole, baseRoleTypedef );
+ CppClass recvRole = getRole( CppCodePattern.Output.ProtocolConjugateRole, conjRoleTypedef );
+
+ for( Signal signal : XTUMLRTUtil.getSignals( protocol ) )
+ {
+ // Within the generated protocol class the signalId enumerator is accessed directly.
+ // Using the code pattern's access factory function would produce a fully qualified
+ // access expression.
+ Enumerator sigEnumerator = cpp.getEnumerator( CppCodePattern.Output.SignalId, signal, XTUMLRTUtil.getOwner( signal ) ); // TODO: Which should be the context?
+ switch( signal.getKind() )
+ {
+ case IN:
+ {
+ MemberFunction signalFunction = getSignalFunction( signal, sigEnumerator );
+ inSignals.addMember( CppClass.Visibility.PUBLIC, signalFunction );
+ recvRole.addMember( CppClass.Visibility.PUBLIC, getSignalRoleFunction( conjRoleTypedef, signalFunction, signal ) );
+ break;
+ }
+ case OUT:
+ {
+ MemberFunction signalFunction = getSignalFunction( signal, sigEnumerator );
+ outSignals.addMember( CppClass.Visibility.PUBLIC, signalFunction );
+ sendRole.addMember( CppClass.Visibility.PUBLIC, getSignalRoleFunction( baseRoleTypedef, signalFunction, signal ) );
+ break;
+ }
+ case INOUT:
+ {
+ MemberFunction signalFunction = getSignalFunction( signal, sigEnumerator );
+ inSignals.addMember( CppClass.Visibility.PUBLIC, signalFunction );
+ recvRole.addMember( CppClass.Visibility.PUBLIC, getSignalRoleFunction( conjRoleTypedef, signalFunction, signal ) );
+
+ signalFunction = getSignalFunction( signal, sigEnumerator );
+ outSignals.addMember( CppClass.Visibility.PUBLIC, signalFunction );
+ sendRole.addMember( CppClass.Visibility.PUBLIC, getSignalRoleFunction( baseRoleTypedef, signalFunction, signal ) );
+ break;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /* E.g.,
+ class PingPongProtocol_baserole : protected UMLRTPortRole, private PingPongProtocol::Base
+ {
+ public:
+ PingPongProtocol_baserole( UMLRTCommsPort * srcPort ) : UMLRTPortRole( srcPort ) { }
+ UMLRTSignal pingSignal( int ball, int volley ) const
+ {
+ return PingPongProtocol::Base::pingSignal( srcPort, ball, volley );
+ }
+ }; */
+ private CppClass getRole( CppCodePattern.Output kind, Typedef roleTypedef )
+ {
+ CppClass cls = cpp.getCppClass( kind, protocol );
+ cls.addBase( CppClass.Access.PROTECTED, UMLRTRuntime.UMLRTProtocol.Element );
+ cls.addBase( CppClass.Access.PRIVATE, roleTypedef );
+
+ Constructor ctor = cpp.getConstructor( kind, protocol );
+ Parameter param = new Parameter( UMLRTRuntime.UMLRTCommsPort.getType().ptr().const_(), "srcPort" );
+ ctor.add( param );
+
+ AbstractFunctionCall baseCtorCall = UMLRTRuntime.UMLRTProtocol.Ctor();
+ baseCtorCall.addArgument( new ElementAccess( param ) );
+ ctor.addBaseInitializer( baseCtorCall );
+
+ return cls;
+ }
+
+ private MemberFunction getSignalFunction( Signal signal, Enumerator sigEnumerator )
+ {
+ Parameter sourcePort = new Parameter( UMLRTRuntime.UMLRTCommsPort.getType().ptr().const_(), "sourcePort" );
+
+ MemberFunction f = new MemberFunction( UMLRTRuntime.UMLRTOutSignal.getType(), signal.getName(), Type.CVQualifier.CONST );
+ f.add( sourcePort );
+
+ Variable signalVar = new Variable( UMLRTRuntime.UMLRTOutSignal.getType(), "signal" );
+ f.add( signalVar );
+
+ Expression sizeofPayload = null;
+ Statement encodePayload = null;
+ if( ! signal.getParameters().isEmpty() )
+ {
+ org.eclipse.papyrusrt.xtumlrt.common.Parameter param = signal.getParameters().get( 0 );
+
+ Parameter p = createSignalParameter( param );
+ f.add( p );
+
+ sizeofPayload = new Sizeof( new ElementAccess( p ) );
+
+ encodePayload
+ = new ExpressionStatement(
+ StandardLibrary.memcpy(
+ UMLRTRuntime.UMLRTOutSignal.getPayload( new ElementAccess( signalVar ) ),
+ new AddressOfExpr( new ElementAccess( p ) ),
+ new Sizeof( new ElementAccess( p ) ) ) );
+ }
+
+ MemberFunctionCall call = new MemberFunctionCall( new ElementAccess( signalVar ), UMLRTRuntime.UMLRTSignal.initialize );
+ call.addArgument( new ElementAccess( sigEnumerator ) );
+ call.addArgument( new ElementAccess( sourcePort ) );
+ call.addArgument( sizeofPayload == null ? new IntegralLiteral( "0" ) : sizeofPayload );
+ f.add( call );
+
+ if( encodePayload != null )
+ f.add( encodePayload );
+
+ f.add( new ReturnStatement( new ElementAccess( signalVar ) ) );
+ return f;
+ }
+
+ private MemberFunction getSignalRoleFunction( Typedef roleTypedef, MemberFunction signalFunction, Signal signal )
+ {
+ MemberFunction f = new MemberFunction( UMLRTRuntime.UMLRTOutSignal.getType(), signal.getName(), Type.CVQualifier.CONST );
+
+ MemberFunctionCall call = new MemberFunctionCall( roleTypedef, signalFunction );
+ call.addArgument( new ElementAccess( UMLRTRuntime.UMLRTProtocol.srcPort ) );
+
+ if( ! signal.getParameters().isEmpty() )
+ {
+ org.eclipse.papyrusrt.xtumlrt.common.Parameter param = signal.getParameters().get( 0 );
+
+ Parameter p = createSignalParameter( param );
+ f.add( p );
+
+ call.addArgument( new ElementAccess( p ) );
+ }
+
+ f.add( new ReturnStatement( call ) );
+
+ return f;
+ }
+
+ private Parameter createSignalParameter( org.eclipse.papyrusrt.xtumlrt.common.Parameter param )
+ {
+ Type paramType = TypesUtil.createCppType( cpp, param, param.getType() );
+
+ // Non-primitive types should be passed to the signal function as const references.
+ if( ! ( paramType instanceof PrimitiveType )
+ && ! paramType.isIndirect() )
+ paramType = paramType.const_().ref();
+
+ return new Parameter( paramType, param.getName() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/CapsuleInstance.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/CapsuleInstance.java
new file mode 100644
index 0000000..ee74789
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/CapsuleInstance.java
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.instance.model;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrusrt.codegen.cpp.ConnectorReporter;
+import org.eclipse.papyrusrt.codegen.utils.QualifiedNames;
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart;
+import org.eclipse.papyrusrt.xtumlrt.common.Connector;
+import org.eclipse.papyrusrt.xtumlrt.common.ConnectorEnd;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol;
+import org.eclipse.papyrusrt.xtumlrt.common.Signal;
+
+public class CapsuleInstance implements ICapsuleInstance
+{
+ private final Capsule type;
+ private final CapsulePart part;
+ private final ICapsuleInstance container;
+ private final Integer index;
+ private final boolean dynamic;
+
+ private final Map<CapsulePart, List<CapsuleInstance>> contained = new HashMap<CapsulePart, List<CapsuleInstance>>();
+ private final Map<Port, PortInstance> ports = new HashMap<Port, PortInstance>();
+
+ /** Create the top-level capsule instance. */
+ public CapsuleInstance( Capsule top )
+ {
+ this.type = top;
+ this.part = null;
+ this.container = null;
+ this.index = null;
+ this.dynamic = false;
+
+ constructPortInstances();
+ constructCapsuleInstances();
+ }
+
+ @Override public Capsule getType() { return type; }
+ @Override public CapsulePart getCapsulePart() { return part; }
+ @Override public ICapsuleInstance getContainer() { return container; }
+ @Override public int getIndex() { return index == null ? 0 : index.intValue(); }
+ @Override public boolean isDynamic() { return dynamic; }
+ @Override public List<? extends ICapsuleInstance> getContained( CapsulePart part ) { return contained.get( part ); }
+ @Override public List<IPortInstance> getPorts() { return new ArrayList<IPortInstance>( ports.values() ); }
+ @Override public IPortInstance getPort( Port port ) { return ports.get( port ); }
+
+ /** Create a normal capsule instance. */
+ private CapsuleInstance( ICapsuleInstance container, Integer index, CapsulePart part, boolean dynamic )
+ {
+ this.type = part.getType();
+ this.part = part;
+ this.container = container;
+ this.index = index;
+ this.dynamic = dynamic;
+
+ constructPortInstances();
+ constructCapsuleInstances();
+ }
+
+ private void constructPortInstances()
+ {
+ for( Port port : XTUMLRTUtil.getAllRTPorts( type ) )
+ ports.put( port, new PortInstance( this, port ) );
+ }
+
+ private void constructCapsuleInstances()
+ {
+ for( CapsulePart part : XTUMLRTUtil.getAllCapsuleParts( type ) )
+ {
+ List<CapsuleInstance> instances = new ArrayList<CapsuleInstance>();
+
+ int lower = XTUMLRTUtil.getLowerBound( part );
+ int upper = XTUMLRTUtil.getUpperBound( part );
+ boolean dynamic = lower <= 0;
+ if( upper == 1 )
+ instances.add( new CapsuleInstance( this, null, part, dynamic ) );
+ else
+ for( int i = 0; i < upper; ++i )
+ {
+ if( i == lower )
+ dynamic = true;
+
+ instances.add( new CapsuleInstance( this, i, part, dynamic ) );
+ }
+
+ contained.put( part, instances );
+ }
+ }
+
+ public void connect( ConnectorReporter connReporter, boolean shallow )
+ {
+ // Connect all of the instances for this capsule's parts.
+ for( Connector connector : XTUMLRTUtil.getAllConnectors( type ) )
+ connect( connReporter, connector );
+
+ // Now connect all of the contained capsules.
+ if( ! shallow )
+ for( List<CapsuleInstance> capsuleInstances : contained.values() )
+ for( CapsuleInstance capsuleInstance : capsuleInstances )
+ capsuleInstance.connect( connReporter == null ? null : connReporter.createInner( capsuleInstance ), false );
+ }
+
+ public static class End
+ {
+ public final CapsulePart part;
+ public final Port port;
+ public final int numParts;
+ public final int numPortInstances;
+
+ public End( CapsulePart containingPart, ConnectorEnd connectorEnd )
+ {
+ CapsulePart p = connectorEnd.getPartWithPort();
+
+ this.part = p == null ? containingPart : p;
+ this.port = connectorEnd.getRole();
+ this.numParts = ( part == null ? 1 : XTUMLRTUtil.getUpperBound( part ) );
+ this.numPortInstances = numParts * XTUMLRTUtil.getUpperBound( port );
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder str = new StringBuilder();
+ str.append( part.getName() );
+ str.append( '.' );
+ str.append( port.getName() );
+ str.append( "{numPortInstances:" );
+ str.append( numPortInstances );
+ str.append( ", numParts:" );
+ str.append( numParts );
+ str.append( '}' );
+ return str.toString();
+ }
+ }
+
+ private static class ConnectorBuilder
+ {
+ public final End primary;
+ public final End secondary;
+
+ public ConnectorBuilder( End end0, End end1 )
+ {
+ // The end with the most actual port instances is the primary side.
+ if( end0.numPortInstances >= end1.numPortInstances )
+ {
+ this.primary = end0;
+ this.secondary = end1;
+ }
+ else
+ {
+ this.primary = end1;
+ this.secondary = end0;
+ }
+ }
+ }
+
+ private Iterable<CapsuleInstance> getInstancesFor( CapsulePart part )
+ {
+ Iterable<CapsuleInstance> instances = contained.get( part );
+ return instances == null ? java.util.Collections.singletonList( this ) : instances;
+ }
+
+ // Bug 242: Ports with the same conjugation are compatible if their protocols both have only
+ // symmetric signals.
+ private static boolean isSameConjugationCompatible( Port port0, Port port1 )
+ {
+ Protocol t0 = port0.getType();
+ if( t0 == null )
+ throw new RuntimeException( "invalid attempt to generate ports " + QualifiedNames.fullName( port0 ) + " without Protocol" );
+
+ Protocol t1 = port1.getType();
+ if( t1 == null )
+ throw new RuntimeException( "invalid attempt to generate ports " + QualifiedNames.fullName( port1 ) + " without Protocol" );
+
+ Iterator<Signal> outSignals0 = XTUMLRTUtil.getOutSignals( t0 ).iterator();
+ if( outSignals0.hasNext() )
+ return false;
+
+ Iterator<Signal> outSignals1 = XTUMLRTUtil.getOutSignals( t1 ).iterator();
+ if( outSignals1.hasNext() )
+ return false;
+
+ return true;
+ }
+
+ private void connect( ConnectorReporter connReporter, Connector connector )
+ {
+ ConnectorEnd[] ends = connector.getEnds().toArray( new ConnectorEnd[2] );
+ if( ends.length != 2 )
+ return;
+
+ ConnectorBuilder cb = new ConnectorBuilder( new End( part, ends[0] ), new End( part, ends[1] ) );
+
+ // If both ports have the same conjugation AND exactly one of the ports does not
+ // have a part, then the part-less port becomes a relay for the other. This means
+ // this port instance is deleted and it's farEnd is used for the connection.
+ // Otherwise the ports are connected.
+ boolean isRelay0 = false;
+ boolean isRelay1 = false;
+ if( cb.primary.port.isConjugate() == cb.secondary.port.isConjugate() )
+ {
+ // Charles' demo model turns two border ports into relays. I'm not sure if this should
+ // be supported, but this will get the demo to work.
+ if( cb.primary.part == part )
+ isRelay0 = ports.containsKey( cb.primary.port );
+ if( cb.secondary.part == part )
+ isRelay1 = ports.containsKey( cb.secondary.port );
+
+ if( ! isRelay0 && ! isRelay1
+ && ! isSameConjugationCompatible( cb.primary.port, cb.secondary.port ) )
+ throw new RuntimeException( "invalid attempt to connect ports with incompatible conjugation" );
+ }
+
+ int perPrimaryRole = cb.secondary.numPortInstances / cb.primary.numParts;
+ Iterator<CapsuleInstance> secondaryCapsuleIterator = getInstancesFor( cb.secondary.part ).iterator();
+ CapsuleInstance secondaryCapsule = secondaryCapsuleIterator.hasNext() ? secondaryCapsuleIterator.next() : null;
+ for( CapsuleInstance cap0 : getInstancesFor( cb.primary.part ) )
+ for( int i = 0; secondaryCapsule != null && i < perPrimaryRole; ++i )
+ {
+ PortInstance.FarEnd farEnd0 = cap0.createFarEnd( cb.primary.port, isRelay0 );
+ PortInstance.FarEnd farEnd1 = secondaryCapsule.createFarEnd( cb.secondary.port, isRelay1 );
+
+ // If all far ends have been consumed, then advance to the next the secondary capsule instance.
+ if( farEnd1 == null )
+ {
+ // Earlier checks confirm that there should be enough instances.
+ if( ! secondaryCapsuleIterator.hasNext() )
+ throw new RuntimeException( "not enough secondary capsule instances to connect " + cb.primary.toString() + " and " + cb.secondary.toString() + " with " + connector.getName() );
+
+ secondaryCapsule = secondaryCapsuleIterator.next();
+ farEnd1 = secondaryCapsule.createFarEnd( cb.secondary.port, isRelay1 );
+ }
+
+ farEnd0.connectWith( farEnd1 );
+ farEnd1.connectWith( farEnd0 );
+
+ if( connReporter != null )
+ connReporter.record( connector, farEnd0, farEnd1 );
+ }
+ }
+
+ private PortInstance.FarEnd createFarEnd( Port umlPort, boolean isRelay )
+ {
+ PortInstance portInstance = ports.get( umlPort );
+ if( portInstance == null )
+ return null;
+
+ PortInstance.FarEnd far = null;
+
+ // If we need a relay port and the existing instance can be converted to a
+ // relay then do so.
+ if( isRelay )
+ far = portInstance.convertToRelay();
+
+ // Otherwise either we don't want a relay, or the existing instance cannot be
+ // converted. In both cases try to create a new end.
+ return far == null ? portInstance.createFarEnd() : far;
+ }
+
+ @Override
+ public String getQualifiedName( char sep )
+ {
+ String base = null;
+ if( part != null )
+ base = part.getName();
+ else
+ {
+ // NOTE: The previous instance model did not have lower-case char, so the new one
+ // cannot either. The problem is the strings in the allocations file.
+ String name = type.getName();
+ if( name == null || name.isEmpty() )
+ base = "Top";
+// else if( Character.isLowerCase( name.charAt( 0 ) ) )
+ base = name;
+// else
+// base = Character.toLowerCase( name.charAt( 0 ) )
+// + ( name.length() > 1 ? name.substring( 1 ) : "" );
+ }
+
+ if( container != null )
+ base = container.getQualifiedName( sep ) + sep + base;
+ if( index == null )
+ return base;
+
+ switch( sep )
+ {
+ case '.':
+ return base + '[' + index + ']';
+ case '_':
+ default:
+ return base + sep + index;
+ }
+ }
+
+ @Override
+ public List<ICapsuleInstance> getContained()
+ {
+ List<ICapsuleInstance> list = new ArrayList<ICapsuleInstance>();
+ for( List<CapsuleInstance> capsules : contained.values() )
+ list.addAll( capsules );
+ return list;
+ }
+
+ @Override public String toString() { return getQualifiedName( '.' ); }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/ICapsuleInstance.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/ICapsuleInstance.java
new file mode 100644
index 0000000..d0e6c7b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/ICapsuleInstance.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.instance.model;
+
+import java.util.List;
+
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+
+public interface ICapsuleInstance
+{
+ public Capsule getType();
+ public CapsulePart getCapsulePart();
+ public ICapsuleInstance getContainer();
+ public int getIndex();
+ public String getQualifiedName( char sep );
+ public List<IPortInstance> getPorts();
+ public IPortInstance getPort( Port port );
+
+ public boolean isDynamic();
+ public List<ICapsuleInstance> getContained();
+ public List<? extends ICapsuleInstance> getContained( CapsulePart part );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/IPortInstance.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/IPortInstance.java
new file mode 100644
index 0000000..ddaaff8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/IPortInstance.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.instance.model;
+
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+
+public interface IPortInstance
+{
+ public ICapsuleInstance getContainer();
+ public Port getType();
+ public Iterable<? extends IPortInstance.IFarEnd> getFarEnds();
+ public String getName();
+ public boolean isRelay();
+
+ public interface IFarEnd
+ {
+ public int getIndex();
+ public ICapsuleInstance getContainer();
+ public Port getType();
+ public IPortInstance getOwner();
+
+ public void connectWith( IFarEnd other );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/PortInstance.java b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/PortInstance.java
new file mode 100644
index 0000000..664ce96
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.cpp/src/org/eclipse/papyrusrt/codegen/instance/model/PortInstance.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.instance.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil;
+import org.eclipse.papyrusrt.xtumlrt.common.Port;
+
+public class PortInstance implements IPortInstance
+{
+ private final ICapsuleInstance container;
+ private final Port type;
+ private final List<FarEnd> farEnds;
+ private int unconnectedFarEnds;
+ private boolean isRelay = false;
+
+ public PortInstance( ICapsuleInstance container, Port type )
+ {
+ this.container = container;
+ this.type = type;
+ this.unconnectedFarEnds = XTUMLRTUtil.getUpperBound( type );
+ this.farEnds = new ArrayList<FarEnd>( unconnectedFarEnds );
+ }
+
+ @Override public ICapsuleInstance getContainer() { return container; }
+ @Override public Port getType() { return type; }
+ @Override public String getName() { return type.getName(); }
+ @Override public Iterable<? extends IPortInstance.IFarEnd> getFarEnds() { return farEnds; }
+ @Override public boolean isRelay() { return isRelay; }
+
+ /**
+ * Mark this as a release port. Disconnect and return the current far end.
+ */
+ public FarEnd convertToRelay()
+ {
+ // TODO This flag should not be required.
+ isRelay = true;
+
+ // If a far end has already been created, then remove and disconnect
+ // it from this port. If there aren't any farEnds, then try to make a new
+ // one. If that fails, then this cannot become a relay.
+
+ if( farEnds.isEmpty() )
+ {
+ if( unconnectedFarEnds <= 0 )
+ throw new RuntimeException( "out of port instances, cannot create relay port for " + type.getName() );
+ return createFarEnd();
+ }
+
+ FarEnd far = farEnds.remove( 0 );
+ far.disconnectFrom( this );
+ return far;
+ }
+
+ /** Create and return a new FarEnd (for this port) if possible and null otherwise. */
+ public FarEnd createFarEnd()
+ {
+ if( unconnectedFarEnds <= 0 )
+ return null;
+
+ --unconnectedFarEnds;
+ return new FarEnd( farEnds.size() );
+ }
+
+ public class FarEnd implements IPortInstance.IFarEnd
+ {
+ private final int index;
+ public FarEnd( int index ) { this.index = index; }
+
+ @Override public int getIndex() { return index; }
+ @Override public ICapsuleInstance getContainer() { return container; }
+ @Override public Port getType() { return type; }
+ @Override public void connectWith( IFarEnd other ) { farEnds.add( (FarEnd)other ); }
+
+ @Override public IPortInstance getOwner() { return PortInstance.this; }
+
+ private boolean isOwnedBy( IPortInstance port ) { return port == PortInstance.this; }
+
+ private FarEnd disconnectFrom( PortInstance other )
+ {
+ for( FarEnd far : farEnds )
+ if( far.isOwnedBy( other ) )
+ {
+ farEnds.remove( far );
+ return far;
+ }
+
+ return null;
+ }
+
+ @Override public String toString() { return PortInstance.this.toString() + ".far[" + index + ']'; }
+ }
+
+ @Override public String toString() { return container.toString() + '#' + type.getName(); }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.classpath b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.project b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.project
new file mode 100644
index 0000000..8342f58
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.lang.cpp.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7fbc3e0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT C++ Language Model Tests
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.lang.cpp.test
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.junit,
+ org.eclipse.papyrusrt.codegen.lang.cpp
+Export-Package: org.eclipse.papyrusrt.codegen.lang.cpp.test.util
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/about.html b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/about.properties b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/build.properties b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/build.properties
new file mode 100644
index 0000000..17daa5b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/pom.xml
new file mode 100644
index 0000000..37fa049
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.lang.cpp.test</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/BasicTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/BasicTest.java
new file mode 100644
index 0000000..5649286
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/BasicTest.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AddressOfExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BinaryOperation;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CastExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.DereferenceExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IndexExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.LogicalComparison;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.UnaryOperation;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ExpressionStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ForStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.WhileStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class BasicTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_while()
+ {
+ IntegralLiteral cond = new IntegralLiteral( 0 );
+ WhileStatement whileStmt = new WhileStatement( cond );
+
+ assertTrue( whileStmt.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "while( 0 )",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test02_simpleFor()
+ {
+ Variable i = new Variable( PrimitiveType.INT, "i", new IntegralLiteral( 0 ) );
+ Expression cond
+ = new LogicalComparison(
+ new ElementAccess( i ),
+ LogicalComparison.Operator.LESS_THAN,
+ new IntegralLiteral( 5 ) );
+ ForStatement forStmt
+ = new ForStatement(
+ i,
+ cond,
+ new UnaryOperation(
+ UnaryOperation.Operator.PRE_INCREMENT,
+ new ElementAccess( i ) ) );
+
+ assertTrue( forStmt.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "for( int i = 0; i < 5; ++i )",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test03_forWithPtr()
+ {
+ Variable array = new Variable( PrimitiveType.INT.arrayOf( new IntegralLiteral( 5 ) ), "array" );
+ Variable i = new Variable( PrimitiveType.INT.ptr(), "i", new ElementAccess( array ) );
+ Variable e = new Variable( PrimitiveType.INT.ptr(), "e", new AddressOfExpr( new IndexExpr( new ElementAccess( array ), new IntegralLiteral( 5 ) ) ) );
+ Expression cond = new LogicalComparison( new ElementAccess( i ), LogicalComparison.Operator.LESS_THAN, new ElementAccess( e ) );
+ ForStatement forStmt
+ = new ForStatement(
+ i,
+ cond,
+ new UnaryOperation(
+ UnaryOperation.Operator.PRE_INCREMENT,
+ new ElementAccess( i ) ) );
+ assertTrue( forStmt.addLoopVar( e ) );
+ forStmt.add(
+ new ExpressionStatement(
+ new BinaryOperation(
+ new DereferenceExpr( new ElementAccess( i ) ),
+ BinaryOperation.Operator.ASSIGN,
+ new IntegralLiteral( 42 ) ) ) );
+
+ assertTrue( array.write( out.decl() ) );
+ assertTrue( forStmt.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "int array[5];",
+ "for( int * i = array, e = &array[5]; i < e; ++i )",
+ " *i = 42;" );
+ }
+
+ @Test
+ public void test04_cast()
+ {
+ CastExpr cast = new CastExpr( PrimitiveType.INT, new IntegralLiteral( 5 ) );
+
+ assertTrue( cast.write( out.decl() ) );
+ assertDeclFormattedAs( "(int)5" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ConditionalStatementTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ConditionalStatementTest.java
new file mode 100644
index 0000000..aa785c1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ConditionalStatementTest.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.Literal;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.CodeBlock;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ConditionalStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ExpressionStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class ConditionalStatementTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simpleCondition()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Literal one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ ConditionalStatement cond = new ConditionalStatement();
+ cond.add( one );
+ function.add( cond );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " if( 1 )",
+ " {",
+ " }",
+ "}" );
+ }
+
+ @Test
+ public void test02_conditionWithElse()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Literal one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ ConditionalStatement cond = new ConditionalStatement();
+ cond.add( one );
+ cond.defaultBlock().add( new ExpressionStatement( one ) );
+
+ function.add( cond );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " if( 1 )",
+ " {",
+ " }",
+ " else",
+ " 1;",
+ "}" );
+ }
+
+ @Test
+ public void test03_conditionWithElseIf()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Literal one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ ConditionalStatement cond = new ConditionalStatement();
+ cond.add( one );
+ cond.add( one );
+
+ function.add( cond );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " if( 1 )",
+ " {",
+ " }",
+ " else if( 1 )",
+ " {",
+ " }",
+ "}" );
+ }
+
+ @Test
+ public void test04_danglingElse()
+ {
+ /* This can be this or this
+ * if( 1 ) if( 1 ) if( 1 )
+ * { {
+ * if( 2 ) if( 2 ) if( 2 )
+ * ; ; ;
+ * }
+ * else else else
+ * ; ; ;
+ * }
+ */
+
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Literal one = new IntegralLiteral( "1" );
+ Literal two = new IntegralLiteral( "2" );
+
+ ConditionalStatement outerCond = new ConditionalStatement();
+ CodeBlock outerBlock = outerCond.add( one );
+
+ ConditionalStatement innerCond = new ConditionalStatement();
+ innerCond.add( two );
+ innerCond.defaultBlock().add( new ExpressionStatement( one ) );
+
+ outerBlock.add( innerCond );
+
+ function.add( outerCond );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " if( 1 )",
+ " {",
+ " if( 2 )",
+ " {",
+ " }",
+ " else",
+ " 1;",
+ " }",
+ "}" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/CppClassTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/CppClassTest.java
new file mode 100644
index 0000000..647a310
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/CppClassTest.java
@@ -0,0 +1,482 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type.CVQualifier;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberField;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Typedef;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class CppClassTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simple()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ assertEquals( "T", cppClass.getName().getIdentifier() );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "};" );
+ }
+
+ @Test
+ public void test02_publicFunction()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ MemberFunction f = new MemberFunction( PrimitiveType.VOID, "f" );
+ cppClass.addMember( CppClass.Visibility.PUBLIC, f );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " void f();",
+ "};" );
+ assertDefnFormattedAs(
+ "void T::f()",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test03_constFunction()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ MemberFunction f = new MemberFunction( PrimitiveType.VOID, "f", CVQualifier.CONST );
+ cppClass.addMember( CppClass.Visibility.PRIVATE, f );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ " void f() const;",
+ "};" );
+ assertDefnFormattedAs(
+ "void T::f() const",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test04_constRetType()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ Type constInt = PrimitiveType.INT.const_();
+ assertNotNull( constInt );
+
+ MemberFunction f = new MemberFunction( constInt, "f", CVQualifier.CONST );
+ cppClass.addMember( CppClass.Visibility.PRIVATE, f );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ " const int f() const;",
+ "};" );
+ assertDefnFormattedAs(
+ "const int T::f() const",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test05_mergeVisibilitySections()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ MemberFunction f = new MemberFunction( PrimitiveType.VOID, "f" );
+ assertNotNull( f );
+
+ cppClass.addMember( CppClass.Visibility.PRIVATE, f );
+ cppClass.addMember( CppClass.Visibility.PUBLIC, f );
+ cppClass.addMember( CppClass.Visibility.PUBLIC, f );
+ cppClass.addMember( CppClass.Visibility.PROTECTED, f );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ " void f();",
+ "public:",
+ " void f();",
+ " void f();",
+ "protected:",
+ " void f();",
+ "};" );
+ }
+
+ @Test
+ public void test06_publicVar()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ MemberField field = new MemberField( PrimitiveType.INT, "i" );
+ assertNotNull( field );
+
+ cppClass.addMember( CppClass.Visibility.PUBLIC, field );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " int i;",
+ "};" );
+ }
+
+ @Test
+ public void test07_statics()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ cppClass.addStaticMember( CppClass.Visibility.PUBLIC, new MemberField( PrimitiveType.INT, "i" ) );
+ cppClass.addStaticMember( CppClass.Visibility.PUBLIC, new MemberField( PrimitiveType.INT, "i5", new IntegralLiteral( 5 ) ) );
+ cppClass.addStaticMember( CppClass.Visibility.PUBLIC, new MemberFunction( PrimitiveType.VOID, "f" ) );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " static int i;",
+ " static int i5;",
+ " static void f();",
+ "};" );
+ assertDefnFormattedAs(
+ "int T::i;",
+ "int T::i5( 5 );",
+ "",
+ "",
+ "void T::f()",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test08_struct()
+ {
+ CppClass cppStruct = new CppClass( CppClass.Kind.STRUCT, "S" );
+ assertNotNull( cppStruct );
+
+ cppStruct.addMember( CppClass.Visibility.PUBLIC, new MemberField( PrimitiveType.INT, "i" ) );
+ cppStruct.addMember( CppClass.Visibility.PRIVATE, new MemberFunction( PrimitiveType.VOID, "f" ) );
+
+ assertTrue( cppStruct.write( out ) );
+ assertDeclFormattedAs(
+ "struct S",
+ "{",
+ " int i;",
+ "private:",
+ " void f();",
+ "};" );
+ }
+
+ @Test
+ public void test09_memberEnum()
+ {
+ CppEnum member = new CppEnum( "E" );
+ CppClass cls = new CppClass( "T" );
+
+ cls.addMember( CppClass.Visibility.PUBLIC, member );
+
+ assertTrue( cls.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " enum E",
+ " {",
+ " };",
+ "};" );
+ }
+
+ @Test
+ public void test10_memberClass()
+ {
+ CppClass member = new CppClass( "member_t" );
+ member.addMember( CppClass.Visibility.PRIVATE, new MemberFunction( PrimitiveType.VOID, "f" ) );
+
+ CppClass cls = new CppClass( "T" );
+
+ cls.addMember( CppClass.Visibility.PUBLIC, member );
+
+ assertTrue( cls.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " class member_t",
+ " {",
+ " void f();",
+ " };",
+ "};" );
+ assertDefnFormattedAs(
+ "void T::member_t::f()",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test11_fieldAccess()
+ {
+ MemberField field = new MemberField( PrimitiveType.INT, "field" );
+ CppClass cls = new CppClass( "T" );
+ cls.addMember( CppClass.Visibility.PUBLIC, field );
+
+ Variable val = new Variable( cls.getType(), "val" );
+ Variable ptr = new Variable( cls.getType().ptr(), "ptr" );
+
+ ElementAccess valAccess = new ElementAccess( val );
+ ElementAccess ptrAccess = new ElementAccess( ptr );
+
+ MemberAccess fieldFromVal = new MemberAccess( valAccess, field );
+ MemberAccess fieldFromPtr = new MemberAccess( ptrAccess, field );
+
+ assertTrue( fieldFromVal.write( out.decl() ) );
+ out.decl().newline();
+ assertTrue( fieldFromPtr.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "val.field",
+ "ptr->field" );
+ }
+
+ @Test
+ public void test12_functionAccess()
+ {
+ MemberFunction func = new MemberFunction( PrimitiveType.INT, "func" );
+ CppClass cls = new CppClass( "T" );
+ cls.addMember( CppClass.Visibility.PUBLIC, func );
+
+ Variable val = new Variable( cls.getType(), "val" );
+ Variable ptr = new Variable( cls.getType().ptr(), "ptr" );
+
+ ElementAccess valAccess = new ElementAccess( val );
+ ElementAccess ptrAccess = new ElementAccess( ptr );
+
+ MemberAccess funcFromVal = new MemberAccess( valAccess, func );
+ MemberAccess funcFromPtr = new MemberAccess( ptrAccess, func );
+
+ assertTrue( funcFromVal.write( out.decl() ) );
+ out.decl().newline();
+ assertTrue( funcFromPtr.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "val.func",
+ "ptr->func" );
+ }
+
+ @Test
+ public void test13_functionCall()
+ {
+ MemberFunction func = new MemberFunction( PrimitiveType.INT, "func" );
+ CppClass cls = new CppClass( "T" );
+ cls.addMember( CppClass.Visibility.PUBLIC, func );
+
+ Variable val = new Variable( cls.getType(), "val" );
+ Variable ptr = new Variable( cls.getType().ptr(), "ptr" );
+
+ ElementAccess valAccess = new ElementAccess( val );
+ ElementAccess ptrAccess = new ElementAccess( ptr );
+
+ MemberFunctionCall callVal = new MemberFunctionCall( valAccess, func );
+ MemberFunctionCall callPtr = new MemberFunctionCall( ptrAccess, func );
+
+ assertTrue( callVal.write( out.decl() ) );
+ out.decl().newline();
+ assertTrue( callPtr.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "val.func()",
+ "ptr->func()" );
+ }
+
+ @Test
+ public void test14_typedefMember()
+ {
+ Typedef typedef = new Typedef( PrimitiveType.INT, "INT" );
+ CppClass cls = new CppClass( "T" );
+ cls.addMember( CppClass.Visibility.PRIVATE, typedef );
+
+ assertTrue( cls.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ " typedef int INT;",
+ "};" );
+ }
+
+ @Test
+ public void test15_virtualFunction()
+ {
+ CppClass cppClass = new CppClass( "T" );
+ assertNotNull( cppClass );
+
+ MemberFunction f = new MemberFunction( PrimitiveType.VOID, "f" );
+ f.setVirtual();
+ assertNotNull( f );
+
+ cppClass.addMember( CppClass.Visibility.PUBLIC, f );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " virtual void f();",
+ "};" );
+ }
+
+ @Test
+ public void test16_inheritance()
+ {
+ CppClass b1 = new CppClass( "B1" );
+ CppClass b2 = new CppClass( "B2" );
+ CppClass b3 = new CppClass( "B3" );
+
+ CppClass cppClass = new CppClass( "T" );
+ cppClass.addBase( CppClass.Access.PUBLIC, b1 );
+ cppClass.addBase( CppClass.Access.PROTECTED, b2 );
+ cppClass.addBase( CppClass.Access.PRIVATE, b3 );
+
+ assertTrue( cppClass.write( out ) );
+ assertDeclFormattedAs(
+ "class T : public B1, protected B2, private B3",
+ "{",
+ "};" );
+ }
+
+ @Test
+ public void test17_nestedBase()
+ {
+ CppClass nested = new CppClass( "Nested" );
+ CppClass base = new CppClass( "Base" );
+ base.addMember( CppClass.Visibility.PUBLIC, nested );
+
+ CppClass derived = new CppClass( "Derived" );
+ derived.addBase( CppClass.Access.PUBLIC, nested );
+
+ assertTrue( derived.write( out ) );
+ assertDeclFormattedAs(
+ "class Derived : public Base::Nested",
+ "{",
+ "};" );
+ }
+
+ @Test
+ public void test18_ctor()
+ {
+ CppClass t = new CppClass( "T" );
+ Constructor ctor = new Constructor();
+ t.addMember( CppClass.Visibility.PUBLIC, ctor );
+
+ assertTrue( t.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " T();",
+ "};" );
+ assertDefnFormattedAs(
+ "T::T()",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test19_baseCtor()
+ {
+ CppClass b = new CppClass( "B" );
+ Constructor bCtor = new Constructor();
+ b.addMember( CppClass.Visibility.PUBLIC, bCtor );
+
+ CppClass d = new CppClass( "D" );
+ d.addBase( CppClass.Access.PUBLIC, b );
+ Constructor dCtor = new Constructor();
+ dCtor.addBaseInitializer( new ConstructorCall( bCtor, new IntegralLiteral( "5" ) ) );
+ d.addMember( CppClass.Visibility.PUBLIC, dCtor );
+
+ assertTrue( d.write( out ) );
+ assertDeclFormattedAs(
+ "class D : public B",
+ "{",
+ "public:",
+ " D();",
+ "};" );
+ assertDefnFormattedAs(
+ "D::D()",
+ ": B( 5 )",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test20_nonStaticFieldInit()
+ {
+ MemberField field1 = new MemberField( PrimitiveType.INT, "field1" );
+ MemberField field2 = new MemberField( PrimitiveType.INT, "field2" );
+
+ CppClass t = new CppClass( "T" );
+ t.addMember( CppClass.Visibility.PRIVATE, field1 );
+ t.addMember( CppClass.Visibility.PRIVATE, field2 );
+
+ Constructor ctor = new Constructor();
+ ctor.addFieldInitializer( field1, new IntegralLiteral( "5" ) );
+ ctor.addFieldInitializer( field2, new IntegralLiteral( "42" ) );
+ t.addMember( CppClass.Visibility.PUBLIC, ctor );
+
+ assertTrue( t.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ "public:",
+ " T();",
+ "private:",
+ " int field1;",
+ " int field2;",
+ "};" );
+ assertDefnFormattedAs(
+ "T::T()",
+ ": field1( 5 )",
+ ", field2( 42 )",
+ "{",
+ "}" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/CppEnumTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/CppEnumTest.java
new file mode 100644
index 0000000..08a412a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/CppEnumTest.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class CppEnumTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simple()
+ {
+ CppEnum cppEnum = new CppEnum( "Ids" );
+ assertNotNull( cppEnum );
+
+ assertTrue( cppEnum.write( out ) );
+ assertDeclFormattedAs(
+ "enum Ids",
+ "{",
+ "};" );
+ }
+
+ @Test
+ public void test02_enumerators()
+ {
+ CppEnum cppEnum = new CppEnum( "Ids" );
+ assertNotNull( cppEnum );
+
+ IntegralLiteral one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ Enumerator enumerator_1 = new Enumerator( "one", one );
+ assertNotNull( enumerator_1 );
+ cppEnum.add( enumerator_1 );
+
+ Enumerator enumerator_2 = new Enumerator( "two" );
+ assertNotNull( enumerator_2 );
+ cppEnum.add( enumerator_2 );
+
+ assertTrue( cppEnum.write( out ) );
+ assertDeclFormattedAs(
+ "enum Ids",
+ "{",
+ " one = 1,",
+ " two",
+ "};" );
+ }
+
+ @Test
+ public void test03_bug47_accessing_enumerators()
+ {
+ CppEnum cppEnum = new CppEnum( "E" );
+ Enumerator enumerator_1 = new Enumerator( "e" );
+ cppEnum.add( enumerator_1 );
+
+ assertTrue( new ElementAccess( enumerator_1 ).write( out.decl() ) );
+ assertDeclFormattedAs( "e" );
+ }
+
+ @Test
+ public void test04_accessingMemberEnumerators()
+ {
+ CppEnum cppEnum = new CppEnum( "E" );
+ Enumerator enumerator_1 = new Enumerator( "e" );
+ cppEnum.add( enumerator_1 );
+
+ CppClass cls = new CppClass( "T" );
+ cls.addMember( CppClass.Visibility.PRIVATE, cppEnum );
+ enumerator_1.setParent( cls );
+
+ assertTrue( new MemberAccess( cls, enumerator_1 ).write( out.decl() ) );
+ assertDeclFormattedAs( "T::e" );
+ }
+
+ @Test
+ public void test05_firstLiteral()
+ {
+ Expression two = new IntegralLiteral( 2 );
+
+ CppClass cls = new CppClass( "T" );
+
+ CppEnum cppEnum = new CppEnum( cls, "Ids", two );
+ assertNotNull( cppEnum );
+
+ cls.addMember( CppClass.Visibility.PRIVATE, cppEnum );
+
+ Enumerator enumerator = cppEnum.add( "first" );
+ assertNotNull( enumerator );
+
+ assertNotNull( cppEnum.add( "second" ) );
+
+ assertTrue( cls.write( out ) );
+ assertDeclFormattedAs(
+ "class T",
+ "{",
+ " enum Ids",
+ " {",
+ " first = 2,",
+ " second",
+ " };",
+ "};" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/DependencyTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/DependencyTest.java
new file mode 100644
index 0000000..fced4a6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/DependencyTest.java
@@ -0,0 +1,395 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.Dependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.TypeDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberField;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass.Visibility;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BlockInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IndexExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class DependencyTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simpleForwardDecl()
+ {
+ CppClass cls = new CppClass( "T" );
+ Variable var = new Variable( cls.getType().ptr(), "t" );
+
+ ElementList elements = new ElementList( new FileName( "file" ) );
+ elements.addElement( var );
+
+ assertTrue( elements.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef FILE_HH",
+ "#define FILE_HH",
+ "",
+ "class T;",
+ "",
+ "T * t;",
+ "",
+ "#endif" );
+ }
+
+ @Test
+ public void test02_simpleInclude()
+ {
+ ElementList elements1 = new ElementList( new FileName( "file1" ) );
+ CppClass cls = new CppClass( "T" );
+ elements1.addElement( cls );
+
+ ElementList elements2 = new ElementList( new FileName( "file2" ) );
+ Variable var = new Variable( cls.getType(), "t" );
+ elements2.addElement( var );
+
+ assertTrue( elements2.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef FILE2_HH",
+ "#define FILE2_HH",
+ "",
+ "#include \"file1.hh\"",
+ "",
+ "T t;",
+ "",
+ "#endif" );
+ }
+
+ @Test
+ public void test03_bug61_indirectDependencies()
+ {
+ ElementList elements1 = new ElementList( new FileName( "file1" ) );
+ CppClass cls = new CppClass( "T" );
+ elements1.addElement( cls );
+
+ ElementList elements1b = new ElementList( new FileName( "file1b" ) );
+ CppClass clsb = new CppClass( "Tb" );
+ elements1b.addElement( clsb );
+
+ ElementList elements2 = new ElementList( new FileName( "file2" ) );
+ CppClass cls2 = new CppClass( "T2" );
+ cls2.addMember( CppClass.Visibility.PRIVATE, new MemberFunction( cls.getType(), "func" ) );
+ cls2.addMember( CppClass.Visibility.PRIVATE, new MemberField( clsb.getType(), "field" ) );
+ elements2.addElement( cls2 );
+
+ assertTrue( elements2.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef FILE2_HH",
+ "#define FILE2_HH",
+ "",
+ "#include \"file1.hh\"",
+ "#include \"file1b.hh\"",
+ "",
+ "class T2",
+ "{",
+ " T func();",
+ " Tb field;",
+ "};",
+ "",
+ "#endif" );
+ }
+
+ @Test
+ public void test04_sortingOfUse()
+ {
+ // The element names sort in a different order than the files. This checks that
+ // the sort is actually based on the file.
+
+ CppClass Tb = new CppClass( "Tb" );
+ ElementList file1 = new ElementList( new FileName( "file1" ) );
+ file1.addElement( Tb );
+ Dependency dep1 = new TypeDependency( Tb.getType() );
+
+ CppClass Ta = new CppClass( "Ta" );
+ ElementList file2 = new ElementList( new FileName( "file2" ) );
+ file2.addElement( Ta );
+ Dependency dep2 = new TypeDependency( Ta.getType() );
+
+ assertEquals( -1, dep1.compareTo( dep2 ) );
+ }
+
+ @Test
+ public void test05_sortingOfReference()
+ {
+ // The element names sort in a different order than the files. This checks that
+ // the sort is actually based on the file.
+
+ CppClass T1 = new CppClass( "T1" );
+ ElementList filea = new ElementList( new FileName( "filea" ) );
+ filea.addElement( T1 );
+ Dependency dep1 = new TypeDependency( T1.getType().ptr() );
+
+ CppClass T2 = new CppClass( "T2" );
+ ElementList fileb = new ElementList( new FileName( "fileb" ) );
+ fileb.addElement( T2 );
+ Dependency dep2 = new TypeDependency( T2.getType().ptr() );
+
+ assertEquals( -1, dep1.compareTo( dep2 ) );
+ }
+
+ @Test
+ public void test06_sortedDepList()
+ {
+ // Add elements in the inverse order and make sure they are generated properly.
+
+ CppClass T1 = new CppClass( "T1" );
+ ElementList file1 = new ElementList( new FileName( "file1" ) );
+ file1.addElement( T1 );
+ Variable varb1 = new Variable( T1.getType(), "varb1" );
+ Variable varb2 = new Variable( T1.getType(), "varb2" );
+
+ CppClass T2 = new CppClass( "T2" );
+ ElementList file2 = new ElementList( new FileName( "file2" ) );
+ file2.addElement( T2 );
+ Variable vara = new Variable( T2.getType(), "vara" );
+
+ ElementList elements = new ElementList( new FileName( "file" ) );
+ elements.addElement( vara );
+ elements.addElement( varb1 );
+ elements.addElement( varb2 );
+
+ assertTrue( elements.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef FILE_HH",
+ "#define FILE_HH",
+ "",
+ "#include \"file1.hh\"",
+ "#include \"file2.hh\"",
+ "",
+ "T2 vara;",
+ "T1 varb1;",
+ "T1 varb2;",
+ "",
+ "#endif" );
+ }
+
+ @Test
+ public void test07_filteredDepList()
+ {
+ // Make sure the forward declaration is filtered out when the #include is already
+ // present.
+
+ CppClass T1 = new CppClass( "T1" );
+ ElementList file1 = new ElementList( new FileName( "file1" ) );
+ file1.addElement( T1 );
+
+ CppClass T2 = new CppClass( "T2" );
+ ElementList file2 = new ElementList( new FileName( "file2" ) );
+ file2.addElement( T2 );
+
+ Variable var0 = new Variable( T2.getType(), "var0" );
+ Variable var1 = new Variable( T1.getType(), "var1" );
+ Variable var2 = new Variable( T1.getType().ptr(), "var2" );
+
+ ElementList elements = new ElementList( new FileName( "file" ) );
+ elements.addElement( var0 );
+ elements.addElement( var1 );
+ elements.addElement( var2 );
+
+ assertTrue( elements.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef FILE_HH",
+ "#define FILE_HH",
+ "",
+ "#include \"file1.hh\"",
+ "#include \"file2.hh\"",
+ "",
+ "T2 var0;",
+ "T1 var1;",
+ "T1 * var2;",
+ "",
+ "#endif" );
+ }
+
+ @Test
+ public void test08_simpleTypeDep()
+ {
+ CppClass T = new CppClass( "T" );
+ Variable v = new Variable( T.getType(), "v" );
+
+ DependencyList deps = new DependencyList();
+ assertTrue( v.addDependencies( deps ) );
+ assertFalse( deps.isEmpty() );
+
+ Iterator<Dependency> i = deps.iterator();
+ assertNotNull( i );
+ assertTrue( i.hasNext() );
+
+ Dependency dep = i.next();
+ assertNotNull( dep );
+ assertTrue( dep instanceof TypeDependency );
+
+ assertFalse( i.hasNext() );
+ }
+
+ @Test
+ public void test09_elementAccessDep()
+ {
+ CppClass T = new CppClass( "T" );
+
+ ElementAccess access = new ElementAccess( T );
+
+ DependencyList deps = new DependencyList();
+ assertTrue( access.addDependencies( deps ) );
+ assertFalse( deps.isEmpty() );
+
+ Iterator<Dependency> i = deps.iterator();
+ assertNotNull( i );
+ assertTrue( i.hasNext() );
+
+ Dependency dep = i.next();
+ assertNotNull( dep );
+ assertTrue( dep instanceof ElementDependency );
+
+ assertFalse( i.hasNext() );
+ }
+
+ @Test
+ public void test10_memberAccessDep()
+ {
+ HeaderFile fieldFile = new HeaderFile( "field" );
+ CppClass fieldType = new CppClass( "FieldClass" );
+ MemberField field = new MemberField( fieldType.getType(), "field" );
+ fieldType.setDefinedIn( fieldFile );
+
+ HeaderFile containerFile = new HeaderFile( "container" );
+ CppClass container = new CppClass( "ContainerClass" );
+ container.addMember( CppClass.Visibility.PUBLIC, field );
+ container.setDefinedIn( containerFile );
+
+ Expression access = new MemberAccess( new ElementAccess( container ), field );
+
+ DependencyList deps = new DependencyList();
+ assertTrue( access.addDependencies( deps ) );
+ assertFalse( deps.isEmpty() );
+
+ Iterator<Dependency> i = deps.iterator();
+ assertNotNull( i );
+ assertTrue( i.hasNext() );
+
+ Dependency dep = i.next();
+ assertNotNull( dep );
+ assertTrue( dep instanceof ElementDependency );
+
+ assertFalse( i.hasNext() );
+
+ assertTrue( deps.write( out.decl() ) );
+ assertDeclFormattedAs( "#include \"container.hh\"" );
+ }
+
+ @Test
+ public void test11_ptrInitializer()
+ {
+ // Bug 180: array initializers should introduce the type they are initializing.
+ HeaderFile containerFile = new HeaderFile( "container" );
+
+ CppClass cls = new CppClass( "cls" );
+ cls.setDefinedIn( containerFile );
+
+ BlockInitializer init2 = new BlockInitializer( cls.getType().ptr() );
+ DependencyList deps2 = new DependencyList();
+ assertTrue( init2.addDependencies( deps2 ) );
+ Iterator<Dependency> i = deps2.iterator();
+ assertNotNull( i );
+ assertTrue( i.hasNext() );
+ Dependency dep = i.next();
+ assertNotNull( dep );
+ assertFalse( i.hasNext() );
+ assertTrue( deps2.write( out.decl() ) );
+ assertDeclFormattedAs( "class cls;" );
+ }
+
+ @Test
+ public void test12_arrayInitializer()
+ {
+ // Bug 180: array initializers should introduce the type they are initializing.
+ HeaderFile containerFile = new HeaderFile( "container" );
+
+ CppClass cls = new CppClass( "cls" );
+ cls.setDefinedIn( containerFile );
+
+ BlockInitializer init2 = new BlockInitializer( cls.getType().arrayOf( null ) );
+ DependencyList deps2 = new DependencyList();
+ assertTrue( init2.addDependencies( deps2 ) );
+ Iterator<Dependency> i = deps2.iterator();
+ assertNotNull( i );
+ assertTrue( i.hasNext() );
+ Dependency dep = i.next();
+ assertNotNull( dep );
+ assertFalse( i.hasNext() );
+ assertTrue( deps2.write( out.decl() ) );
+ assertDeclFormattedAs( "#include \"container.hh\"" );
+ }
+
+ @Test
+ public void test13_indexedVarAccess()
+ {
+ // The following must depend on the struct definition of the variable.
+ // &var->field[0]
+ HeaderFile containerFile = new HeaderFile( "container" );
+
+ CppClass cls = new CppClass( "cls" );
+ cls.setDefinedIn( containerFile );
+ MemberField field = new MemberField( PrimitiveType.INT, "field" );
+ cls.addMember( Visibility.PUBLIC, field );
+
+ Variable var = new Variable( cls.getType().ptr(), "var" );
+ MemberAccess access = new MemberAccess( new ElementAccess( var ), field );
+
+ IndexExpr indexed = new IndexExpr( access, new IntegralLiteral( 0 ) );
+
+ // There should be 3 dependencies, one on the variable, one on the class (to
+ // get the field) and one on the the field type (to index into the array).
+ DependencyList deps = new DependencyList();
+ assertTrue( indexed.addDependencies( deps ) );
+ Iterator<Dependency> i = deps.iterator();
+ assertNotNull( i );
+ assertTrue( i.hasNext() );
+ Dependency dep = i.next();
+ assertNotNull( dep );
+ assertTrue( i.hasNext() );
+ dep = i.next();
+ assertNotNull( dep );
+ assertTrue( i.hasNext() );
+ dep = i.next();
+ assertNotNull( dep );
+ assertFalse( i.hasNext() );
+ assertTrue( deps.write( out.decl() ) );
+ assertDeclFormattedAs( "#include \"container.hh\"" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ElementListTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ElementListTest.java
new file mode 100644
index 0000000..719a170
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ElementListTest.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FolderName;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class ElementListTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_emptyFile()
+ {
+ FolderName folder = new FolderName( "src" );
+ assertNotNull( folder );
+ FileName filename = new FileName( folder, "file01" );
+ assertNotNull( filename );
+
+ ElementList file = new ElementList( filename );
+ assertNotNull( file );
+
+ Variable variable = new Variable( LinkageSpec.EXTERN, PrimitiveType.INT, "simpleVar" );
+ assertNotNull( variable );
+ file.addElement( variable );
+
+ AbstractFunction function = new Function( LinkageSpec.EXTERN, PrimitiveType.VOID, "simpleFunction" );
+ assertNotNull( function );
+ file.addElement( function );
+
+ assertTrue( file.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef SRC_FILE01_HH",
+ "#define SRC_FILE01_HH",
+ "",
+ "",
+ "extern int simpleVar;",
+ "extern void simpleFunction();",
+ "",
+ "#endif" );
+ assertDefnFormattedAs(
+ "",
+ "#include \"src/file01.hh\"",
+ "",
+ "int simpleVar;",
+ "void simpleFunction()",
+ "{",
+ "}" );
+ }
+
+ @Test
+ public void test02_selfInclude()
+ {
+ // Make sure that elements are ordered such that things that are used are earlier
+ // than things that use them.
+ Variable var1 = new Variable( LinkageSpec.STATIC, PrimitiveType.INT, "var1" );
+ Variable var2 = new Variable( LinkageSpec.STATIC, PrimitiveType.INT, "var2", new ElementAccess( var1 ) );
+
+ ElementList file = new ElementList( new FileName( "file" ) );
+ file.addElement( var1 );
+ file.addElement( var2 );
+
+ assertTrue( file.write( out ) );
+ assertDefnFormattedAs(
+ "",
+ "#include \"file.hh\"",
+ "",
+ "",
+ "static int var1;",
+ "static int var2 = var1;" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ExpressionTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ExpressionTest.java
new file mode 100644
index 0000000..91e9498
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ExpressionTest.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CharacterLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConditionalOperator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.DeleteExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.NewExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class ExpressionTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_new()
+ {
+ CppClass t = new CppClass( "T" );
+
+ Constructor ctor1 = new Constructor();
+ t.addMember( CppClass.Visibility.PUBLIC, ctor1 );
+ NewExpr expr1 = new NewExpr( new ConstructorCall( ctor1 ) );
+
+ Constructor ctor2 = new Constructor();
+ ctor2.add( new Parameter( PrimitiveType.INT, "i" ) );
+ t.addMember( CppClass.Visibility.PUBLIC, ctor2 );
+ NewExpr expr2 = new NewExpr( new ConstructorCall( ctor2, new IntegralLiteral( 5 ) ) );
+
+ assertTrue( expr1.write( out.defn() ) );
+ assertTrue( out.defn().newline() );
+ assertTrue( expr2.write( out.defn() ) );
+ assertDefnFormattedAs(
+ "new T",
+ "new T( 5 )" );
+ }
+
+ @Test
+ public void test02_delete()
+ {
+ Variable var = new Variable( PrimitiveType.INT, "var" );
+ DeleteExpr expr1 = new DeleteExpr( new ElementAccess( var ) );
+
+ assertTrue( expr1.write( out.defn() ) );
+ assertDefnFormattedAs(
+ "delete var" );
+ }
+
+ @Test
+ public void test03_conditionalOperator()
+ {
+ Expression expr
+ = new ConditionalOperator(
+ new IntegralLiteral( 1 ),
+ new CharacterLiteral( "a" ),
+ new CharacterLiteral( "b" ) );
+ assertTrue( expr.write( out.defn() ) );
+ assertDefnFormattedAs(
+ "1 ? 'a' : 'b'" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ExternalTypeTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ExternalTypeTest.java
new file mode 100644
index 0000000..1303683
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/ExternalTypeTest.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalFileName;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalFwdDeclarable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalHeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.SystemHeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class ExternalTypeTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simpleFwdDecl()
+ {
+ ExternalHeaderFile header = new ExternalHeaderFile( "external.hh" );
+ ExternalFwdDeclarable extStruct = new ExternalFwdDeclarable( header, "aStruct", "struct aStruct" );
+
+ // Make sure that external elements cannot be written
+
+ assertTrue( extStruct.writeForwardDeclaration( out.decl() ) );
+ assertDeclFormattedAs( "struct aStruct;" );
+ }
+
+ @Test
+ public void test02_systemHeader()
+ {
+ SystemHeaderFile header = new SystemHeaderFile( "stdio.h" );
+ assertTrue( header.writeInclude( out.decl() ) );
+ assertDeclFormattedAs( "#include <stdio.h>" );
+ }
+
+ @Test
+ public void test03_writeAsIncludeDependency()
+ {
+ ExternalHeaderFile header = new ExternalHeaderFile( new ExternalFileName( "aStruct.hh" ) );
+ ExternalElement extStruct = new ExternalElement( header, "aStruct" );
+
+ Variable var = new Variable( extStruct.getType(), "var" );
+ ElementList file = new ElementList( new FileName( "varFile" ) );
+ file.addElement( var );
+
+ assertTrue( file.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef VARFILE_HH",
+ "#define VARFILE_HH",
+ "",
+ "#include \"aStruct.hh\"",
+ "",
+ "aStruct var;",
+ "",
+ "#endif" );
+ }
+
+ @Test
+ public void test04_writeAsFwdDecl()
+ {
+ ExternalHeaderFile header = new ExternalHeaderFile( "aStruct.hh" );
+ ExternalFwdDeclarable extStruct = new ExternalFwdDeclarable( header, "aStruct", "struct aStruct" );
+
+ Variable var = new Variable( extStruct.getType().ptr(), "var" );
+ ElementList file = new ElementList( new FileName( "varFile" ) );
+ file.addElement( var );
+
+ assertTrue( file.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef VARFILE_HH",
+ "#define VARFILE_HH",
+ "",
+ "struct aStruct;",
+ "",
+ "aStruct * var;",
+ "",
+ "#endif" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/FunctionTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/FunctionTest.java
new file mode 100644
index 0000000..902cb38
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/FunctionTest.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.DereferenceExpr;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ReturnStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class FunctionTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_Simple()
+ {
+ Function function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "simpleFunction" );
+ assertNotNull( function );
+
+ assertEquals( LinkageSpec.STATIC, function.getLinkage() );
+ assertEquals( PrimitiveType.VOID, function.getReturnType() );
+ assertEquals( "simpleFunction", function.getName().getIdentifier() );
+
+ function.add( new ReturnStatement() );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void simpleFunction()",
+ "{",
+ " return;",
+ "}" );
+ }
+
+ @Test
+ public void test02_OneParam()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.INT, "oneParamFunction" );
+ assertNotNull( function );
+
+ function.add( new Parameter( function.getReturnType(), "param1" ) );
+
+ ElementAccess paramAccess = function.param( 0 );
+ assertNotNull( paramAccess );
+ function.add( new ReturnStatement( paramAccess ) );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static int oneParamFunction( int param1 )",
+ "{",
+ " return param1;",
+ "}" );
+ }
+
+ @Test
+ public void test03_Deref()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.INT, "derefFunction" );
+ assertNotNull( function );
+
+ function.add( new Parameter( function.getReturnType().ptr(), "param1" ) );
+
+ assertEquals( PrimitiveType.INT, function.getReturnType() );
+
+ Expression access = function.param( 0 );
+ assertNotNull( access );
+
+ Expression deref = new DereferenceExpr( access );
+ assertNotNull( deref );
+
+ function.add( new ReturnStatement( deref ) );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static int derefFunction( int * param1 )",
+ "{",
+ " return *param1;",
+ "}" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/InitializerTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/InitializerTest.java
new file mode 100644
index 0000000..ff338e5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/InitializerTest.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BlockInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CppEnumOrderedInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class InitializerTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_BlockInitializer()
+ {
+ CppEnum cppEnum = new CppEnum( "E" );
+ Enumerator e2 = new Enumerator( "e2" );
+ Enumerator e1 = new Enumerator( "e1" );
+ Enumerator e3 = new Enumerator( "e3" );
+ cppEnum.add( e2 );
+ cppEnum.add( e1 );
+ cppEnum.add( e3 );
+
+ BlockInitializer init = new BlockInitializer( cppEnum.getType() );
+ init.addExpression( new ElementAccess( e3 ) );
+ init.addExpression( new ElementAccess( e1 ) );
+ init.addExpression( new ElementAccess( e2 ) );
+
+ assertTrue( init.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "",
+ "{",
+ " e3,",
+ " e1,",
+ " e2",
+ "}" );
+ }
+
+ @Test
+ public void test02_CppEnumOrderedInitializer()
+ {
+ CppEnum cppEnum = new CppEnum( "E" );
+ Enumerator e2 = new Enumerator( "e2" );
+ Enumerator e1 = new Enumerator( "e1" );
+ Enumerator e3 = new Enumerator( "e3" );
+ cppEnum.add( e2 );
+ cppEnum.add( e1 );
+ cppEnum.add( e3 );
+
+ CppEnumOrderedInitializer init = new CppEnumOrderedInitializer( cppEnum, cppEnum.getType() );
+ init.putExpression( e3, new ElementAccess( e3 ) );
+ init.putExpression( e1, new ElementAccess( e1 ) );
+ init.putExpression( e2, new ElementAccess( e2 ) );
+
+ assertTrue( init.write( out.decl() ) );
+ assertDeclFormattedAs(
+ "",
+ "{",
+ " e2,",
+ " e1,",
+ " e3",
+ "}" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/LangCppTestSuite.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/LangCppTestSuite.java
new file mode 100644
index 0000000..d31044b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/LangCppTestSuite.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith( Suite.class )
+@SuiteClasses(
+{
+ BasicTest.class,
+ ConditionalStatementTest.class,
+ CppClassTest.class,
+ CppEnumTest.class,
+ DependencyTest.class,
+ ElementListTest.class,
+ ExpressionTest.class,
+ ExternalTypeTest.class,
+ FunctionTest.class,
+ InitializerTest.class,
+ NameTest.class,
+ StandardLibraryTest.class,
+ SwitchStatementTest.class,
+ TypedefTest.class,
+ TypeTest.class,
+ UnaryOperationTest.class,
+ VariableTest.class,
+} )
+public class LangCppTestSuite { }
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/NameTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/NameTest.java
new file mode 100644
index 0000000..4bfaa39
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/NameTest.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class NameTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simple()
+ {
+ Name n = new Name( "n" );
+
+ assertTrue( out.decl().write( n ) );
+ assertDeclFormattedAs( "n" );
+ }
+
+ @Test
+ public void test02_qualified()
+ {
+ Name n = new Name( "n" );
+
+ CppClass p = new CppClass( "p" );
+ n.setParent( p );
+
+ assertTrue( out.decl().write( n ) );
+ assertDeclFormattedAs( "p::n" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/StandardLibraryTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/StandardLibraryTest.java
new file mode 100644
index 0000000..1a18841
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/StandardLibraryTest.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.Sizeof;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.StandardLibrary;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class StandardLibraryTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_memset()
+ {
+ Variable var = new Variable( PrimitiveType.CHAR.arrayOf( null ), "buff" );
+
+ AbstractFunctionCall call
+ = StandardLibrary.memset(
+ new ElementAccess( var ),
+ new IntegralLiteral( 5 ),
+ new Sizeof( var ) );
+
+ Function func = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ func.add( call );
+
+ ElementList file = new ElementList( new FileName( "file" ) );
+ file.addElement( func );
+
+ assertTrue( file.write( out ) );
+ assertDeclFormattedAs(
+ "",
+ "#ifndef FILE_HH",
+ "#define FILE_HH",
+ "",
+ "",
+ "#endif" );
+ assertDefnFormattedAs(
+ "",
+ "#include \"file.hh\"",
+ "",
+ "#include <string.h>",
+ "",
+ "static void func()",
+ "{",
+ " memset( buff, 5, sizeof( buff ) );",
+ "}" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/SwitchStatementTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/SwitchStatementTest.java
new file mode 100644
index 0000000..b97a165
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/SwitchStatementTest.java
@@ -0,0 +1,153 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.BreakStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ExpressionStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ReturnStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.SwitchClause;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.SwitchStatement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class SwitchStatementTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simpleSwitch()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Expression one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ SwitchStatement switchStmt = new SwitchStatement( one );
+ function.add( switchStmt );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " switch( 1 )",
+ " {",
+ " }",
+ "}" );
+ }
+
+ @Test
+ public void test02_simpleCase()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Expression one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ SwitchStatement switchStmt = new SwitchStatement( one );
+ assertNotNull( switchStmt );
+ function.add( switchStmt );
+
+ SwitchClause case1 = new SwitchClause( one );
+ assertNotNull( case1 );
+ case1.add( new ReturnStatement() );
+ switchStmt.add( case1 );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " switch( 1 )",
+ " {",
+ " case 1:",
+ " return;",
+ " }",
+ "}" );
+ }
+
+ @Test
+ public void test03_simpleDefault()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Expression one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ SwitchStatement switchStmt = new SwitchStatement( one );
+ assertNotNull( switchStmt );
+ function.add( switchStmt );
+
+ SwitchClause def = new SwitchClause();
+ assertNotNull( def );
+ def.add( new ReturnStatement() );
+ switchStmt.add( def );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " switch( 1 )",
+ " {",
+ " default:",
+ " return;",
+ " }",
+ "}" );
+ }
+
+ @Test
+ public void test04_caseFallthrough()
+ {
+ AbstractFunction function = new Function( LinkageSpec.STATIC, PrimitiveType.VOID, "func" );
+ assertNotNull( function );
+
+ Expression one = new IntegralLiteral( "1" );
+ assertNotNull( one );
+
+ SwitchStatement switchStmt = new SwitchStatement( one );
+ assertNotNull( switchStmt );
+ function.add( switchStmt );
+
+ SwitchClause case_a = new SwitchClause( one );
+ assertNotNull( case_a );
+ case_a.setFallthrough( true );
+ assertTrue( case_a.isFallthrough() );
+ case_a.add( new ExpressionStatement( one ) );
+ switchStmt.add( case_a );
+
+ SwitchClause case_b = new SwitchClause( one );
+ assertNotNull( case_b );
+ case_b.add( new BreakStatement() );
+ switchStmt.add( case_b );
+
+ assertTrue( function.write( out ) );
+ assertDefnFormattedAs(
+ "static void func()",
+ "{",
+ " switch( 1 )",
+ " {",
+ " case 1:",
+ " 1;",
+ " // break intentionally omitted",
+ " case 1:",
+ " break;",
+ " }",
+ "}" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/TypeTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/TypeTest.java
new file mode 100644
index 0000000..00a99a2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/TypeTest.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberField;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class TypeTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simple()
+ {
+ Type type = PrimitiveType.INT;
+ assertNotNull( type );
+
+ assertTrue( type.write( out.decl(), null ) );
+ assertDeclFormattedAs( "int" );
+ }
+
+ @Test
+ public void test02_ptr()
+ {
+ Type type = PrimitiveType.INT.ptr();
+ assertNotNull( type );
+
+ assertTrue( type.write( out.decl(), null ) );
+ assertDeclFormattedAs( "int *" );
+ }
+
+ @Test
+ public void test03_const()
+ {
+ Type type = PrimitiveType.INT.const_();
+ assertNotNull( type );
+
+ assertTrue( type.write( out.decl(), null ) );
+ assertDeclFormattedAs( "const int" );
+ }
+
+ @Test
+ public void test04_ptrToConst()
+ {
+ Type type = PrimitiveType.INT.ptr().const_();
+ assertNotNull( type );
+
+ assertTrue( type.write( out.decl(), null ) );
+ assertDeclFormattedAs( "const int *" );
+ }
+
+ @Test
+ public void test05_typeofMemberField()
+ {
+ MemberField field = new MemberField( PrimitiveType.INT.ptr(), "field" );
+ assertTrue( field.getType().isIndirect() );
+ }
+
+ @Test
+ public void test06_ref()
+ {
+ Type ref = PrimitiveType.INT.ref();
+ assertNotNull( ref );
+
+ Type ptrRef = PrimitiveType.INT.ptr().ref();
+ assertNotNull( ptrRef );
+
+ assertTrue( ref.write( out.decl(), null ) );
+ assertTrue( out.decl().newline() );
+ assertTrue( ptrRef.write( out.decl(), null ) );
+ assertDeclFormattedAs( "int &", "int * &" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/TypedefTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/TypedefTest.java
new file mode 100644
index 0000000..9f3d21b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/TypedefTest.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Typedef;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class TypedefTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simple()
+ {
+ Type intPtr = PrimitiveType.INT.ptr();
+ assertNotNull( intPtr );
+
+ Typedef typedef = new Typedef( intPtr, "int_ptr" );
+
+ assertTrue( typedef.write( out ) );
+ assertDeclFormattedAs( "typedef int * int_ptr;" );
+ }
+
+ @Test
+ public void test02_reference()
+ {
+ Type intPtr = PrimitiveType.INT.ptr();
+ assertNotNull( intPtr );
+
+ Typedef typedef = new Typedef( intPtr, "int_ptr" );
+ Type type = typedef.getType();
+ assertNotNull( type );
+
+ assertTrue( type.write( out.decl(), null ) );
+ assertDeclFormattedAs( "int_ptr" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/UnaryOperationTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/UnaryOperationTest.java
new file mode 100644
index 0000000..ca37e1c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/UnaryOperationTest.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.UnaryOperation;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class UnaryOperationTest extends LangCppBaseTest
+{
+ @Test
+ public void test()
+ {
+ Expression one = new IntegralLiteral( "1" );
+ CppFormatter fmt = out.decl();
+
+ UnaryOperation op = new UnaryOperation( UnaryOperation.Operator.PRE_INCREMENT, one );
+ assertNotNull( op );
+ assertEquals( one.getType(), op.getType() );
+ assertTrue( op.write( fmt ) );
+
+ op = new UnaryOperation( UnaryOperation.Operator.PRE_DECREMENT, one );
+ assertNotNull( op );
+ assertEquals( one.getType(), op.getType() );
+ assertTrue( fmt.space() );
+ assertTrue( op.write( fmt ) );
+
+ op = new UnaryOperation( UnaryOperation.Operator.POST_INCREMENT, one );
+ assertNotNull( op );
+ assertEquals( one.getType(), op.getType() );
+ assertTrue( fmt.space() );
+ assertTrue( op.write( fmt ) );
+
+ op = new UnaryOperation( UnaryOperation.Operator.POST_DECREMENT, one );
+ assertNotNull( op );
+ assertEquals( one.getType(), op.getType() );
+ assertTrue( fmt.space() );
+ assertTrue( op.write( fmt ) );
+
+ op = new UnaryOperation( UnaryOperation.Operator.LOGICAL_NOT, one );
+ assertNotNull( op );
+ assertEquals( PrimitiveType.BOOL, op.getType() );
+ assertTrue( fmt.space() );
+ assertTrue( op.write( fmt ) );
+
+ op = new UnaryOperation( UnaryOperation.Operator.BITWISE_NOT, one );
+ assertNotNull( op );
+ assertEquals( one.getType(), op.getType() );
+ assertTrue( fmt.space() );
+ assertTrue( op.write( fmt ) );
+
+ assertDeclFormattedAs( "++1 --1 1++ 1-- ! 1 ~1" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/VariableTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/VariableTest.java
new file mode 100644
index 0000000..48f1365
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/VariableTest.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppClass;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BlockInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.IntegralLiteral;
+import org.eclipse.papyrusrt.codegen.lang.cpp.test.util.LangCppBaseTest;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+@FixMethodOrder( MethodSorters.NAME_ASCENDING )
+public class VariableTest extends LangCppBaseTest
+{
+ @Test
+ public void test01_simple()
+ {
+ Variable variable = new Variable( LinkageSpec.STATIC, PrimitiveType.INT, "simpleVar" );
+ assertNotNull( variable );
+
+ assertEquals( LinkageSpec.STATIC, variable.getLinkage() );
+ assertEquals( PrimitiveType.INT, variable.getType() );
+ assertEquals( "simpleVar", variable.getName().getIdentifier() );
+
+ assertTrue( variable.write( out ) );
+ assertDefnFormattedAs( "static int simpleVar;" );
+ }
+
+ @Test
+ public void test02_initializer()
+ {
+ IntegralLiteral five = new IntegralLiteral( "5" );
+ Variable variable = new Variable( LinkageSpec.STATIC, PrimitiveType.INT, "initVar", five );
+ assertNotNull( variable );
+
+ assertTrue( variable.write( out ) );
+ assertDefnFormattedAs( "static int initVar = 5;" );
+ }
+
+ @Test
+ public void test03_access()
+ {
+ Variable val = new Variable( PrimitiveType.INT, "val" );
+ Variable ptr = new Variable( PrimitiveType.INT.ptr(), "ptr" );
+
+ assertFalse( val.getType().isIndirect() );
+ assertTrue( ptr.getType().isIndirect() );
+ }
+
+ @Test
+ public void test04_initWithCtor()
+ {
+ CppClass cls = new CppClass( "T" );
+ Constructor ctor = new Constructor();
+ ctor.add( new Parameter( PrimitiveType.INT, "p" ) );
+ cls.addMember( CppClass.Visibility.PUBLIC, ctor );
+
+ ConstructorCall call = new ConstructorCall( ctor, new IntegralLiteral( 5 ) );
+ Variable var = new Variable( cls.getType(), "t", call );
+
+ assertTrue( var.write( out ) );
+ assertDeclFormattedAs( "T t;" );
+ assertDefnFormattedAs( "T t( 5 );" );
+ }
+
+ @Test
+ public void test05_array()
+ {
+ Variable val = new Variable( PrimitiveType.INT.arrayOf( null ), "val" );
+
+ assertTrue( val.write( out ) );
+ assertDeclFormattedAs( "int val[];" );
+ }
+
+ @Test
+ public void test06_numInitializers()
+ {
+ assertEquals( 1, new Variable( PrimitiveType.INT, "var" ).getNumInitializedInstances() );
+
+ assertEquals( 0, new Variable( PrimitiveType.INT.arrayOf( null ), "var" ).getNumInitializedInstances() );
+
+ assertEquals(
+ 1,
+ new Variable(
+ PrimitiveType.INT.arrayOf( null ),
+ "var",
+ new IntegralLiteral( 0 ) ).getNumInitializedInstances() );
+ assertEquals(
+ 2,
+ new Variable(
+ PrimitiveType.INT.arrayOf( null ),
+ "var",
+ new BlockInitializer( PrimitiveType.INT.arrayOf( null ),
+ new IntegralLiteral( 0 ),
+ new IntegralLiteral( 0 ) ) ).getNumInitializedInstances() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/util/LangCppBaseTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/util/LangCppBaseTest.java
new file mode 100644
index 0000000..5f9eac5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp.test/src/org/eclipse/papyrusrt/codegen/lang/cpp/test/util/LangCppBaseTest.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.test.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.ByteArrayOutputStream;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.junit.After;
+import org.junit.Before;
+
+public class LangCppBaseTest
+{
+ private ByteArrayOutputStream declOut;
+ private ByteArrayOutputStream defnOut;
+ protected CppWriter out;
+
+ @Before
+ public void before()
+ {
+ declOut = new ByteArrayOutputStream();
+ defnOut = new ByteArrayOutputStream();
+ out = new CppWriter( CppFormatter.createMemoryBased( declOut ), CppFormatter.createMemoryBased( defnOut ) );
+ }
+
+ @After
+ public void after()
+ {
+ out.close();
+ out = null;
+
+ System.out.println( "INTERFACE:" );
+ System.out.print( declOut.toString() );
+ System.out.println( "IMPLEMENTATION:" );
+ System.out.print( defnOut.toString() );
+ }
+
+ private void assertFormattedAs( String generated, String... expected )
+ {
+ assertNotNull( generated );
+ if( generated.isEmpty() )
+ assertTrue( expected.length <= 0 || expected[0].isEmpty() );
+
+ String[] actual = generated.split( "\n" );
+
+ int len = Math.min( actual.length, expected.length );
+ for( int i = 0; i < len; ++i )
+ assertEquals( "line " + (i + 1), expected[i], actual[i] );
+
+ if( actual.length > expected.length )
+ fail( "line " + len + ": \"" + actual[len] + "\" was not expected" );
+ if( expected.length > actual.length )
+ fail( "line " + len + ": \"" + expected[len] + "\" was not generated" );
+ }
+
+ protected void assertDeclFormattedAs( String... expected )
+ {
+ assertFormattedAs( declOut.toString(), expected );
+ }
+
+ protected void assertDefnFormattedAs( String... expected )
+ {
+ assertFormattedAs( defnOut.toString(), expected );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.classpath b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.project b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.project
new file mode 100644
index 0000000..388018d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.lang.cpp</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..1a04592
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,100 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ac2092f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT C++ Language Model
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.lang.cpp
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.papyrusrt.codegen.lang;visibility:=reexport,
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.xtext.xbase.lib
+Export-Package: org.eclipse.papyrusrt.codegen.lang.cpp,
+ org.eclipse.papyrusrt.codegen.lang.cpp.dep,
+ org.eclipse.papyrusrt.codegen.lang.cpp.element,
+ org.eclipse.papyrusrt.codegen.lang.cpp.expr,
+ org.eclipse.papyrusrt.codegen.lang.cpp.external,
+ org.eclipse.papyrusrt.codegen.lang.cpp.internal;x-friends:="org.eclipse.papyrusrt.codegen.lang.cpp.test",
+ org.eclipse.papyrusrt.codegen.lang.cpp.name,
+ org.eclipse.papyrusrt.codegen.lang.cpp.stmt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/about.html b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/about.properties b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/build.properties b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/build.properties
new file mode 100644
index 0000000..17daa5b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/pom.xml
new file mode 100644
index 0000000..dfb27a4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.lang.cpp</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/CppWriter.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/CppWriter.java
new file mode 100644
index 0000000..4931685
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/CppWriter.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class CppWriter
+{
+ private final CppFormatter decl;
+ private final CppFormatter defn;
+
+ public CppWriter( CppFormatter decl, CppFormatter defn )
+ {
+ this.decl = decl;
+ this.defn = defn;
+ }
+
+ public static CppWriter create( String baseFolder, ElementList elements )
+ {
+ return new CppWriter(
+ CppFormatter.create( baseFolder + '/' + elements.getName().getAbsolutePath() + ".hh" ),
+ CppFormatter.create( baseFolder + '/' + elements.getName().getAbsolutePath() + ".cc" ) );
+ }
+
+ public CppFormatter decl() { return decl; }
+ public CppFormatter defn() { return defn; }
+
+ public void close()
+ {
+ try { decl.close(); }
+ finally { defn.close(); }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Element.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Element.java
new file mode 100644
index 0000000..ee52868
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Element.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.IReferencable;
+
+/**
+ * Elements are things like functions, variables, and classes. This is different from
+ * a Type which is a reference to the thing defined by the Element. E.g., in
+ * <pre>
+ * int * ptr;
+ * </pre>
+ * The Element is <strong>int</strong> and the Type is <strong>int *</strong>.
+ *
+ * @see Type
+ */
+public abstract class Element implements IReferencable
+{
+ private HeaderFile header;
+
+ // TODO consider removing the default ctor
+ protected Element() { this( null ); }
+ protected Element( HeaderFile header ) { this.header = header; }
+
+ public abstract Type getType();
+
+ // TODO what if it is already in a different list?
+ public void setDefinedIn( HeaderFile header ) { this.header = header; }
+ public HeaderFile getDefinedIn() { return header; }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Expression.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Expression.java
new file mode 100644
index 0000000..ec73adb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Expression.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+
+/**
+ * Expressions are the leaf for nearly all code.
+ *
+ * <p>The C++ grammar defines expressions which are contained in statements which are
+ * contained in elements. All expressions have a type.
+ *
+ * @see Element
+ * @see Statement
+ * @see Type
+ */
+public abstract class Expression implements IGeneratable
+{
+ private Type type;
+
+ public Type getType()
+ {
+ if( type == null )
+ type = createType();
+ return type;
+ }
+
+ protected abstract Type createType();
+
+ /**
+ * Levels of precedence will be specified in order and grouped by category. The
+ * C++11 spec says that order is not defined but can be derived from the syntax.
+ */
+ public Precedence getPrecedence() { return Precedence.Default; }
+ public static enum Precedence
+ {
+ // TODO derive levels of precedence
+ Default;
+
+ public boolean needsParens( Precedence neighbour )
+ {
+ return false; // this < neighbour
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/HeaderFile.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/HeaderFile.java
new file mode 100644
index 0000000..caa360f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/HeaderFile.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+import org.eclipse.papyrusrt.codegen.lang.io.CodeFormatter;
+
+public class HeaderFile implements Comparable<HeaderFile>
+{
+ private final FileName name;
+
+ public HeaderFile( String filename ) { this.name = new FileName( filename ); }
+ public HeaderFile( FileName name ) { this.name = name; }
+
+ public FileName getName() { return name; }
+
+ protected String getIncludeTarget( String filename )
+ {
+ return "\"" + filename + '"';
+ }
+
+ @Override
+ public int compareTo( HeaderFile o )
+ {
+ String incPath1 = getIncludeTarget( name.getIncludePath() );
+ String incPath2 = o.getIncludeTarget( o.name.getIncludePath() );
+ return incPath1.compareTo( incPath2 );
+ }
+
+ public boolean writeInclude( CodeFormatter fmt )
+ {
+ // TODO This should be integrated with the build environment to generate
+ // file paths that are relative to the include paths.
+ return fmt.write( "#include " )
+ && fmt.write( getIncludeTarget( name.getIncludePath() ) )
+ && fmt.newline();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IDepender.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IDepender.java
new file mode 100644
index 0000000..c7de3be
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IDepender.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+
+// TODO rename this -- it is an interface for things that can depend on others
+public interface IDepender
+{
+ public boolean addDependencies( ElementDependencies deps );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IGeneratable.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IGeneratable.java
new file mode 100644
index 0000000..c14e76d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IGeneratable.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public interface IGeneratable
+{
+ public boolean addDependencies( DependencyList deps );
+ public boolean write( CppFormatter fmt );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IGeneratableElement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IGeneratableElement.java
new file mode 100644
index 0000000..c2a726d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IGeneratableElement.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+
+public interface IGeneratableElement
+{
+ public boolean addDependencies( ElementDependencies deps );
+ public boolean write( CppWriter out );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IUserElement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IUserElement.java
new file mode 100644
index 0000000..52a1f83
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/IUserElement.java
@@ -0,0 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+public interface IUserElement extends IGeneratableElement
+{
+ public void setDefinedIn( HeaderFile header );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Name.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Name.java
new file mode 100644
index 0000000..a0b25ab
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Name.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class Name implements Comparable<Name>
+{
+ private NamedElement parent;
+ private final String identifier;
+
+ public Name( String ident )
+ {
+ this.identifier = asValidCIdentifier( ident );
+ }
+
+ private static String asValidCIdentifier( String ident )
+ {
+ return ident.replaceAll( "[\\s\\-]+", "_" );
+ }
+
+ public String getIdentifier() { return identifier; }
+ public Name getParent() { return parent == null ? null : parent.getName(); }
+ public void setParent( NamedElement parent ) { this.parent = parent; }
+
+ @Override
+ public int compareTo( Name o )
+ {
+ return identifier.compareTo( o.identifier );
+ }
+
+ public boolean writeQualified( CppFormatter fmt, Name context )
+ {
+ StringBuilder nameStr = new StringBuilder();
+ appendFullyQualified( nameStr );
+ String nameQN = nameStr.toString();
+
+ if( context == null )
+ return fmt.write( nameQN );
+
+ // Otherwise there is some context so we can try to reduce the fully qualified name.
+ StringBuilder contextStr = new StringBuilder();
+ context.appendFullyQualified( contextStr );
+ String contextQN = contextStr.toString();
+
+ // Strip the matching part of the fully qualified context from the fully
+ // qualified part of this name.
+ // CTX: A::B::C::D::E
+ // NAME: A::B::Y::Z
+ // => Y::Z
+ String[] ctx = contextQN.split( "::" );
+ String[] name = nameQN.split( "::" );
+ int i = 0;
+ int limit = Math.min( ctx.length, name.length );
+ for( ; i < limit && ctx[i].equals( name[i] ); ++i )
+ ; // body intentionally omitted
+
+ // If there was some matching context then replace the name's qualified string
+ // with the rest of the name.
+ if( i > 0 )
+ {
+ StringBuilder str = new StringBuilder();
+ while( i < name.length )
+ {
+ str.append( name[i] );
+ if( ++i == name.length )
+ break;
+ str.append( "::" );
+ }
+ nameQN = str.toString();
+ }
+
+ return fmt.write( nameQN );
+ }
+
+ private void appendFullyQualified( StringBuilder str )
+ {
+ if( parent != null )
+ {
+ parent.getName().appendFullyQualified( str );
+ str.append( "::" );
+ }
+
+ str.append( identifier );
+ }
+
+ @Override public String toString() { return identifier; }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Statement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Statement.java
new file mode 100644
index 0000000..6dc799f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Statement.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.CodeBlock;
+
+/**
+ * Statements are used as holders of expressions.
+ *
+ * <p>The C++ grammar defines statements that contain expressions. Statements are contained
+ * within code blocks (which are also Statements). Code blocks are contained within functions
+ * or variable declaration initializers.
+ *
+ * @see Expression
+ * @see Statement
+ * @see Type
+ *
+ * @see CodeBlock
+ * @see AbstractFunction
+ * @see Variable
+ */
+public abstract class Statement implements IGeneratable
+{
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Type.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Type.java
new file mode 100644
index 0000000..b2fe67d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/Type.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.TypeDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+/**
+ * Types are references to elements of the language model.
+ *
+ * <p>Type is a decorated reference to an element. The decorators are pointers and
+ * const-volatile qualifiers.
+ *
+ * @see Element
+ */
+public class Type
+{
+ private final Element element;
+ private final CVQualifier cvQualifier;
+
+ private final List<Pointer> pointerSpec = new ArrayList<Pointer>();
+ private final List<Expression> arrayBounds = new ArrayList<Expression>();
+
+ /**
+ * This should not be called by clients, use {@link Element#getType()} instead.
+ */
+ public Type( Element element )
+ {
+ this( CVQualifier.UNQUALIFIED, element );
+ }
+
+ private Type( CVQualifier cvQualifier, Element element )
+ {
+ this.element = element;
+ this.cvQualifier = cvQualifier;
+ }
+
+ public Type ref() { Type copy = deepCopy(); copy.pointerSpec.add( Pointer.REFERENCE ); return copy; }
+ public Type ptr() { Type copy = deepCopy(); copy.pointerSpec.add( Pointer.POINTER ); return copy; }
+ public Type constPtr() { Type copy = deepCopy(); copy.pointerSpec.add( Pointer.CONST_POINTER ); return copy; }
+ public Type volatilePtr() { Type copy = deepCopy(); copy.pointerSpec.add( Pointer.VOLATILE_POINTER ); return copy; }
+ public Type constVolatilePtr() { Type copy = deepCopy(); copy.pointerSpec.add( Pointer.CONST_VOLATILE_POINTER ); return copy; }
+ public Type arrayOf( Expression bound ) { Type copy = deepCopy(); copy.arrayBounds.add( bound ); return copy; }
+
+ public Type const_() { return deepCopy( CVQualifier.CONST ); }
+ public Type volatile_() { return deepCopy( CVQualifier.VOLATILE ); }
+ public Type constVolatile() { return deepCopy( CVQualifier.CONST_VOLATILE ); }
+
+ public Type dereference()
+ {
+ Type copy = new Type( cvQualifier, element );
+
+ // If there are array bounds then keep all pointer specs and strip one layer.
+ if( arrayBounds.size() > 0 )
+ {
+ copy.pointerSpec.addAll( pointerSpec );
+ for( int i = 0; i < arrayBounds.size() - 1; ++i )
+ copy.arrayBounds.add( arrayBounds.get( i ) );
+ }
+ // Otherwise strip one level of indirection.
+ else
+ for( int i = 0; i < pointerSpec.size() - 1; ++i )
+ copy.pointerSpec.add( pointerSpec.get( i ) );
+
+ return copy;
+ }
+
+ public Element getElement() { return element; }
+ public boolean isArray() { return ! arrayBounds.isEmpty(); }
+ public boolean isIndirect()
+ {
+ if( arrayBounds.size() > 0 )
+ return true;
+
+ switch( pointerSpec.size() )
+ {
+ case 0:
+ return false;
+ case 1:
+ return pointerSpec.get( 0 ) != Pointer.REFERENCE;
+ default:
+ return true;
+ }
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if( ! ( obj instanceof Type ) )
+ return false;
+
+ Type other = (Type)obj;
+ if( ! element.equals( other.element )
+ || ! cvQualifier.equals( other.cvQualifier ) )
+ return false;
+
+ if( pointerSpec.size() != other.pointerSpec.size()
+ || arrayBounds.size() != other.arrayBounds.size() )
+ return false;
+
+ for( int i = 0; i < pointerSpec.size(); ++i )
+ if( ! pointerSpec.get( i ).equals( other.pointerSpec.get( i ) ) )
+ return false;
+
+ for( int i = 0; i < arrayBounds.size(); ++i )
+ if( ! arrayBounds.get( i ).equals( other.arrayBounds.get( i ) ) )
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return element.hashCode()
+ ^ cvQualifier.ordinal()
+ ^ pointerSpec.size()
+ ^ arrayBounds.size();
+ }
+
+ private Type deepCopy() { return deepCopy( cvQualifier ); }
+ private Type deepCopy( CVQualifier cvQualifier )
+ {
+ Type copy = new Type( cvQualifier, element );
+ copy.pointerSpec.addAll( pointerSpec );
+ copy.arrayBounds.addAll( arrayBounds );
+ return copy;
+ }
+
+ public static enum CVQualifier
+ {
+ CONST,
+ VOLATILE,
+ CONST_VOLATILE,
+ UNQUALIFIED;
+
+ public boolean write( CppFormatter fmt )
+ {
+ switch( this )
+ {
+ case CONST: return fmt.write( "const" );
+ case VOLATILE: return fmt.write( "volatile" );
+ case CONST_VOLATILE: return fmt.write( "const volatile" );
+ default: return fmt.markNoText();
+ }
+ }
+ }
+
+ public static enum Pointer
+ {
+ // TODO ref shouldn't be a pointer because it can only be used after the pointer-spec
+ REFERENCE( "&" ),
+ POINTER( "*" ),
+ CONST_POINTER( "* const" ),
+ VOLATILE_POINTER( "* volatile" ),
+ CONST_VOLATILE_POINTER( "* const volatile" );
+
+ private Pointer( String syntax ) { this.syntax = syntax; }
+ private final String syntax;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( syntax );
+ }
+
+ @Override public String toString() { return syntax; }
+ }
+
+ public boolean addDependencies( DependencyList deps ) { return deps.add( new TypeDependency( this ) ); }
+
+ /** @param name may be null */
+ public boolean write( CppFormatter fmt, Name name )
+ {
+ return cvQualifier.write( fmt )
+ && fmt.space()
+ && element.write( fmt, name, pointerSpec, arrayBounds );
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder str = new StringBuilder();
+ if( cvQualifier != CVQualifier.UNQUALIFIED )
+ {
+ str.append( cvQualifier.toString() );
+ str.append( ' ' );
+ }
+
+ str.append( element.toString() );
+ str.append( ' ' );
+
+ for( Pointer ptr : pointerSpec )
+ str.append( ptr.toString() );
+
+ for( int i = arrayBounds.size(); i > 0; --i )
+ str.append( "[]" );
+
+ return str.toString();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/Dependency.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/Dependency.java
new file mode 100644
index 0000000..05f71cb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/Dependency.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public abstract class Dependency implements Comparable<Dependency>
+{
+ private final Kind kind;
+
+ protected Dependency( Kind kind )
+ {
+ this.kind = kind;
+ }
+
+ // TODO When dependencies are written to the formatter, there should only be one
+ // #include for each file, there should not be forward declarations for elements
+ // that have already been #include'ed and the list should be sorted, all #includes
+ // first, then all forward declarations, and each section alphabetic.
+
+ protected boolean writeReference( CppFormatter fmt ) { return writeUse( fmt ); }
+ protected abstract boolean writeUse( CppFormatter fmt );
+ protected int compareReference( Dependency dep ) { return compareUse( dep ); }
+ protected abstract int compareUse( Dependency dep );
+ protected abstract boolean isReferenceProvidedInUse( Dependency use );
+ protected abstract Element getComparisonElement();
+ protected abstract HeaderFile getHeader();
+
+ @Override
+ public int compareTo( Dependency o )
+ {
+ // There is a coarse sort based on the kind of the dependency.
+ int cmp = kind.compareTo( o.kind );
+ if( cmp != 0 )
+ return cmp;
+
+ // The fine-grained sort uses details provided by the implementation.
+ switch( kind )
+ {
+ case Use: return compareUse( o );
+ case Reference: return compareReference( o );
+ default:
+ throw new RuntimeException( "cannot compare " + toString() + " with " + o.toString() );
+ }
+ }
+
+ /**
+ * Returns true if the receiver is provided by the given dependency and false otherwise.
+ * In the current implementation, a dependency is only considered provided if the receiver is
+ * a forward declaration, the parameter an inclusion, and the first is declared in the second.
+ * This is used for filtering unneeded forward declarations from dependency lists.
+ */
+ public boolean isProvidedBy( Dependency other )
+ {
+ // Only reference dependencies can be provided by another dependency and a dependency
+ // can never be provided by another reference (duplicates have already been filtered during
+ // the sort).
+ if( kind == Kind.Reference
+ && other.kind == Kind.Use )
+ return isReferenceProvidedInUse( other );
+
+ return false;
+ }
+
+ public boolean write( CppFormatter fmt )
+ {
+ switch( kind )
+ {
+ case Use: return writeUse( fmt );
+ case Reference: return writeReference( fmt );
+ }
+ return false;
+ }
+
+ protected static enum Kind
+ {
+ // The Kind is used as a comparable to order dependencies so make sure that the
+ // ordinals are sorted to match.
+ Use,
+ Reference;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/DependencyBlob.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/DependencyBlob.java
new file mode 100644
index 0000000..b1a7f7d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/DependencyBlob.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class DependencyBlob extends Dependency
+{
+ private final String text;
+
+ public DependencyBlob( String deps )
+ {
+ super( Dependency.Kind.Use );
+ this.text = deps;
+ }
+
+ @Override
+ protected int compareUse( Dependency dep )
+ {
+ // Blobs always compare after other types of dependency, otherwise sort based on
+ // their text.
+ return dep instanceof DependencyBlob
+ ? text.compareTo( ( (DependencyBlob)dep ).text )
+ : 1;
+ }
+
+ @Override
+ protected boolean isReferenceProvidedInUse( Dependency use )
+ {
+ // Blobs are not examined.
+ return false;
+ }
+
+ @Override protected Element getComparisonElement() { return null; }
+ @Override protected HeaderFile getHeader() { return null; }
+
+ @Override
+ public boolean writeUse( CppFormatter fmt )
+ {
+ return fmt.writeLn( text );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/DependencyList.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/DependencyList.java
new file mode 100644
index 0000000..1742a45
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/DependencyList.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+/**
+ * This list manages a set of dependencies. The following must be true when
+ * the list is written to a file:
+ * <li>each dependency should be written only once</li>
+ * <li>there should not be a forward declaration for something that was
+ * explicitly #include'ed</li>
+ * <li>all #inlcude's should be written before the forward declarations</li>
+ * <li>each section (#include and forward declaration) should be sorted
+ * alphabetically</li>
+ */
+public class DependencyList implements Iterable<Dependency>
+{
+ private final Set<Dependency> deps = new TreeSet<Dependency>();
+
+ @Override public Iterator<Dependency> iterator() { return deps.iterator(); }
+
+ // TODO Problems like conflicts or circular dependencies should be rejected when they
+ // happen.
+ public boolean add( Dependency dep )
+ {
+ if( dep != null )
+ deps.add( dep );
+
+ return true;
+ }
+
+ public boolean add( DependencyList depList )
+ {
+ // Add each dependency separately to filter and sort.
+ for( Dependency dep : depList.deps )
+ if( ! add( dep ) )
+ return false;
+
+ return true;
+ }
+
+ public boolean isEmpty() { return deps.isEmpty(); }
+
+ public boolean write( CppFormatter fmt ) { return write( null, fmt ); }
+
+ public boolean write( ElementList container, CppFormatter fmt )
+ {
+ // Unneeded dependencies are filtered when they are written. An example of an unneeded
+ // dependency is a forward declaration to an element who's definition has already been
+ // included. The dependency list is already sorted by importance, so we only need to
+ // examine dependencies that have already been written.
+ List<Dependency> written = new ArrayList<Dependency>();
+
+ // The filtering algorithm performs poorly in the general case. However, lists are
+ // generally only a dozen or so entries.
+ outer: for( Dependency dep : deps )
+ {
+ for( Dependency d : written )
+ if( dep.isProvidedBy( d ) )
+ continue outer;
+
+ if( ( container == null || ! container.equals( dep.getHeader() ) )
+ && ! dep.write( fmt ) )
+ return false;
+
+ // Blobs are never used to block other dependencies, so don't add them to
+ // to the list.
+ if( ! ( dep instanceof DependencyBlob ) )
+ written.add( dep );
+ }
+
+ return true;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/ElementDependencies.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/ElementDependencies.java
new file mode 100644
index 0000000..fae2e4c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/ElementDependencies.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.ElementList;
+
+/**
+ * A small container for holding the set of declaration and definition dependencies.
+ */
+public class ElementDependencies
+{
+ private final ElementList container;
+ private final DependencyList decl = new DependencyList();
+ private final DependencyList defn = new DependencyList();
+
+ public ElementDependencies( ElementList container )
+ {
+ this.container = container;
+ }
+
+ public DependencyList decl() { return decl; }
+ public DependencyList defn() { return defn; }
+
+ public boolean write( CppWriter out )
+ {
+ if( ! decl.isEmpty()
+ && ( ! decl.write( container, out.decl() )
+ || ! out.decl().newline() ) )
+ return false;
+
+ if( ! defn.isEmpty()
+ && ( ! defn.write( container, out.defn() )
+ || ! out.defn().newline() ) )
+ return false;
+
+ return true;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/ElementDependency.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/ElementDependency.java
new file mode 100644
index 0000000..29913f0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/ElementDependency.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ElementDependency extends Dependency
+{
+ private final Element element;
+
+ public ElementDependency( Element element )
+ {
+ super( Dependency.Kind.Use );
+ this.element = element;
+ }
+
+ @Override protected Element getComparisonElement() { return element; }
+ @Override protected HeaderFile getHeader() { return element == null ? null : element.getDefinedIn(); }
+
+ @Override
+ protected boolean writeUse( CppFormatter fmt )
+ {
+ return element.getDefinedIn() == null ? true : element.getDefinedIn().writeInclude( fmt );
+ }
+
+ @Override
+ protected int compareUse( Dependency dep )
+ {
+ if( dep instanceof ElementDependency )
+ {
+ if( element.getDefinedIn() == null )
+ return ( (ElementDependency)dep ).element.getDefinedIn() == null ? 0 : 1;
+ if( ( (ElementDependency)dep ).element.getDefinedIn() == null )
+ return -1;
+ return element.getDefinedIn().compareTo( ( (ElementDependency)dep ).element.getDefinedIn() );
+ }
+
+ if( dep instanceof DependencyBlob )
+ return 1;
+
+ // The type could be reference or use, so get it to do the comparison and then invert
+ // the result.
+ if( dep instanceof TypeDependency )
+ return ( (TypeDependency)dep ).compareTo( this ) * -1;
+
+ throw new RuntimeException( "cannot compare " + toString() + " with " + dep.toString() );
+ }
+
+ @Override
+ protected boolean isReferenceProvidedInUse( Dependency use )
+ {
+ return false;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/IForwardDeclarable.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/IForwardDeclarable.java
new file mode 100644
index 0000000..b340cd6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/IForwardDeclarable.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public interface IForwardDeclarable extends Comparable<IForwardDeclarable>
+{
+ public boolean writeForwardDeclaration( CppFormatter fmt );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/TypeDependency.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/TypeDependency.java
new file mode 100644
index 0000000..e98154b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/dep/TypeDependency.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.dep;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.io.CodeFormatter;
+
+public class TypeDependency extends Dependency
+{
+ private final Type type;
+
+ public TypeDependency( Type type )
+ {
+ super( type.isIndirect() ? Dependency.Kind.Reference : Dependency.Kind.Use );
+ this.type = type;
+ }
+
+ @Override protected Element getComparisonElement() { return type.getElement(); }
+
+ @Override public HeaderFile getHeader() { return type.getElement().getDefinedIn(); }
+
+ private static boolean writeInclusion( CodeFormatter fmt, Element element )
+ {
+ HeaderFile header = element.getDefinedIn();
+ return header == null ? true : header.writeInclude( fmt );
+ }
+
+ @Override
+ protected int compareReference( Dependency dep )
+ {
+ Element element1 = getComparisonElement();
+ Element element2 = dep.getComparisonElement();
+
+ // null sorts later
+ if( element1 == null )
+ return element2 == null ? 0 : 1;
+ else if( element2 == null )
+ return 1;
+
+ // Forward declarations sort after #includes, so if we have one of each kind then
+ // comparison is hard coded. Otherwise the forward declartions are compared.
+ IForwardDeclarable fwdDecl1 = element1 instanceof IForwardDeclarable ? (IForwardDeclarable)element1 : null;
+ IForwardDeclarable fwdDecl2 = element2 instanceof IForwardDeclarable ? (IForwardDeclarable)element2 : null;
+ if( fwdDecl1 != null )
+ return fwdDecl2 == null ? 1 : fwdDecl1.compareTo( fwdDecl2 );
+ if( fwdDecl2 != null )
+ return -1;
+
+ // In cases where neither element can be forward declared we fallback to comparing
+ // the #include directives.
+ return compareUse( dep );
+ }
+
+ @Override
+ protected boolean isReferenceProvidedInUse( Dependency use )
+ {
+ Element element1 = getComparisonElement();
+ Element element2 = use.getComparisonElement();
+ if( element1 == null
+ || element2 == null )
+ return false;
+
+ HeaderFile header1 = element1.getDefinedIn();
+ HeaderFile header2 = element2.getDefinedIn();
+ if( header1 == null
+ || header2 == null )
+ return false;
+
+ return header1 == header2;
+ }
+
+ @Override
+ protected boolean writeReference( CppFormatter fmt )
+ {
+ Element element = type.getElement();
+ if( element instanceof IForwardDeclarable )
+ return ( (IForwardDeclarable)element ).writeForwardDeclaration( fmt );
+
+ return writeInclusion( fmt, element );
+ }
+
+ @Override
+ protected int compareUse( Dependency dep )
+ {
+ // Blobs always compare after other dependencies.
+ if( dep instanceof DependencyBlob )
+ return -1;
+
+ Element element1 = getComparisonElement();
+ Element element2 = dep.getComparisonElement();
+
+ // null sorts later
+ if( element1 == null )
+ return element2 == null ? 0 : 1;
+ else if( element2 == null )
+ return 1;
+
+ HeaderFile header1 = element1.getDefinedIn();
+ HeaderFile header2 = element2.getDefinedIn();
+ if( header1 == null )
+ return header2 == null ? 0 : -1;
+ else if( header2 == null )
+ return 1;
+
+ return header1.compareTo( header2 );
+ }
+
+ @Override
+ protected boolean writeUse( CppFormatter fmt )
+ {
+ return writeInclusion( fmt, type.getElement() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/AbstractFunction.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/AbstractFunction.java
new file mode 100644
index 0000000..3be1fac
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/AbstractFunction.java
@@ -0,0 +1,121 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IUserElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.CodeBlock;
+
+public abstract class AbstractFunction extends NamedElement implements IUserElement
+{
+ private final Type returnType;
+ private final List<Parameter> parameters = new ArrayList<Parameter>();
+ private final CodeBlock body;
+
+ public AbstractFunction( Type returnType, String ident )
+ {
+ super( ident );
+ this.returnType = returnType;
+ this.body = CodeBlock.forceBraces();
+ }
+
+ public AbstractFunction( HeaderFile header, Type returnType, String ident )
+ {
+ super( header, ident );
+ this.returnType = returnType;
+ this.body = CodeBlock.forceBraces();
+ }
+
+ public void add( Statement... stmts ) { body.add( stmts ); }
+ public void add( Expression expr ) { body.add( expr ); }
+ public void add( Variable var ) { body.add( var ); }
+
+ public void add( Parameter param ) { parameters.add( param ); }
+ /** @param id 0-based parameter index */
+ public ElementAccess param( int index )
+ {
+ return new ElementAccess( parameters.get( index ) );
+ }
+
+ public Type getReturnType() { return returnType; }
+
+ public Type createType()
+ {
+ FunctionPointer funcPtr = new FunctionPointer( returnType );
+ for( Parameter param : parameters )
+ funcPtr.add( param.getType() );
+ return funcPtr.getType();
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ return addSignatureDependencies( deps.decl() )
+ && addBodyDependencies( deps.defn() );
+ }
+
+ protected boolean addSignatureDependencies( DependencyList deps )
+ {
+ if( ! returnType.addDependencies( deps ) )
+ return false;
+
+ for( Parameter param : parameters )
+ if( ! param.addDependencies( deps ) )
+ return false;
+
+ return true;
+ }
+
+ protected boolean addBodyDependencies( DependencyList deps )
+ {
+ return body.addDependencies( deps );
+ }
+
+ protected boolean writeSignature( CppFormatter fmt )
+ {
+ if( ! returnType.write( fmt, null )
+ || ! fmt.space()
+ || ! fmt.write( getName() )
+ || ! fmt.write( "(" ) )
+ return false;
+
+ boolean first = true;
+ for( Parameter param : parameters )
+ {
+ if( first )
+ {
+ first = false;
+ if( ! fmt.space() )
+ return false;
+ }
+ else if( ! fmt.write( ", " ) )
+ return false;
+
+ if( ! param.write( fmt ) )
+ return false;
+ }
+
+ return fmt.spaceUnless( '(' )
+ && fmt.write( ')' );
+ }
+
+ protected boolean writeBody( CppFormatter fmt )
+ {
+ return body.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Constructor.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Constructor.java
new file mode 100644
index 0000000..f1574c2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Constructor.java
@@ -0,0 +1,230 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratableElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type.Pointer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.IReferencable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.CodeBlock;
+
+public class Constructor extends UserElement implements IReferencable, IGeneratableElement
+{
+ // TODO Large parts of this implementation are copy/paste from AbstractFunction. The problem
+ // with AbsFunction is that it has a name and constructors do not (they use the containing
+ // class name). The implementations should be combined.
+
+ private CppClass cls;
+ private Name name;
+ private final List<AbstractFunctionCall> baseInitializers = new ArrayList<AbstractFunctionCall>();
+ private final List<Initializer> fieldInitializers = new ArrayList<Initializer>();
+ private final List<Parameter> parameters = new ArrayList<Parameter>();
+ private final CodeBlock body;
+
+ public Constructor()
+ {
+ this.body = CodeBlock.forceBraces();
+ }
+
+ public CppClass getCppClass() { return cls; }
+ public void setCppClass( CppClass parent )
+ {
+ cls = parent;
+ name = new Name( parent.getName().getIdentifier() );
+ name.setParent( parent );
+ }
+
+ public void addBaseInitializer( AbstractFunctionCall baseCtor ) { baseInitializers.add( baseCtor ); }
+
+ // TODO validate that field is non-static
+ public void addFieldInitializer( MemberField field, Expression... inits )
+ {
+ fieldInitializers.add( new Initializer( field, inits ) );
+ }
+
+ public void add( Statement... stmts ) { body.add( stmts ); }
+ public void add( Expression expr ) { body.add( expr ); }
+ public void add( Variable var ) { body.add( var ); }
+
+ public void add( Parameter param ) { parameters.add( param ); }
+
+ private static class Initializer implements IGeneratable
+ {
+ private final MemberField field;
+ private final List<Expression> exprs;
+ public Initializer( MemberField field, Expression[] inits )
+ {
+ this.field = field;
+ this.exprs = new ArrayList<Expression>( Arrays.asList( inits ) );
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Expression expr : exprs )
+ if( ! expr.addDependencies( deps ) )
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.write( field.getName() )
+ || ! fmt.write( '(' )
+ || ! fmt.pendingSpace() )
+ return false;
+
+ boolean first = true;
+ for( Expression expr : exprs )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.write( ',' )
+ || ! fmt.space() )
+ return false;
+
+ if( ! expr.write( fmt ) )
+ return false;
+ }
+
+ return fmt.spaceUnless( ' ' )
+ && fmt.write( ')' );
+ }
+ }
+
+ protected boolean writeSignature( CppFormatter fmt )
+ {
+ if( ! fmt.write( name )
+ || ! fmt.write( '(' ) )
+ return false;
+
+ boolean first = true;
+ for( Parameter param : parameters )
+ {
+ if( first )
+ {
+ first = false;
+ if( ! fmt.space() )
+ return false;
+ }
+ else if( ! fmt.write( ", " ) )
+ return false;
+
+ if( ! param.write( fmt ) )
+ return false;
+ }
+
+ return fmt.spaceUnless( '(' )
+ && fmt.write( ')' );
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ for( Parameter param : parameters )
+ if( ! param.addDependencies( deps.decl() ) )
+ return false;
+
+ for( AbstractFunctionCall baseInit : baseInitializers )
+ if( ! baseInit.addDependencies( deps.defn() ) )
+ return false;
+
+ for( Initializer init : fieldInitializers )
+ if( ! init.addDependencies( deps.defn() ) )
+ return false;
+
+ return body.addDependencies( deps.defn() );
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ if( ! writeSignature( out.decl() )
+ || ! out.decl().terminate() )
+ return false;
+
+ if( ! writeSignature( out.defn() ) )
+ return false;
+
+ out.defn().enter( name.getParent() );
+
+ char separator = ':';
+ for( AbstractFunctionCall ctor : baseInitializers )
+ {
+ if( ! out.defn().newline()
+ || ! out.defn().write( separator )
+ || ! out.defn().space()
+ || ! ctor.write( out.defn() ) )
+ return false;
+ separator = ',';
+ }
+
+ // TODO validate that the order of this list matches the order of definition in the class
+ // TODO validate that these are not static members
+ for( Initializer init : fieldInitializers )
+ {
+ if( ! out.defn().newline()
+ || ! out.defn().write( separator )
+ || ! out.defn().space()
+ || ! init.write( out.defn() ) )
+ return false;
+
+ separator = ',';
+ }
+
+ boolean ret = body.write( out.defn() );
+ out.defn().exit();
+ return ret;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt, Name name, List<Pointer> pointerSpec, List<Expression> arrayBounds )
+ {
+ if( ! fmt.write( name )
+ || ! fmt.pendingSpace() )
+ return false;
+
+ // TODO is this right?
+ boolean first = true;
+ for( Type.Pointer ptr : pointerSpec )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.space() )
+ return false;
+
+ if( ! ptr.write( fmt ) )
+ return false;
+ }
+
+ if( ! fmt.pendingSpace()
+ || ! fmt.write( name ) )
+ return false;
+
+ for( int i = arrayBounds.size(); i > 0; --i )
+ if( ! fmt.write( "[]" ) )
+ return false;
+
+ return true;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/CppClass.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/CppClass.java
new file mode 100644
index 0000000..a6f658e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/CppClass.java
@@ -0,0 +1,346 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratableElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IUserElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.IForwardDeclarable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class CppClass extends NamedElement implements IForwardDeclarable, IUserElement
+{
+ private Kind kind;
+ private final List<BaseClassSpecifier> bases = new ArrayList<CppClass.BaseClassSpecifier>();
+ private final List<Member> ctors = new ArrayList<Member>();
+ private final List<Member> members = new ArrayList<Member>();
+
+ public CppClass( String ident )
+ {
+ this( Kind.CLASS, ident );
+ }
+
+ public CppClass( Kind kind, String ident )
+ {
+ super( ident );
+ this.kind = kind;
+ }
+
+ /**
+ * The kind can be modified up until the time that the class is written.
+ */
+ public void setKind( Kind kind ) { this.kind = kind; }
+
+ public enum Kind
+ {
+ // The Kind is used to sort forward declarations to these elements, so the ordinals
+ // must be ordered such that lower ordinals are generated first in a block of
+ // forward declarations.
+ CLASS( Visibility.PRIVATE, "class" ),
+ STRUCT( Visibility.PUBLIC, "struct" );
+ // TODO POD, others?
+
+ public final Visibility defaultVisibility;
+
+ private Kind( Visibility v, String syntax ) { this.defaultVisibility = v; this.syntax = syntax; }
+ private String syntax;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( syntax );
+ }
+ }
+
+ public enum Visibility
+ {
+ PUBLIC( "public" ),
+ PROTECTED( "protected" ),
+ PRIVATE( "private" );
+
+ private Visibility( String syntax ) { this.syntax = syntax; }
+ private final String syntax;
+
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.decIndent() )
+ return false;
+
+ if( ! fmt.write( syntax )
+ || ! fmt.write( ':' )
+ || ! fmt.newline() )
+ return fmt.incIndent()
+ && false;
+
+ return fmt.incIndent();
+ }
+ }
+
+ public enum Access
+ {
+ PUBLIC( "public" ),
+ PROTECTED( "protected" ),
+ PRIVATE( "private" );
+
+ private Access( String syntax ) { this.syntax = syntax; }
+ private final String syntax;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( syntax );
+ }
+ }
+
+ private class BaseClassSpecifier implements IGeneratable
+ {
+ private final Access access;
+ // TODO this needs to be NamedElement because there isn't an inheritance tree
+ // to CppClass for externally defined.
+ private final NamedElement element;
+
+ public BaseClassSpecifier( Access access, NamedElement element )
+ {
+ this.access = access;
+ this.element = element;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return element.getType().addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return access.write( fmt )
+ && fmt.space()
+ && fmt.write( element.getName() );
+ }
+ }
+
+ private static class Member implements IGeneratableElement
+ {
+ public final boolean isStatic;
+ public final Visibility visibility;
+ private final IGeneratableElement element;
+
+ public Member( boolean isStatic, Visibility visibility, IGeneratableElement element )
+ {
+ this.isStatic = isStatic;
+ this.visibility = visibility;
+ this.element = element;
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ return element.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ if( ! isStatic )
+ return element.write( out );
+
+ return out.decl().write( "static" )
+ && out.decl().space()
+ && element.write( out );
+ }
+ }
+
+ public void addBase( Access access, NamedElement base )
+ {
+ bases.add( new BaseClassSpecifier( access, base ) );
+ }
+
+ public void addMember( Visibility visibility, Constructor ctor )
+ {
+ ctor.setCppClass( this );
+ ctors.add( new Member( false, visibility, ctor ) );
+ }
+
+ public void addMember( Visibility visibility, MemberFunction function )
+ {
+ function.setParent( this );
+ members.add( new Member( false, visibility, function ) );
+ }
+
+ public void addMember( Visibility visibility, MemberField field )
+ {
+ field.setParent( this );
+ members.add( new Member( false, visibility, field ) );
+ }
+
+ public void addMember( Visibility visibility, CppClass cls )
+ {
+ cls.setParent( this );
+ members.add( new Member( false, visibility, cls ) );
+ }
+
+ public void addMember( Visibility visibility, CppEnum enm )
+ {
+ enm.setParent( this );
+ members.add( new Member( false, visibility, enm ) );
+ }
+
+ public void addMember( Visibility visibility, Typedef typedef )
+ {
+ typedef.setParent( this );
+ members.add( new Member( false, visibility, typedef ) );
+ }
+
+ public void addStaticMember( Visibility visibility, MemberFunction function )
+ {
+ function.setParent( this );
+ members.add( new Member( true, visibility, function ) );
+ }
+
+ public void addStaticMember( Visibility visibility, MemberField field )
+ {
+ field.setParent( this );
+ members.add( new Member( true, visibility, field ) );
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ for( BaseClassSpecifier base : bases )
+ if( ! base.addDependencies( deps.decl() ) )
+ return false;
+ for( Member ctor : ctors )
+ if( ! ctor.addDependencies( deps ) )
+ return false;
+ for( Member member : members )
+ if( ! member.addDependencies( deps ) )
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int compareTo( IForwardDeclarable o )
+ {
+ // TODO this use of identity will cause changes in output file
+ if( ! ( o instanceof CppClass ) )
+ return Integer.compare( hashCode(), o.hashCode() );
+
+ CppClass other = (CppClass)o;
+ int cmp = kind.compareTo( other.kind );
+ if( cmp != 0 )
+ return cmp;
+
+ return getName().compareTo( other.getName() );
+ }
+
+ @Override
+ public boolean writeForwardDeclaration( CppFormatter fmt )
+ {
+ return kind.write( fmt )
+ && fmt.space()
+ && fmt.write( getName() )
+ && fmt.terminate();
+ }
+
+ private boolean writeBaseClassSpecifierList( CppFormatter fmt )
+ {
+ if( bases.isEmpty() )
+ return true;
+
+ if( ! fmt.space() )
+ return false;
+
+ char separator = ':';
+ for( BaseClassSpecifier base : bases )
+ {
+ if( ! fmt.write( separator )
+ || ! fmt.space()
+ || ! base.write( fmt ) )
+ return false;
+ separator = ',';
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ // Initialize all static fields before writing any of the body.
+ for( Member member : members )
+ if( member.isStatic
+ && member.element instanceof MemberField )
+ {
+ MemberField field = (MemberField)member.element;
+ if( ! field.getType().write( out.defn(), field.getName() ) )
+ return false;
+
+ if( field.getInitializer() != null )
+ {
+ if( ! out.defn().write( '(' )
+ || ! out.defn().space()
+ || ! field.getInitializer().write( out.defn() )
+ || ! out.defn().space()
+ || ! out.defn().write( ')' ) )
+ return false;
+ }
+
+ if( ! out.defn().terminate() )
+ return false;
+ }
+
+ if( ! kind.write( out.decl() )
+ || ! out.decl().space()
+ || ! out.decl().write( getName() )
+ || ! writeBaseClassSpecifierList( out.decl() )
+ || ! out.decl().openBrace() )
+ return false;
+
+ out.decl().enter( getName() );
+
+ Visibility prevVisibility = kind.defaultVisibility;
+ for( Member member : ctors )
+ {
+ if( prevVisibility != member.visibility )
+ {
+ if( ! member.visibility.write( out.decl() ) )
+ return false;
+ prevVisibility = member.visibility;
+ }
+
+ if( ! member.write( out )
+ || ! out.defn().newline() )
+ return false;
+ }
+ for( Member member : members )
+ {
+ if( prevVisibility != member.visibility )
+ {
+ if( ! member.visibility.write( out.decl() ) )
+ return false;
+ prevVisibility = member.visibility;
+ }
+
+ if( ! member.write( out )
+ || ! out.defn().newline() )
+ return false;
+ }
+
+ // TODO This is needed for early returns too.
+ out.decl().exit();
+
+ return out.decl().closeBrace( false )
+ && out.decl().terminate();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/CppEnum.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/CppEnum.java
new file mode 100644
index 0000000..e2f544a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/CppEnum.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IUserElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class CppEnum extends NamedElement implements IUserElement, IGeneratable
+{
+ private final NamedElement context;
+ private final Expression firstLiteral;
+ private final List<Enumerator> enumerators = new ArrayList<Enumerator>();
+
+ public CppEnum( String ident ) { this( null, ident, null ); }
+ public CppEnum( NamedElement context, String ident, Expression firstLiteral )
+ {
+ super( ident );
+ this.context = context;
+ this.firstLiteral = firstLiteral;
+ }
+
+ public void add( Enumerator enumerator )
+ {
+ enumerators.add( enumerator );
+ }
+
+ public Enumerator add( String ident )
+ {
+ Enumerator enumerator
+ = ( firstLiteral == null || ! enumerators.isEmpty() )
+ ? new Enumerator( ident )
+ : new Enumerator( ident, firstLiteral );
+
+ if( context != null )
+ enumerator.setParent( context );
+
+ enumerators.add( enumerator );
+ return enumerator;
+ }
+
+ /**
+ * Return the index of the given enumerator in the receiving enum. This is used when initializing
+ * arrays that are indexed by an enumerator.
+ * TODO This should be the enumerator's ordinal.
+ */
+ public int getOrderKey( Enumerator enumerator )
+ {
+ return enumerators.indexOf( enumerator );
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Enumerator enumerator : enumerators )
+ if( ! enumerator.addDependencies( deps ) )
+ return false;
+ return true;
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ return addDependencies( deps.decl() );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.write( "enum" )
+ || ! fmt.space()
+ || ! fmt.write( getName() )
+ || ! fmt.openBrace() )
+ return false;
+
+ boolean first = true;
+ for( Enumerator enumerator : enumerators )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.write( ',' )
+ || ! fmt.newline() )
+ return false;
+
+ if( ! enumerator.write( fmt ) )
+ return false;
+ }
+
+ return fmt.closeBrace( false )
+ && fmt.terminate();
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ return write( out.decl() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/ElementList.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/ElementList.java
new file mode 100644
index 0000000..b0fa9a3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/ElementList.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IUserElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyBlob;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+
+public class ElementList extends HeaderFile
+{
+ private final ElementDependencies extraDeps = new ElementDependencies( this );
+ private final List<IUserElement> elements = new ArrayList<IUserElement>();
+
+ public ElementList( FileName name )
+ {
+ super( name );
+ }
+
+ public void addElement( IUserElement... elements )
+ {
+ for( IUserElement element : elements )
+ {
+ element.setDefinedIn( this );
+ this.elements.add( element );
+ }
+ }
+
+ /**
+ * For debugging and early development. This can be used to work around problems
+ * in the language model where some dependency is not properly captured.
+ *
+ * @deprecated
+ */
+ @Deprecated
+ public void addDeclDependency( DependencyBlob blob ) { extraDeps.decl().add( blob ); }
+ /** @deprecated */
+ @Deprecated
+ public void addDefnDependency( DependencyBlob blob ) { extraDeps.defn().add( blob ); }
+
+ /**
+ * Create and return a formatter that will write to the given memory-based output
+ * stream. Mostly for the test suite.
+ * @see #write(String) This method will be removed too.
+ */
+ public boolean write( CppWriter out )
+ {
+ String protectionMacro = getName().getAbsolutePath().replace( '/', '_' ).toUpperCase() + "_HH";
+ if( ! out.decl().newline()
+ || ! out.decl().writeLn( "#ifndef " + protectionMacro )
+ || ! out.decl().writeLn( "#define " + protectionMacro )
+ || ! out.decl().newline()
+ || ! out.defn().newline()
+ || ! writeInclude( out.defn() )
+ || ! out.defn().newline() )
+ return false;
+
+ ElementDependencies deps = new ElementDependencies( this );
+
+ // Collect dependencies for all contained UserElements. This is done as part of the
+ // write operation because we need the full transitive closure of the dependencies.
+ // It is possible for this closure to change after an element is added.
+ for( IUserElement element : elements )
+ element.addDependencies( deps );
+ if( ! deps.write( out ) )
+ return false;
+
+ // The special list of extra dependencies is written last. It is not added to the
+ // main dependency list because there isn't a way to sort and filter these.
+ if( ! extraDeps.write( out ) )
+ return false;
+
+ // write the elements
+ for( IUserElement element : elements )
+ if( ! element.write( out ) )
+ return false;
+
+ return out.decl().newline()
+ && out.decl().writeLn( "#endif" )
+ && out.decl().newline();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Enumerator.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Enumerator.java
new file mode 100644
index 0000000..0f6aee7
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Enumerator.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class Enumerator extends NamedElement
+{
+ private final Expression literal;
+
+ public Enumerator( String ident ) { this( ident, null ); }
+ public Enumerator( String ident, Expression literal )
+ {
+ super( ident );
+ this.literal = literal;
+ }
+
+ @Override public Type getType() { return PrimitiveType.INT; }
+
+ public boolean addDependencies( DependencyList deps )
+ {
+ return literal == null
+ || literal.addDependencies( deps );
+ }
+
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.write( getName() ) )
+ return false;
+
+ if( literal == null )
+ return true;
+
+ return fmt.space()
+ && fmt.write( '=' )
+ && fmt.space()
+ && literal.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Function.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Function.java
new file mode 100644
index 0000000..68a6b1b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Function.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+
+public class Function extends AbstractFunction
+{
+ private final LinkageSpec linkage;
+
+ public Function( LinkageSpec linkage, Type returnType, String ident )
+ {
+ this( null, linkage, returnType, ident );
+ }
+
+ public Function( HeaderFile header, LinkageSpec linkage, Type returnType, String ident )
+ {
+ super( header, returnType, ident );
+ this.linkage = linkage;
+ }
+
+ public LinkageSpec getLinkage() { return linkage; }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ if( linkage == LinkageSpec.STATIC )
+ return addSignatureDependencies( deps.defn() )
+ && addBodyDependencies( deps.defn() );
+
+ return super.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ // statics are generated only to the defn
+ if( linkage == LinkageSpec.STATIC )
+ return linkage.write( out.defn() )
+ && out.defn().space()
+ && writeSignature( out.defn() )
+ && writeBody( out.defn() );
+
+ // otherwise split the variable between the .hh and .cc
+ return linkage.write( out.decl() )
+ && out.decl().space()
+ && writeSignature( out.decl() )
+ && out.decl().terminate()
+ && writeSignature( out.defn() )
+ && writeBody( out.defn() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/FunctionPointer.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/FunctionPointer.java
new file mode 100644
index 0000000..2461763
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/FunctionPointer.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type.Pointer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.IReferencable;
+
+public class FunctionPointer extends UserElement implements IReferencable
+{
+ private final Type returnType;
+ private final List<Type> parameters = new ArrayList<Type>();
+
+ public FunctionPointer( Type returnType )
+ {
+ this.returnType = returnType;
+ }
+
+ public void add( Type param )
+ {
+ this.parameters.add( param );
+ }
+
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! returnType.write( fmt, null )
+ || ! fmt.space()
+ || ! fmt.write( "(*)(" ) )
+ return false;
+
+ boolean first = true;
+ for( Type param : parameters )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.write( ", " ) )
+ return false;
+
+ if( ! param.write( fmt, null ) )
+ return false;
+ }
+
+ return fmt.write( ')' );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt, Name name, List<Pointer> pointerSpec, List<Expression> arrayBounds )
+ {
+ if( ! returnType.write( fmt, null )
+ || ! fmt.space()
+ || ! fmt.write( '(' )
+ || ! fmt.write( '*' ) )
+ return false;
+
+ for( Type.Pointer ptr : pointerSpec )
+ if( ! ptr.write( fmt ) )
+ return false;
+
+ if( ! fmt.write( name ) )
+ return false;
+
+ // Write out all provided array bounds.
+ for( Expression bound : arrayBounds )
+ if( ! fmt.write( '[' )
+ || ! ( bound == null ? true : bound.write( fmt ) )
+ || ! fmt.write( ']' ) )
+ return false;
+
+ if( ! fmt.write( ')' )
+ || ! fmt.write( '(' ) )
+ return false;
+
+ boolean first = true;
+ for( Type param : parameters )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.write( ", " ) )
+ return false;
+
+ if( ! param.write( fmt, null ) )
+ return false;
+ }
+
+ return fmt.write( ')' );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/LinkageSpec.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/LinkageSpec.java
new file mode 100644
index 0000000..437187f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/LinkageSpec.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+@SuppressWarnings("nls")
+public enum LinkageSpec
+{
+ UNSPECIFIED( "" ),
+ EXTERN( "extern" ),
+ STATIC( "static" );
+
+ private LinkageSpec( String t ) { token = t; }
+ private final String token;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( token );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/MemberField.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/MemberField.java
new file mode 100644
index 0000000..f00c121
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/MemberField.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratableElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class MemberField extends NamedElement implements IGeneratable, IGeneratableElement
+{
+ private final Type type;
+ private final Expression initializer;
+
+ public MemberField( Type type, String ident )
+ {
+ this( type, ident, null );
+ }
+
+ public MemberField( Type type, String ident, Expression initializer )
+ {
+ super( ident );
+ this.type = type;
+ this.initializer = initializer;
+ }
+
+ @Override public Type getType() { return type; }
+ public Expression getInitializer() { return initializer; }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return type.addDependencies( deps );
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ return addDependencies( deps.decl() );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return type.write( fmt, getName() )
+ && fmt.terminate();
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ return write( out.decl() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/MemberFunction.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/MemberFunction.java
new file mode 100644
index 0000000..1d4bea5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/MemberFunction.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type.CVQualifier;
+
+public class MemberFunction extends AbstractFunction
+{
+ private boolean isVirtual;
+ private final CVQualifier cvQualifier;
+
+ public MemberFunction( Type returnType, String ident )
+ {
+ this( returnType, ident, CVQualifier.UNQUALIFIED );
+ }
+
+ public MemberFunction( Type returnType, String ident, CVQualifier cvQualifier )
+ {
+ super( returnType, ident );
+ this.cvQualifier = cvQualifier;
+ }
+
+ public void setVirtual() { isVirtual = true; }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ if( isVirtual
+ && ( ! out.decl().write( "virtual" )
+ || ! out.decl().space() ) )
+ return false;
+
+ if( ! writeSignature( out.decl() )
+ || ! out.decl().pendingSpace()
+ || ! cvQualifier.write( out.decl() )
+ || ! out.decl().terminate()
+ || ! writeSignature( out.defn() )
+ || ! out.defn().pendingSpace()
+ || ! cvQualifier.write( out.defn() ) )
+ return false;
+
+ out.defn().enter( getName() );
+ boolean ret = writeBody( out.defn() );
+ out.defn().exit();
+ return ret;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/NamedElement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/NamedElement.java
new file mode 100644
index 0000000..8960391
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/NamedElement.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type.Pointer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.IReferencable;
+
+public abstract class NamedElement extends UserElement implements IReferencable
+{
+ private final Name name;
+
+ protected NamedElement( String ident ) { this.name = new Name( ident ); }
+ protected NamedElement( HeaderFile header, String ident ) { super( header ); this.name = new Name( ident ); }
+
+ public Name getName() { return name; }
+ public void setParent( NamedElement parent ) { name.setParent( parent ); }
+
+ @Override
+ public boolean write( CppFormatter fmt, Name name, List<Pointer> pointerSpec, List<Expression> arrayBounds )
+ {
+ if( ! fmt.write( getName() )
+ || ! fmt.pendingSpace() )
+ return false;
+
+ boolean first = true;
+ for( Type.Pointer ptr : pointerSpec )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.space() )
+ return false;
+
+ if( ! ptr.write( fmt ) )
+ return false;
+ }
+
+ if( ! fmt.pendingSpace()
+ || ( name != null && ! fmt.write( name ) ) )
+ return false;
+
+ // Write out all provided array bounds.
+ for( Expression bound : arrayBounds )
+ if( ! fmt.write( '[' )
+ || ! ( bound == null ? true : bound.write( fmt ) )
+ || ! fmt.write( ']' ) )
+ return false;
+
+ return true;
+ }
+
+ @Override public String toString() { return name.toString(); }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Parameter.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Parameter.java
new file mode 100644
index 0000000..c5d150d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Parameter.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class Parameter extends NamedElement
+{
+ private final Type type;
+
+ public Parameter( Type type, String ident )
+ {
+ super( ident );
+ this.type = type;
+ }
+
+ @Override
+ public Type getType() { return type; }
+
+ public boolean addDependencies( DependencyList deps )
+ {
+ return type.addDependencies( deps );
+ }
+
+ public boolean write( CppFormatter fmt )
+ {
+ return type.write( fmt, getName() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/PrimitiveType.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/PrimitiveType.java
new file mode 100644
index 0000000..d7daf2f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/PrimitiveType.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.IReferencable;
+
+@SuppressWarnings( "nls" )
+public class PrimitiveType extends Type
+{
+ public static final PrimitiveType VOID = new PrimitiveType( new BuiltInElement( BuiltInType.VOID ) );
+
+ public static final PrimitiveType CHAR = new PrimitiveType( new BuiltInElement( BuiltInType.CHAR ) );
+ public static final PrimitiveType SHORT = new PrimitiveType( new BuiltInElement( BuiltInType.SHORT ) );
+ public static final PrimitiveType INT = new PrimitiveType( new BuiltInElement( BuiltInType.INT ) );
+ public static final PrimitiveType LONG = new PrimitiveType( new BuiltInElement( BuiltInType.LONG ) );
+ public static final PrimitiveType LONGLONG = new PrimitiveType( new BuiltInElement( BuiltInType.LONGLONG ) );
+
+ public static final PrimitiveType UCHAR = new PrimitiveType( new BuiltInElement( BuiltInType.UCHAR ) );
+ public static final PrimitiveType USHORT = new PrimitiveType( new BuiltInElement( BuiltInType.USHORT ) );
+ public static final PrimitiveType UINT = new PrimitiveType( new BuiltInElement( BuiltInType.UINT ) );
+ public static final PrimitiveType ULONG = new PrimitiveType( new BuiltInElement( BuiltInType.ULONG ) );
+ public static final PrimitiveType ULONGLONG = new PrimitiveType( new BuiltInElement( BuiltInType.ULONGLONG ) );
+
+ public static final PrimitiveType BOOL = new PrimitiveType( new BuiltInElement( BuiltInType.BOOL ) );
+ public static final PrimitiveType FLOAT = new PrimitiveType( new BuiltInElement( BuiltInType.FLOAT ) );
+ public static final PrimitiveType DOUBLE = new PrimitiveType( new BuiltInElement( BuiltInType.DOUBLE ) );
+ public static final PrimitiveType LONGDOUBLE = new PrimitiveType( new BuiltInElement( BuiltInType.LONGDOUBLE ) );
+
+ private PrimitiveType( BuiltInElement builtIn )
+ {
+ super( builtIn );
+ }
+
+ private BuiltInType getBuiltInType()
+ {
+ Element element = getElement();
+ if( ! ( element instanceof BuiltInElement ) )
+ throw new RuntimeException( "invalid instance of PrimitiveType" );
+ return ( (BuiltInElement)element ).type;
+ }
+
+ public boolean isIntegral() { return getBuiltInType().integral; }
+ public boolean isUnsigned() { return getBuiltInType().unsigned; }
+
+ @Override
+ public String toString()
+ {
+ return getElement().toString();
+ }
+
+ private static class BuiltInElement extends Element implements IReferencable
+ {
+ public final BuiltInType type;
+ public BuiltInElement( BuiltInType type ) { this.type = type; }
+
+ // TODO link with PrimitiveType?
+ @Override
+ public Type getType() { return new Type( this ); }
+
+ @Override
+ public String toString()
+ {
+ return type.literal;
+ }
+
+ public boolean write( CppFormatter fmt )
+ {
+ return type.write( fmt );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt, Name name, List<Type.Pointer> pointerSpec, List<Expression> arrayBounds )
+ {
+ if( ! write( fmt )
+ || ! fmt.pendingSpace() )
+ return false;
+
+ // TODO is this right?
+ boolean first = true;
+ for( Type.Pointer ptr : pointerSpec )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.space() )
+ return false;
+
+ if( ! ptr.write( fmt ) )
+ return false;
+ }
+
+ if( ! fmt.pendingSpace()
+ || ! fmt.write( name ) )
+ return false;
+
+ // Write out all provided array bounds.
+ for( Expression bound : arrayBounds )
+ if( ! fmt.write( '[' )
+ || ! ( bound == null ? true : bound.write( fmt ) )
+ || ! fmt.write( ']' ) )
+ return false;
+
+ return true;
+ }
+ }
+
+ private static enum BuiltInType
+ {
+ VOID( "void", false, false ),
+
+ CHAR( "char", false, true ),
+ SHORT( "short", false, true ),
+ INT( "int", false, true ),
+ LONG( "long", false, true ),
+ LONGLONG( "long long", false, true ),
+
+ UCHAR( "unsigned char", true, true ),
+ USHORT( "unsigned short", true, true ),
+ UINT( "unsigned int", true, true ),
+ ULONG( "unsigned long", true, true ),
+ ULONGLONG( "unsigned long long", true, true ),
+
+ BOOL( "bool", false, false ),
+ FLOAT( "float", false, false ),
+ DOUBLE( "double", false, false ),
+ LONGDOUBLE( "long double", false, false );
+
+ private BuiltInType( String literal, boolean unsigned, boolean integral )
+ {
+ this.literal = literal;
+ this.unsigned = unsigned;
+ this.integral = integral;
+ }
+
+ public final String literal;
+ public final boolean unsigned;
+ public final boolean integral;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( literal );
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Typedef.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Typedef.java
new file mode 100644
index 0000000..5ecd982
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Typedef.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IUserElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class Typedef extends NamedElement implements IUserElement, IGeneratable
+{
+ private final Type type;
+
+ public Typedef( Type type, String ident )
+ {
+ super( ident );
+ this.type = type;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return type.addDependencies( deps );
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ return addDependencies( deps.decl() );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "typedef" )
+ && fmt.space()
+ && type.write( fmt, getName() )
+ && fmt.terminate();
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ return write( out.decl() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/UserElement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/UserElement.java
new file mode 100644
index 0000000..e73443b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/UserElement.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+
+public abstract class UserElement extends Element
+{
+ private final Kind kind;
+ private final FileName defn;
+
+ public static enum Kind
+ {
+ DEFAULT,
+ HEADER_ONLY,
+ IMPL_ONLY;
+ }
+
+ // TODO remove this
+ protected UserElement() { kind = Kind.DEFAULT; defn = null; }
+ protected UserElement( HeaderFile header ) { super( header ); kind = Kind.DEFAULT; defn = null; }
+ public UserElement( Kind kind, FileName defn )
+ {
+ this.kind = kind;
+ this.defn = defn;
+ }
+
+ @Override public Type getType() { return new Type( this ); }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Variable.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Variable.java
new file mode 100644
index 0000000..01d26f1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/element/Variable.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.element;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.CppWriter;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IUserElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependencies;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.BlockInitializer;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.external.ExternalConstructorCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class Variable extends NamedElement implements IUserElement
+{
+ private final LinkageSpec linkage;
+ private final Type type;
+ private Expression initializer;
+
+ public Variable( Type type, String ident )
+ {
+ this( type, ident, null );
+ }
+
+ public Variable( Type type, String ident, Expression initializer )
+ {
+ this( LinkageSpec.UNSPECIFIED, type, ident, initializer );
+ }
+
+ public Variable( LinkageSpec linkage, Type type, String ident )
+ {
+ this( linkage, type, ident, null );
+ }
+
+ public Variable( LinkageSpec linkage, Type type, String ident, Expression initializer )
+ {
+ super( ident );
+ this.linkage = linkage;
+ this.type = type;
+ this.initializer = initializer;
+ }
+
+ public LinkageSpec getLinkage() { return linkage; }
+ @Override public Type getType() { return type; }
+ public Expression getInitializer() { return initializer; }
+
+ public void setInitializer( Expression expr ) { initializer = expr; }
+
+ /**
+ * Return the number of initialized instances represented by this instance. If
+ * the receiver is not an array type, then it is a single instance. Otherwise
+ * the receiver represents the number of instances in the array initializer.
+ */
+ public int getNumInitializedInstances()
+ {
+ if( ! getType().isArray() )
+ return 1;
+
+ if( initializer == null )
+ return 0;
+
+ if( initializer instanceof BlockInitializer )
+ return ( (BlockInitializer)initializer ).getNumInitializers();
+
+ return 1;
+ }
+
+ public boolean addDependencies( DependencyList deps )
+ {
+ return type.addDependencies( deps )
+ && ( initializer == null
+ || initializer.addDependencies( deps ) );
+ }
+
+ public boolean write( CppFormatter fmt )
+ {
+ return linkage.write( fmt )
+ && fmt.space()
+ && type.write( fmt, getName() )
+ && writeInitializer( fmt )
+ && fmt.terminate();
+ }
+
+ @Override
+ public boolean addDependencies( ElementDependencies deps )
+ {
+ // statics are only in the defn, so all dependencies go there
+ if( linkage == LinkageSpec.STATIC )
+ return type.addDependencies( deps.defn() )
+ && ( initializer == null
+ || initializer.addDependencies( deps.defn() ) );
+
+ // otherwise it is split between .hh and .cc
+ return type.addDependencies( deps.decl() )
+ && ( initializer == null
+ || initializer.addDependencies( deps.defn() ) );
+ }
+
+ @Override
+ public boolean write( CppWriter out )
+ {
+ // statics are generated only to the defn
+ if( linkage == LinkageSpec.STATIC )
+ return linkage.write( out.defn() )
+ && out.defn().space()
+ && type.write( out.defn(), getName() )
+ && writeInitializer( out.defn() )
+ && out.defn().terminate();
+
+ // otherwise split the variable between the .hh and .cc
+ return linkage.write( out.decl() )
+ && out.decl().space()
+ && type.write( out.decl(), getName() )
+ && out.decl().terminate()
+
+ && type.write( out.defn(), getName() )
+ && writeInitializer( out.defn() )
+ && out.defn().terminate();
+ }
+
+ private boolean writeInitializer( CppFormatter fmt )
+ {
+ if( initializer instanceof ConstructorCall )
+ return ( (ConstructorCall)initializer ).writeAsInitializer( fmt );
+ if( initializer instanceof ExternalConstructorCall )
+ return ( (ExternalConstructorCall)initializer ).writeAsInitializer( fmt );
+ if( initializer != null )
+ return fmt.space()
+ && fmt.write( '=' )
+ && fmt.space()
+ && initializer.write( fmt );
+ return true;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/AbstractFunctionCall.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/AbstractFunctionCall.java
new file mode 100644
index 0000000..3e66ed2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/AbstractFunctionCall.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public abstract class AbstractFunctionCall extends Expression
+{
+ private final List<Expression> arguments = new ArrayList<Expression>();
+
+ public AbstractFunctionCall( Expression...args )
+ {
+ arguments.addAll( Arrays.asList( args ) );
+ }
+
+ public void addArgument( Expression arg ) { arguments.add( arg ); }
+ public boolean hasArguments() { return ! arguments.isEmpty(); }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Expression expr : arguments )
+ if( ! expr.addDependencies( deps ) )
+ return false;
+ return true;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.write( '(' ) )
+ return false;
+
+ boolean first = true;
+ for( Expression arg : arguments )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.write( ',' ) )
+ return false;
+
+ if( ! fmt.space()
+ || ! arg.write( fmt ) )
+ return false;
+ }
+
+ return fmt.spaceUnless( '(' )
+ && fmt.write( ')' );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/AddressOfExpr.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/AddressOfExpr.java
new file mode 100644
index 0000000..f080b8e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/AddressOfExpr.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class AddressOfExpr extends Expression
+{
+ private final Expression expr;
+
+ public AddressOfExpr( Expression expr )
+ {
+ this.expr = expr;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return expr.getType().ptr();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return getType().addDependencies( deps )
+ && expr.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( '&' )
+ && expr.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BinaryOperation.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BinaryOperation.java
new file mode 100644
index 0000000..7c6f1aa
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BinaryOperation.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class BinaryOperation extends Expression
+{
+ private final Operator operator;
+ private final Expression lhs;
+ private final Expression rhs;
+
+ public BinaryOperation( Expression lhs, Operator operator, Expression rhs )
+ {
+ this.operator = operator;
+ this.lhs = lhs;
+ this.rhs = rhs;
+ }
+
+ public static enum Operator
+ {
+ ASSIGN( '=' ),
+ ADD( '+' ), SUBTRACT( '-' ), MULTIPLY( '*' ), DIVIDE( '/' ),
+ BITWISE_OR( '|' ), BITWISE_AND( '&' );
+
+ private Operator( char token ) { this.token = token; }
+ private final char token;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( token );
+ }
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return lhs.getType();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return lhs.addDependencies( deps )
+ && rhs.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return lhs.write( fmt )
+ && fmt.space()
+ && operator.write( fmt )
+ && fmt.space()
+ && rhs.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BlockInitializer.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BlockInitializer.java
new file mode 100644
index 0000000..2d072d6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BlockInitializer.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class BlockInitializer extends Expression
+{
+ private final Type type;
+ protected final ArrayList<Expression> exprs = new ArrayList<Expression>();
+
+ public BlockInitializer( Type type ) { this.type = type; }
+ public BlockInitializer( Type type, Expression... exprs )
+ {
+ this.type = type;
+ this.exprs.addAll( Arrays.asList( exprs ) );
+ }
+
+ public void addExpression( Expression expr ) { exprs.add( expr ); }
+ public int getNumInitializers() { return exprs.size(); }
+
+ @Override protected Type createType() { return type; }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ if( ! type.isArray()
+ || type.dereference().isIndirect() )
+ {
+ if( ! type.addDependencies( deps ) )
+ return false;
+ }
+ else if( ! type.dereference().addDependencies( deps ) )
+ return false;
+
+ for( Expression expr : exprs )
+ if( ! expr.addDependencies( deps ) )
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.openBrace() )
+ return false;
+
+ boolean first = true;
+ for( Expression init : exprs )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.writeLn( ',' ) )
+ return false;
+
+ if( ! init.write( fmt ) )
+ return false;
+ }
+
+ return fmt.closeBrace( false );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BooleanLiteral.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BooleanLiteral.java
new file mode 100644
index 0000000..e6255da
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/BooleanLiteral.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+
+public class BooleanLiteral extends Literal
+{
+ public static BooleanLiteral FALSE() { return new BooleanLiteral( "false" ); }
+ public static BooleanLiteral TRUE() { return new BooleanLiteral( "true" ); }
+ public static BooleanLiteral from( boolean value ) { return value ? TRUE() : FALSE(); }
+
+ public BooleanLiteral( boolean value ) { super( PrimitiveType.BOOL, Boolean.toString( value ) ); }
+
+ private BooleanLiteral( String value ) { super( PrimitiveType.BOOL, value ); }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CastExpr.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CastExpr.java
new file mode 100644
index 0000000..7bc51e1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CastExpr.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class CastExpr extends Expression
+{
+ private final Type targetType;
+ private final Expression expr;
+
+ public CastExpr( Type targetType, Expression expr )
+ {
+ this.targetType = targetType;
+ this.expr = expr;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return targetType;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return targetType.addDependencies( deps )
+ && expr.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( '(' )
+ && targetType.write( fmt, null )
+ && fmt.write( ')' )
+ && expr.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CharacterLiteral.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CharacterLiteral.java
new file mode 100644
index 0000000..87807a8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CharacterLiteral.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class CharacterLiteral extends Literal
+{
+ public CharacterLiteral( String value )
+ {
+ // TODO validate input as character
+ super( PrimitiveType.CHAR, value );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( '\'' )
+ && super.write( fmt )
+ && fmt.write( '\'' );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ConditionalOperator.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ConditionalOperator.java
new file mode 100644
index 0000000..da4307f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ConditionalOperator.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ConditionalOperator extends Expression
+{
+ private final Expression expr1;
+ private final Expression expr2;
+ private final Expression expr3;
+
+ public ConditionalOperator( Expression expr1, Expression expr2, Expression expr3 )
+ {
+ this.expr1 = expr1;
+ this.expr2 = expr2;
+ this.expr3 = expr3;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ // TODO 5.16 of N3337 says conversions can be applied to find something common between
+ // expr2 and expr3.
+ return expr2.getType();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return expr1.addDependencies( deps )
+ && expr2.addDependencies( deps )
+ && expr3.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return expr1.write( fmt )
+ && fmt.space()
+ && fmt.write( '?' )
+ && fmt.space()
+ && expr2.write( fmt )
+ && fmt.space()
+ && fmt.write( ':' )
+ && fmt.space()
+ && expr3.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ConstructorCall.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ConstructorCall.java
new file mode 100644
index 0000000..d07682c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ConstructorCall.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Constructor;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ConstructorCall extends AbstractFunctionCall
+{
+ private final Constructor ctor;
+
+ public ConstructorCall( Constructor ctor )
+ {
+ this.ctor = ctor;
+ }
+
+ public ConstructorCall( Constructor ctor, Expression...args )
+ {
+ super( args );
+ this.ctor = ctor;
+ }
+
+ @Override protected Type createType() { return ctor.getCppClass().getType(); }
+
+ // A constructor call introduces no dependencies of its own. By the time it is invoked
+ // the dependencies have already been introduced by the type that is being initialized.
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( ctor.getCppClass().getName() )
+ && ( ! super.hasArguments() || super.write( fmt ) );
+ }
+
+ /**
+ * Writes only the initializer part of the constructor call.
+ */
+ public boolean writeAsInitializer( CppFormatter fmt )
+ {
+ return super.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CppEnumOrderedInitializer.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CppEnumOrderedInitializer.java
new file mode 100644
index 0000000..022ddb5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/CppEnumOrderedInitializer.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.CppEnum;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator;
+
+/**
+ * A specialized BlockInitializer that is able to order the initializing expressions based on the
+ * order of enumerators in a given enum.
+ * TODO Add support for a default value for indices that are not initialized.
+ */
+public class CppEnumOrderedInitializer extends BlockInitializer
+{
+ private final CppEnum cppEnum;
+
+ public CppEnumOrderedInitializer( CppEnum cppEnum, Type type )
+ {
+ super( type );
+ this.cppEnum = cppEnum;
+ }
+
+ /**
+ * Some blocks need to be initialized in a specific order. For example some arrays
+ * are initialized such that they can be indexed with an enumerator. This function
+ * allow the initialization index to be specified.
+ */
+ public void putExpression( Enumerator enumerator, Expression expr )
+ {
+ int index = cppEnum.getOrderKey( enumerator );
+ if( index < 0 )
+ throw new RuntimeException( "invalid initialization of non-member " + enumerator );
+
+ // Grow the list if needed.
+ while( exprs.size() < index )
+ exprs.add( null );
+
+ // If the new element is going on the end of the list, then it can be
+ // added (which will grow the list).
+ if( exprs.size() == index )
+ {
+ exprs.add( expr );
+ return;
+ }
+
+ // Otherwise it will be set the existing element must be null or the same
+ // element.
+ if( exprs.set( index, expr ) != null )
+ throw new RuntimeException( "invalid replacement of initialized index " + index );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/DeleteExpr.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/DeleteExpr.java
new file mode 100644
index 0000000..1396b56
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/DeleteExpr.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class DeleteExpr extends Expression
+{
+ private final Expression expr;
+
+ public DeleteExpr( Expression expr ) { this.expr = expr; }
+
+ @Override
+ protected Type createType()
+ {
+ return PrimitiveType.VOID;
+ }
+
+ /**
+ * A delete expression introduces no dependencies of its own.
+ */
+ @Override public boolean addDependencies( DependencyList deps ) { return expr.addDependencies( deps ); }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "delete" )
+ && fmt.space()
+ && expr.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/DereferenceExpr.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/DereferenceExpr.java
new file mode 100644
index 0000000..b1eb84c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/DereferenceExpr.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class DereferenceExpr extends Expression
+{
+ private final Expression expr;
+
+ public DereferenceExpr( Expression expr )
+ {
+ this.expr = expr;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return expr.getType().dereference();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return getType().addDependencies( deps )
+ && expr.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( '*' )
+ && expr.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ElementAccess.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ElementAccess.java
new file mode 100644
index 0000000..fc58f05
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ElementAccess.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ElementAccess extends Expression
+{
+ protected final NamedElement element;
+
+ public ElementAccess( NamedElement element )
+ {
+ this.element = element;
+ }
+
+ public Name getName() { return element.getName(); }
+
+ @Override
+ protected Type createType()
+ {
+ return element.getType();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return deps.add( new ElementDependency( element ) )
+ && element.getType().addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ // Access expressions should not use the qualified name.
+ return fmt.write( getName().getIdentifier() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ExpressionBlob.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ExpressionBlob.java
new file mode 100644
index 0000000..b839309
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/ExpressionBlob.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyBlob;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ExpressionBlob extends Expression
+{
+ private final DependencyBlob dependencies;
+ private final String code;
+
+ public ExpressionBlob( String code )
+ {
+ this( null, code );
+ }
+
+ public ExpressionBlob( DependencyBlob dependencies, String code )
+ {
+ this.dependencies = dependencies;
+ this.code = code;
+ }
+
+ public String getText()
+ {
+ return code;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return PrimitiveType.VOID;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return dependencies == null ? true : deps.add( dependencies );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( this.code );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FloatingLiteral.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FloatingLiteral.java
new file mode 100644
index 0000000..2340166
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FloatingLiteral.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class FloatingLiteral extends Literal
+{
+ private final boolean isFloat;
+
+ /** Only simple (non exponential-format) values are supported. */
+ public FloatingLiteral( String value )
+ {
+ this( value, false );
+ }
+
+ /** Only simple (non exponential-format) values are supported. */
+ public FloatingLiteral( String value, boolean isFloat )
+ {
+ super( isFloat ? PrimitiveType.FLOAT : PrimitiveType.DOUBLE, value );
+ this.isFloat = isFloat;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! isFloat )
+ return super.write( fmt );
+ return super.write( fmt )
+ && fmt.write( 'f' );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FunctionAddress.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FunctionAddress.java
new file mode 100644
index 0000000..1353cbd
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FunctionAddress.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+/**
+ * Getting the address of a function is a special type of element access because the
+ * way in which the element name is written differs.
+ */
+public class FunctionAddress extends ElementAccess
+{
+ public FunctionAddress( AbstractFunction function )
+ {
+ super( function );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( element.getName() );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FunctionCall.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FunctionCall.java
new file mode 100644
index 0000000..d663c0c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/FunctionCall.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.AbstractFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class FunctionCall extends AbstractFunctionCall
+{
+ private final AbstractFunction function;
+
+ public FunctionCall( AbstractFunction function )
+ {
+ this.function = function;
+ }
+
+ public FunctionCall( AbstractFunction function, Expression...args )
+ {
+ super( args );
+ this.function = function;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return function.getReturnType();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return deps.add( new ElementDependency( function ) )
+ && super.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( function.getName() )
+ && super.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/IndexExpr.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/IndexExpr.java
new file mode 100644
index 0000000..70cef4a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/IndexExpr.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class IndexExpr extends Expression
+{
+ private final Expression array;
+ private final Expression index;
+
+ public IndexExpr( Expression array, Expression index )
+ {
+ this.array = array;
+ this.index = index;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return array.getType().dereference();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return array.addDependencies( deps )
+ && index.addDependencies( deps )
+ && getType().addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return array.write( fmt )
+ && fmt.write( '[' )
+ && index.write( fmt )
+ && fmt.write( ']' );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/IntegralLiteral.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/IntegralLiteral.java
new file mode 100644
index 0000000..483fa75
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/IntegralLiteral.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class IntegralLiteral extends Literal
+{
+ private final String suffix;
+
+ public IntegralLiteral( int value ) { this( Integer.toString( value ) ); }
+ public IntegralLiteral( String value )
+ {
+ this( PrimitiveType.INT, value );
+ }
+
+ private IntegralLiteral( PrimitiveType intType, String value )
+ {
+ super( intType, value );
+
+ if( ! intType.isIntegral() )
+ throw new IllegalArgumentException( String.valueOf( intType ) + " is not a basic integral literal type" );
+
+ suffix = intType.isUnsigned() ? "u" : "";
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return super.write( fmt )
+ && fmt.write( suffix );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/Literal.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/Literal.java
new file mode 100644
index 0000000..32b07de
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/Literal.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public abstract class Literal extends Expression
+{
+ private final Type type;
+ private final String value;
+
+ protected Literal( Type type, String value )
+ {
+ this.type = type;
+ this.value = value;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return type;
+ }
+
+ // Literals never introduce dependencies.
+ @Override public boolean addDependencies( DependencyList deps ) { return true; }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( value );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/LogicalComparison.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/LogicalComparison.java
new file mode 100644
index 0000000..af58a73
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/LogicalComparison.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class LogicalComparison extends Expression
+{
+ private final Operator operator;
+ private final Expression lhs;
+ private final Expression rhs;
+
+ public LogicalComparison( Expression lhs, Operator operator, Expression rhs )
+ {
+ this.operator = operator;
+ this.lhs = lhs;
+ this.rhs = rhs;
+ }
+
+ public static enum Operator
+ {
+ AND( "&&" ), OR( "||" ),
+
+ LESS_THAN( "<" ), GREATER_THAN( ">" ),
+ LESS_THAN_EQUAL( "<=" ), GREATER_THAN_EQUAL( ">=" ),
+
+ EQUIVALENT( "==" ), NOT_EQUIVALENT( "!=" );
+
+ private Operator( String token ) { this.token = token; }
+ private final String token;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( token );
+ }
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return PrimitiveType.BOOL;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return lhs.addDependencies( deps )
+ && rhs.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return lhs.write( fmt )
+ && fmt.space()
+ && operator.write( fmt )
+ && fmt.space()
+ && rhs.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/MemberAccess.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/MemberAccess.java
new file mode 100644
index 0000000..c3a90e8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/MemberAccess.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class MemberAccess extends Expression
+{
+ private final ElementAccess impl;
+
+ public MemberAccess( Expression container, NamedElement field )
+ {
+ impl = new NonStaticAccess( container, field );
+ }
+
+ public MemberAccess( NamedElement container, NamedElement field )
+ {
+ impl = new StaticAccess( container, field );
+ }
+
+ @Override protected Type createType() { return impl.createType(); }
+ @Override public boolean addDependencies( DependencyList deps ) { return impl.addDependencies( deps ); }
+ @Override public boolean write( CppFormatter fmt ) { return impl.write( fmt ); }
+
+ private static class NonStaticAccess extends ElementAccess
+ {
+ private final Expression container;
+
+ public NonStaticAccess( Expression container, NamedElement field )
+ {
+ super( field );
+ this.container = container;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ // The container element is needed in order to get a field. The field is not
+ // needed until it is used.
+ return container.addDependencies( deps )
+ && deps.add( new ElementDependency( container.getType().getElement() ) );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return container.write( fmt )
+ && fmt.write( container.getType().isIndirect() ? "->" : "." )
+ && super.write( fmt );
+ }
+ }
+
+ private static class StaticAccess extends ElementAccess
+ {
+ private final NamedElement container;
+
+ public StaticAccess( NamedElement container, NamedElement field )
+ {
+ super( field );
+ this.container = container;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ // The container element is needed in order to get a field.
+ return deps.add( new ElementDependency( container.getType().getElement() ) );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( getName() );
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/MemberFunctionCall.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/MemberFunctionCall.java
new file mode 100644
index 0000000..b91a95d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/MemberFunctionCall.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.ElementDependency;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class MemberFunctionCall extends AbstractFunctionCall
+{
+ private final Impl receiver;
+ private final MemberFunction function;
+
+ public MemberFunctionCall( Expression container, MemberFunction function )
+ {
+ this.receiver = new Expr( container );
+ this.function = function;
+ }
+
+ public MemberFunctionCall( NamedElement element, MemberFunction function )
+ {
+ this.receiver = new QualName( element );
+ this.function = function;
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return function.getReturnType();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return receiver.addDependencies( deps )
+ && deps.add( new ElementDependency( function ) )
+ && super.addDependencies( deps );
+ }
+
+ private static interface Impl
+ {
+ public boolean addDependencies( DependencyList deps );
+ public boolean write( CppFormatter fmt );
+ }
+
+ private static class Expr implements Impl
+ {
+ private final Expression receiver;
+
+ public Expr( Expression receiver ) { this.receiver = receiver; }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return receiver.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return receiver.write( fmt )
+ && fmt.write( receiver.getType().isIndirect() ? "->" : "." );
+ }
+ }
+
+ private static class QualName implements Impl
+ {
+ private final NamedElement element;
+ private final Name receiver;
+
+ public QualName( NamedElement element )
+ {
+ this.element = element;
+ this.receiver = element.getName();
+ }
+
+ @Override public boolean addDependencies( DependencyList deps )
+ {
+ return element.getType().addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( receiver )
+ && fmt.write( "::" );
+ }
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return receiver.write( fmt )
+ && fmt.write( function.getName().getIdentifier() )
+ && super.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/NewExpr.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/NewExpr.java
new file mode 100644
index 0000000..6caea51
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/NewExpr.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class NewExpr extends Expression
+{
+ private final ConstructorCall call;
+
+ public NewExpr( ConstructorCall call ) { this.call = call; }
+
+ @Override protected Type createType() { return call.createType().ptr(); }
+ @Override public boolean addDependencies( DependencyList deps ) { return call.addDependencies( deps ); }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "new" )
+ && fmt.space()
+ && call.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/Sizeof.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/Sizeof.java
new file mode 100644
index 0000000..c5ccfbc
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/Sizeof.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Element;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class Sizeof extends Expression
+{
+ private final IGeneratable impl;
+
+ public Sizeof( Type type ) { impl = new SizeofType( type ); }
+ public Sizeof( Element element ) { this( element.getType() ); }
+ public Sizeof( Expression expr ) { impl = new SizeofExpr( expr ); }
+ public Sizeof( Variable var ) { this( new ElementAccess( var ) ); }
+ public Sizeof( NamedElement element ) { this( new ElementAccess( element ) ); }
+
+ @Override
+ protected Type createType()
+ {
+ // TODO need a place for std types like std::size_t
+ return PrimitiveType.UINT;
+ }
+
+ @Override public boolean addDependencies( DependencyList deps ) { return impl.addDependencies( deps ); }
+ @Override public boolean write( CppFormatter fmt ) { return impl.write( fmt ); }
+
+ private static class SizeofExpr implements IGeneratable
+ {
+ private final Expression expr;
+
+ public SizeofExpr( Expression expr ) { this.expr = expr; }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return expr.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "sizeof(" )
+ && fmt.space()
+ && expr.write( fmt )
+ && fmt.space()
+ && fmt.write( ')' );
+ }
+ }
+
+ private static class SizeofType implements IGeneratable
+ {
+ private final Type type;
+
+ public SizeofType( Type type ) { this.type = type; }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return type.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "sizeof(" )
+ && fmt.space()
+ && type.write( fmt, null )
+ && fmt.space()
+ && fmt.write( ')' );
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/StringLiteral.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/StringLiteral.java
new file mode 100644
index 0000000..6327f65
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/StringLiteral.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+/** A null-terminated string literal, e.g., "str". */
+public class StringLiteral extends Literal
+{
+ private final static Type type = PrimitiveType.CHAR.const_().constPtr();
+
+ public StringLiteral( String value )
+ {
+ super( type, value );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( '"' )
+ && super.write( fmt )
+ && fmt.write( '"' );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/UnaryOperation.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/UnaryOperation.java
new file mode 100644
index 0000000..38ab2d0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/expr/UnaryOperation.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.expr;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class UnaryOperation extends Expression
+{
+ private final Operator operator;
+ private final Expression expr;
+
+ public UnaryOperation( Operator operator, Expression expr )
+ {
+ this.operator = operator;
+ this.expr = expr;
+ }
+
+ public static enum Operator
+ {
+ PRE_INCREMENT( "++", true ), PRE_DECREMENT( "--", true ),
+ POST_INCREMENT( "++" ), POST_DECREMENT( "--" ),
+
+ LOGICAL_NOT( "!", true, true, true ),
+ BITWISE_NOT( "~", true );
+
+ public final boolean before;
+ public final boolean separator;
+ public final boolean boolean_op;
+
+ private Operator( String syntax ) { this( syntax, false ); }
+ private Operator( String syntax, boolean before ) { this( syntax, before, false ); }
+ private Operator( String syntax, boolean before, boolean separator ) { this( syntax, before, separator, false ); }
+ private Operator( String syntax, boolean before, boolean separator, boolean boolean_op )
+ {
+ this.syntax = syntax;
+ this.before = before;
+ this.separator = separator;
+ this.boolean_op = boolean_op;
+ }
+
+ private final String syntax;
+
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( syntax );
+ }
+ }
+
+ @Override
+ protected Type createType()
+ {
+ return operator.boolean_op ? PrimitiveType.BOOL : expr.getType();
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return expr.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( operator.before )
+ return fmt.write( operator.syntax )
+ && ( ! operator.separator || fmt.space() )
+ && expr.write( fmt );
+
+ return expr.write( fmt )
+ && ( ! operator.separator || fmt.space() )
+ && fmt.write( operator.syntax );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalConstructorCall.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalConstructorCall.java
new file mode 100644
index 0000000..37014ec
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalConstructorCall.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ExternalConstructorCall extends AbstractFunctionCall
+{
+ private final ExternalElement element;
+
+ public ExternalConstructorCall( ExternalElement element )
+ {
+ this.element = element;
+ }
+
+ @Override protected Type createType() { return element.getType(); }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( element.getName() )
+ && super.write( fmt );
+ }
+
+ /**
+ * Writes only the initializer part of the constructor call.
+ */
+ public boolean writeAsInitializer( CppFormatter fmt )
+ {
+ return super.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalElement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalElement.java
new file mode 100644
index 0000000..17a7be5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalElement.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+
+/**
+ * This is used to represent elements that are available in external libraries. External
+ * elements are used in two ways:
+ * <ol>
+ * <li>As a dependency target, e.g., #include <type.h></li>
+ * <li>As a container listing the available members, e.g., signal->id</li>
+ * </ol>
+ * This base class is for introducing unstructured external types. Subclasses are able
+ * to provide more information related to fields.
+ */
+public class ExternalElement extends NamedElement
+{
+ public ExternalElement( ExternalHeaderFile header, String ident )
+ {
+ super( header, ident );
+ }
+
+ @Override
+ public void setDefinedIn( HeaderFile header )
+ {
+ throw new RuntimeException( "external types cannot be defined in user-defined element lists" );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalFileName.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalFileName.java
new file mode 100644
index 0000000..3fa416a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalFileName.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.name.FileName;
+
+/**
+ * An external filename is written using the exact string provided in the constructor.
+ * This differs from the FileName base class because FileName applies the current
+ * header extension preference to the given name.
+ */
+public class ExternalFileName extends FileName
+{
+ public ExternalFileName( String name )
+ {
+ super( name );
+ }
+
+ @Override
+ public String getIncludePath()
+ {
+ return getAbsolutePath();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalFwdDeclarable.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalFwdDeclarable.java
new file mode 100644
index 0000000..55a6424
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalFwdDeclarable.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.IForwardDeclarable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ExternalFwdDeclarable extends ExternalElement implements IForwardDeclarable
+{
+ private final String forwardDecl;
+
+ public ExternalFwdDeclarable( ExternalHeaderFile header, String ident, String forwardDecl )
+ {
+ super( header, ident );
+ this.forwardDecl = forwardDecl;
+ }
+
+ @Override
+ public int compareTo( IForwardDeclarable o )
+ {
+ // TODO this use of identity will cause changes in output file
+ if( ! ( o instanceof ExternalFwdDeclarable ) )
+ return Integer.compare( hashCode(), o.hashCode() );
+
+ ExternalFwdDeclarable other = (ExternalFwdDeclarable)o;
+
+ // Sort non-forward-declarables at the start.
+ if( forwardDecl == null || forwardDecl.isEmpty() )
+ return other.forwardDecl == null || other.forwardDecl.isEmpty() ? 0 : -1;
+ else if( other.forwardDecl == null || other.forwardDecl.isEmpty() )
+ return 1;
+
+ return forwardDecl.compareTo( other.forwardDecl );
+ }
+
+ @Override
+ public boolean writeForwardDeclaration( CppFormatter fmt )
+ {
+ if( forwardDecl == null || forwardDecl.isEmpty() )
+ return true;
+
+ return fmt.write( forwardDecl )
+ && fmt.terminate();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalHeaderFile.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalHeaderFile.java
new file mode 100644
index 0000000..9383d79
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/ExternalHeaderFile.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+
+public class ExternalHeaderFile extends HeaderFile
+{
+ private final boolean isSystem;
+
+ public ExternalHeaderFile( String filename ) { this( false, filename ); }
+ public ExternalHeaderFile( ExternalFileName filename )
+ {
+ super( filename ); this.isSystem = false;
+ }
+ public ExternalHeaderFile( boolean isSystem, String filename )
+ {
+ super( new ExternalFileName( filename ) );
+ this.isSystem = isSystem;
+ }
+
+ @Override
+ protected String getIncludeTarget( String filename )
+ {
+ return isSystem
+ ? "<" + getName().getIncludePath() + '>'
+ : super.getIncludeTarget( filename );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/StandardLibrary.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/StandardLibrary.java
new file mode 100644
index 0000000..201a563
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/StandardLibrary.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Function;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.LinkageSpec;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.NamedElement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.AbstractFunctionCall;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess;
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.FunctionCall;
+
+public class StandardLibrary
+{
+ private static final ExternalHeaderFile cstddef = new ExternalHeaderFile( true, "cstddef" );
+ private static final ExternalHeaderFile stdint_h = new ExternalHeaderFile( true, "stdint.h" );
+ private static final ExternalHeaderFile string_h = new ExternalHeaderFile( true, "string.h" );
+
+ private static final Function memcpy_f = new Function( string_h, LinkageSpec.EXTERN, PrimitiveType.VOID.ptr(), "memcpy" );
+ private static final Function memset_f = new Function( string_h, LinkageSpec.EXTERN, PrimitiveType.VOID.ptr(), "memset" );
+
+ public static AbstractFunctionCall memcpy( Expression dest, Expression src, Expression n )
+ {
+ return new FunctionCall( memcpy_f, dest, src, n );
+ }
+
+ public static AbstractFunctionCall memset( Expression buffer, Expression byteValue, Expression num )
+ {
+ return new FunctionCall( memset_f, buffer, byteValue, num );
+ }
+
+ public static final NamedElement NULL = new ExternalElement( cstddef, "NULL" );
+ public static final Expression NULL() { return new ElementAccess( NULL ); }
+ public static final Type size_t = new ExternalElement( cstddef, "size_t" ).getType();
+
+ public static final Type int8_t = new ExternalElement( stdint_h, "int8_t" ).getType();
+ public static final Type int16_t = new ExternalElement( stdint_h, "int16_t" ).getType();
+ public static final Type int32_t = new ExternalElement( stdint_h, "int32_t" ).getType();
+ public static final Type int64_t = new ExternalElement( stdint_h, "int64_t" ).getType();
+ public static final Type uint8_t = new ExternalElement( stdint_h, "uint8_t" ).getType();
+ public static final Type uint16_t = new ExternalElement( stdint_h, "uint16_t" ).getType();
+ public static final Type uint32_t = new ExternalElement( stdint_h, "uint32_t" ).getType();
+ public static final Type uint64_t = new ExternalElement( stdint_h, "uint64_t" ).getType();
+ public static final Type wchar_t = new ExternalElement( stdint_h, "wchar_t" ).getType();
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/SystemHeaderFile.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/SystemHeaderFile.java
new file mode 100644
index 0000000..474848b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/external/SystemHeaderFile.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.external;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.HeaderFile;
+
+public class SystemHeaderFile extends HeaderFile
+{
+ public SystemHeaderFile( String filename ) { this( new ExternalFileName( filename ) ); }
+ public SystemHeaderFile( ExternalFileName name ) { super( name ); }
+
+ @Override
+ protected String getIncludeTarget( String filename )
+ {
+ return "<" + filename + '>';
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/CppFormatter.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/CppFormatter.java
new file mode 100644
index 0000000..21e4d1a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/CppFormatter.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.internal;
+
+import java.io.ByteArrayOutputStream;
+import java.util.Stack;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.io.CodeFormatter;
+import org.eclipse.papyrusrt.codegen.lang.io.ComparisonStream;
+
+public class CppFormatter extends CodeFormatter
+{
+ private Stack<Name> context = new Stack<Name>();
+
+ public static CppFormatter create( String pathname )
+ {
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ return stm == null ? null : new CppFormatter( stm );
+ }
+
+ public static CppFormatter createProvisional( String pathname )
+ {
+ ComparisonStream stm = ComparisonStream.createProvisional( pathname );
+ return stm == null ? null : new CppFormatter( stm );
+ }
+
+ protected CppFormatter( ComparisonStream stm )
+ {
+ super( stm );
+ }
+
+ public void enter( Name name ) { context.push( name ); }
+ public void exit() { context.pop(); }
+
+ public boolean write( Name name )
+ {
+ if( name == null )
+ {
+ clearPending();
+ return true;
+ }
+
+ return name.writeQualified( this, context.isEmpty() ? null : context.peek() );
+ }
+
+ /**
+ * Create and return a formatter that will write to the given memory-based output
+ * stream. Mostly for the test suite.
+ */
+ public static CppFormatter createMemoryBased( ByteArrayOutputStream out )
+ {
+ return new CppFormatter( new ComparisonStream( out ) );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/IReferencable.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/IReferencable.java
new file mode 100644
index 0000000..8d09482
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/IReferencable.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.internal;
+
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Name;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+
+public interface IReferencable
+{
+ public boolean write( CppFormatter fmt, Name name, List<Type.Pointer> pointerSpec, List<Expression> arrayBounds );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/IWritableReference.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/IWritableReference.java
new file mode 100644
index 0000000..70e546a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/internal/IWritableReference.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.internal;
+
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type;
+
+public interface IWritableReference
+{
+ public boolean write( CppFormatter fmt, String name, List<Type.Pointer> pointerSpec, List<Expression> arrayBounds );
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/FileName.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/FileName.java
new file mode 100644
index 0000000..1fb3309
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/FileName.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.name;
+
+
+public class FileName extends FolderName
+{
+ private boolean hasObjectCode = false;
+
+ public FileName( String name )
+ {
+ super( name );
+ }
+
+ public FileName( FolderName folder, String name )
+ {
+ super( folder, name );
+ }
+
+ public void setHasObjectCode( boolean b ) { hasObjectCode = b; }
+
+ public String getIncludePath()
+ {
+ return getAbsolutePath() + ".hh";
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/FolderName.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/FolderName.java
new file mode 100644
index 0000000..d3a7e71
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/FolderName.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.name;
+
+
+public class FolderName
+{
+ private final FolderName parent;
+ private final String name;
+
+ public FolderName( String name ) { this( null, name ); }
+ public FolderName( FolderName parent, String name )
+ {
+ this.parent = parent;
+ this.name = name;
+ }
+
+ public String getFolderName() { return name; }
+
+ public String getAbsolutePath()
+ {
+ if( parent == null )
+ return name;
+
+ return parent.getAbsolutePath()
+ + '/'
+ + name;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/SystemFileName.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/SystemFileName.java
new file mode 100644
index 0000000..74c6861
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/name/SystemFileName.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.name;
+
+/**
+ * A marker to generate the right type of #include directive.
+ */
+public class SystemFileName extends FileName
+{
+ public SystemFileName( String name )
+ {
+ super( null, name );
+ }
+
+ public SystemFileName( FolderName parent, String name )
+ {
+ super( parent, name );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/BreakStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/BreakStatement.java
new file mode 100644
index 0000000..c1c1fd6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/BreakStatement.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class BreakStatement extends Statement
+{
+ @Override public boolean addDependencies( DependencyList deps ) { return true; }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "break" )
+ && fmt.terminate();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/CodeBlock.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/CodeBlock.java
new file mode 100644
index 0000000..2defbbb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/CodeBlock.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class CodeBlock extends Statement
+{
+ private boolean forceBraces;
+ private final List<Statement> statements = new ArrayList<Statement>();
+
+ public static CodeBlock defaultBraces() { return new CodeBlock( false ); }
+ public static CodeBlock forceBraces() { return new CodeBlock( true ); }
+
+ public CodeBlock( Statement... stmts )
+ {
+ this( false );
+ statements.addAll( Arrays.asList( stmts ) );
+ }
+
+ protected CodeBlock( boolean braces ) { forceBraces = braces; }
+
+ public void setForceBraces() { forceBraces = true; }
+ public boolean isForceBraces() { return forceBraces; }
+ public void add( Statement... stmts ) { add( Arrays.asList( stmts ) ); }
+ public void add( List<Statement> stmts ) { statements.addAll( stmts ); }
+ public void add( Expression expr ) { add( new ExpressionStatement( expr ) ); }
+ public void add( Variable var ) { add( new VariableDeclarationStatement( var ) ); }
+
+ public Iterable<Statement> getStatements() { return statements; }
+ public Statement getLast() { return statements.size() <= 0 ? null : statements.get( statements.size() - 1 ); }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Statement stmt : statements )
+ if( ! stmt.addDependencies( deps ) )
+ return false;
+ return true;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ boolean useBraces = forceBraces || statements.size() != 1;
+
+ if( ( useBraces && ! fmt.openBrace() )
+ || ( ! useBraces && ! fmt.incIndent() ) )
+ return false;
+
+ for( Statement stmt : statements )
+ if( ! stmt.write( fmt ) )
+ {
+ fmt.decIndent();
+ return false;
+ }
+
+ return useBraces ? fmt.closeBrace() : fmt.decIndent();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ConditionalStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ConditionalStatement.java
new file mode 100644
index 0000000..c8893fd
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ConditionalStatement.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ConditionalStatement extends Statement
+{
+ private final List<Branch> branches = new ArrayList<ConditionalStatement.Branch>();
+ private Branch defaultBranch = null;
+
+ public ConditionalStatement() { }
+
+ /**
+ * Creates a new if or "else if" with the given condition and returns
+ * a CodeBlock for adding statements to the body.
+ */
+ public CodeBlock add( Expression condition )
+ {
+ Branch branch = new Branch( condition );
+ branches.add( branch );
+ return branch;
+ }
+
+ /** Returns the conditional's single else block. */
+ public CodeBlock defaultBlock()
+ {
+ if( defaultBranch == null )
+ defaultBranch = new Branch( null );
+ return defaultBranch;
+ }
+
+ private static class Branch extends CodeBlock
+ {
+ public final Expression condition;
+ public Branch( Expression condition ) { this.condition = condition; }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return ( condition == null ? true : condition.addDependencies( deps ) )
+ && super.addDependencies( deps );
+ }
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Branch branch : branches )
+ if( ! branch.addDependencies( deps ) )
+ return false;
+
+ return defaultBranch == null ? true : defaultBranch.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ boolean first = true;
+ for( Branch branch : branches )
+ {
+ // If the block's first statement is a condition, then forceBraces
+ // on to avoid confusion with dangling-else. The code would generate properly
+ // (because we're holding a graph of properly structured elements), but it
+ // is less confusing to read when there are explicit braces.
+ if( branch.getLast() instanceof ConditionalStatement )
+ branch.setForceBraces();
+
+ if( first )
+ first = false;
+ else if( ! fmt.write( "else " ) )
+ return false;
+
+ if( ! fmt.write( "if" )
+ || ! fmt.write( '(' )
+ || ! fmt.space()
+ || ! branch.condition.write( fmt )
+ || ! fmt.space()
+ || ! fmt.write( ')' )
+ || ! fmt.newline()
+ || ! branch.write( fmt ) )
+ return false;
+ }
+
+ if( defaultBranch == null )
+ return true;
+
+ return fmt.write( "else" )
+ && fmt.newline()
+ && defaultBranch.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ExpressionStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ExpressionStatement.java
new file mode 100644
index 0000000..266ccde
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ExpressionStatement.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ExpressionStatement extends Statement
+{
+ private final Expression expr;
+
+ public ExpressionStatement( Expression expr ) { this.expr = expr; }
+
+ // Allow null expression for reuse by things like ReturnStatement.
+ protected ExpressionStatement() { this( null ); }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return expr == null ? true : expr.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( expr == null )
+ return fmt.terminate();
+
+ return expr.write( fmt )
+ && fmt.terminate();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ForStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ForStatement.java
new file mode 100644
index 0000000..6e2e2ad
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ForStatement.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ForStatement extends Statement
+{
+ private final List<Variable> loopVars = new ArrayList<Variable>();
+ private final Expression condition;
+ private final List<Expression> increments = new ArrayList<Expression>();
+ private final CodeBlock body = CodeBlock.defaultBraces();
+
+ public ForStatement( Variable loopVar, Expression condition, Expression increment )
+ {
+ if( loopVar != null )
+ {
+ validateLoopVar( loopVar );
+ this.loopVars.add( loopVar );
+ }
+ this.condition = condition;
+ if( increment != null )
+ this.increments.add( increment );
+ }
+
+ public boolean addLoopVar( Variable var )
+ {
+ validateLoopVar( var );
+
+ loopVars.add( var );
+ return true;
+ }
+
+ public void addIncrementExpression( Expression expr ) { increments.add( expr ); }
+ public void add( Statement stmt ) { body.add( stmt ); }
+
+ private void validateLoopVar( Variable var ) throws RuntimeException
+ {
+ // The var cannot be added unless its type exactly matches the existing ones.
+ if( ! loopVars.isEmpty()
+ && ! var.getType().equals( loopVars.get( 0 ).getType() ) )
+ throw new RuntimeException( "cannot create loop variables with differing types" );
+
+ if( var.getInitializer() == null )
+ throw new RuntimeException( "cannot create loop variables without an initializer" );
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Variable var : loopVars )
+ if( ! var.addDependencies( deps ) )
+ return false;
+ if( ! condition.addDependencies( deps ) )
+ return false;
+ for( Expression expr : increments )
+ if( ! expr.addDependencies( deps ) )
+ return false;
+ return body.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.write( "for" )
+ || ! fmt.write( '(' )
+ || ! fmt.space() )
+ return false;
+
+ boolean first = true;
+ for( Variable loopVar : loopVars )
+ {
+ if( first )
+ {
+ if( ! loopVar.getType().write( fmt, loopVar.getName() ) )
+ return false;
+ first = false;
+ }
+ else if( ! fmt.write( ',' )
+ || ! fmt.space()
+ || ! fmt.write( loopVar.getName() ) )
+ return false;
+
+ if( ! fmt.space()
+ || ! fmt.write( '=' )
+ || ! fmt.space()
+ || ! loopVar.getInitializer().write( fmt ) )
+ return false;
+ }
+
+ if( ! fmt.write( ';' )
+ || ! fmt.space()
+ || ! condition.write( fmt )
+ || ! fmt.write( ';' )
+ || ! fmt.space() )
+ return false;
+
+ first = true;
+ for( Expression inc : increments )
+ {
+ if( first )
+ first = false;
+ else if( ! fmt.write( ',' )
+ || ! fmt.space() )
+ return false;
+
+ if( ! inc.write( fmt ) )
+ return false;
+ }
+
+ return fmt.space()
+ && fmt.write( ')' )
+ && fmt.newline()
+ && body.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ReturnStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ReturnStatement.java
new file mode 100644
index 0000000..4b89de5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/ReturnStatement.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class ReturnStatement extends ExpressionStatement
+{
+ public ReturnStatement() { }
+ public ReturnStatement( Expression expr ) { super( expr ); }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "return" )
+ && fmt.pendingSpace()
+ && super.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/SwitchClause.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/SwitchClause.java
new file mode 100644
index 0000000..85801e3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/SwitchClause.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.IGeneratable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class SwitchClause implements IGeneratable
+{
+ private final List<Expression> labels = new ArrayList<Expression>();
+ private final List<Statement> body = new ArrayList<Statement>();
+ private boolean isFallthrough = false;
+
+ public SwitchClause() { labels.add( null ); }
+ public SwitchClause( Expression... labels )
+ {
+ this.labels.addAll( Arrays.asList( labels ) );
+ }
+
+ public void addLabel( Expression label ) { labels.add( label ); }
+ public void addDefault() { labels.add( null ); }
+
+ public boolean isFallthrough() { return isFallthrough; }
+ public void setFallthrough( boolean b ) { isFallthrough = b; }
+
+ public void add( Statement stmt ) { body.add( stmt ); }
+ public void add( Expression expr ) { add( new ExpressionStatement( expr ) ); }
+ public void add( Variable var ) { add( new VariableDeclarationStatement( var ) ); }
+
+ private static boolean needsBraces( Iterable<Statement> stmts )
+ {
+ for( Statement stmt : stmts )
+ {
+ if( stmt instanceof VariableDeclarationStatement )
+ return true;
+ else if( stmt instanceof CodeBlock )
+ return needsBraces( ( (CodeBlock)stmt ).getStatements() );
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns false if the last statement on all execution paths is break or return and
+ * true otherwise.
+ * <p>
+ * <strong>NOTE</strong>: This isn't fully implemented yet, it only checks the last
+ * statement, not the contents of conditionals.
+ */
+ public boolean clauseFallsthrough()
+ {
+ if( body.size() <= 0 )
+ return true;
+
+ Statement last = body.get( body.size() - 1 );
+ return ! ( last instanceof ReturnStatement )
+ && ! ( last instanceof BreakStatement );
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ for( Expression expr : labels )
+ if( ! expr.addDependencies( deps ) )
+ return false;
+ for( Statement stmt : body )
+ if( ! stmt.addDependencies( deps ) )
+ return false;
+ return true;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ for( Expression label : labels )
+ {
+ if( ! ( label == null
+ ? fmt.write( "default" )
+ : ( fmt.write( "case " ) && label.write( fmt ) ) )
+ || ! fmt.writeLn( ':' ) )
+ return false;
+ }
+
+ boolean needsBraces = needsBraces( body );
+
+ if( needsBraces )
+ {
+ if( ! fmt.openBrace() )
+ return false;
+ }
+ else if( ! fmt.incIndent() )
+ return false;
+
+ for( Statement stmt : body )
+ if( ! stmt.write( fmt ) )
+ return false;
+
+ if( needsBraces )
+ {
+ if( ! fmt.closeBrace() )
+ return false;
+ }
+ else if( ! fmt.decIndent() )
+ return false;
+
+ if( ! clauseFallsthrough() )
+ return true;
+
+ return fmt.incIndent()
+ && fmt.writeLn( "// break intentionally omitted" )
+ && fmt.decIndent();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/SwitchStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/SwitchStatement.java
new file mode 100644
index 0000000..c3af3c4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/SwitchStatement.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class SwitchStatement extends Statement
+{
+ private final Expression condition;
+ private final List<SwitchClause> clauses = new ArrayList<SwitchClause>();
+
+ public SwitchStatement( Expression condition ) { this.condition = condition; }
+
+ public void add( SwitchClause clause )
+ {
+ if( ! clause.isFallthrough()
+ && clause.clauseFallsthrough() )
+ clause.add( new BreakStatement() );
+
+ clauses.add( clause );
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ if( ! condition.addDependencies( deps ) )
+ return false;
+
+ for( SwitchClause clause : clauses )
+ if( ! clause.addDependencies( deps ) )
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ if( ! fmt.write( "switch( " )
+ || ! condition.write( fmt )
+ || ! fmt.writeLn( " )" )
+ || ! fmt.openBrace()
+ || ! fmt.decIndent() )
+ return false;
+
+ boolean ret = true;
+ for( SwitchClause clause : clauses )
+ if( ! ( ret = clause.write( fmt ) ) )
+ break;
+
+ return fmt.incIndent()
+ && fmt.closeBrace()
+ && ret;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/UserCode.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/UserCode.java
new file mode 100644
index 0000000..6383634
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/UserCode.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyBlob;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+/**
+ * UserCode should be used to generate the opaque string provided for various actions
+ * by the user. This should only be used in contexts where the user code will be
+ * generated into the body of a function.
+ */
+public class UserCode extends Statement
+{
+ private final DependencyBlob dependencies;
+ private final String code;
+
+ public UserCode( String code )
+ {
+ this( null, code );
+ }
+
+ public UserCode( DependencyBlob dependencies, String code )
+ {
+ this.dependencies = dependencies;
+ this.code = code;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return dependencies == null ? true : deps.add( dependencies );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ // Write the lines separately to apply the appropriate indent.
+ BufferedReader reader = new BufferedReader( new StringReader( code ) );
+ String line = null;
+ try
+ {
+ while( ( line = reader.readLine() ) != null )
+ if( ! fmt.writeLn( line ) )
+ return false;
+ }
+ catch( IOException e )
+ {
+ CodeGenPlugin.error( e );
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/VariableDeclarationStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/VariableDeclarationStatement.java
new file mode 100644
index 0000000..36d813c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/VariableDeclarationStatement.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class VariableDeclarationStatement extends Statement
+{
+ private final Variable variable;
+
+ public VariableDeclarationStatement( Variable variable )
+ {
+ this.variable = variable;
+ }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return variable.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return variable.write( fmt );
+ };
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/WhileStatement.java b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/WhileStatement.java
new file mode 100644
index 0000000..d5f8295
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.cpp/src/org/eclipse/papyrusrt/codegen/lang/cpp/stmt/WhileStatement.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.cpp.stmt;
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression;
+import org.eclipse.papyrusrt.codegen.lang.cpp.Statement;
+import org.eclipse.papyrusrt.codegen.lang.cpp.dep.DependencyList;
+import org.eclipse.papyrusrt.codegen.lang.cpp.internal.CppFormatter;
+
+public class WhileStatement extends Statement
+{
+ private final Expression condition;
+ private final CodeBlock body = CodeBlock.defaultBraces();
+
+ public WhileStatement( Expression condition )
+ {
+ this.condition = condition;
+ }
+
+ public void add( Statement stmt ) { body.add( stmt ); }
+
+ @Override
+ public boolean addDependencies( DependencyList deps )
+ {
+ return condition.addDependencies( deps )
+ && body.addDependencies( deps );
+ }
+
+ @Override
+ public boolean write( CppFormatter fmt )
+ {
+ return fmt.write( "while" )
+ && fmt.write( '(' )
+ && fmt.space()
+ && condition.write( fmt )
+ && fmt.space()
+ && fmt.write( ')' )
+ && fmt.newline()
+ && body.write( fmt );
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/.classpath b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/.project b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.project
new file mode 100644
index 0000000..d1804ca
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.lang.test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.lang.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..72bcf03
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Language Model Tests
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.lang.test
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.papyrusrt.codegen.lang,
+ org.junit;bundle-version="4.11.0"
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/about.html b/codegen/org.eclipse.papyrusrt.codegen.lang.test/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/about.properties b/codegen/org.eclipse.papyrusrt.codegen.lang.test/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/build.properties b/codegen/org.eclipse.papyrusrt.codegen.lang.test/build.properties
new file mode 100644
index 0000000..17daa5b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.lang.test/pom.xml
new file mode 100644
index 0000000..92c5424
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.lang.test</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-test-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang.test/src/org/eclipse/papyrusrt/codegen/lang/test/ComparisonStreamTest.java b/codegen/org.eclipse.papyrusrt.codegen.lang.test/src/org/eclipse/papyrusrt/codegen/lang/test/ComparisonStreamTest.java
new file mode 100644
index 0000000..ad7dc35
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang.test/src/org/eclipse/papyrusrt/codegen/lang/test/ComparisonStreamTest.java
@@ -0,0 +1,626 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.eclipse.papyrusrt.codegen.lang.io.ComparisonStream;
+import org.junit.Test;
+
+public class ComparisonStreamTest
+{
+ // Avoid linux-problems with 1-second granularity on file timestamps by pausing for a second
+ // where needed.
+ private static final boolean isLinux = System.getProperty( "os.name", "DefaultOS" ).startsWith( "Linux" );
+
+ private void pause()
+ {
+ synchronized( this )
+ {
+ long delay = isLinux ? 1000 : 20;
+
+ try
+ {
+ wait( delay );
+ }
+ catch( InterruptedException e )
+ { /* empty */
+ }
+ }
+ }
+
+ @Test
+ public void test01_MissingFile() throws IOException
+ {
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ file.delete();
+ assertFalse( file.exists() );
+
+ int sample = 42;
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample );
+ stm.close();
+
+ file = new File( pathname );
+ assertTrue( file.exists() );
+
+ assertEquals( 1, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( sample, in.read() );
+ assertEquals( -1, in.read() );
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test02_SameContent() throws IOException
+ {
+ int sample = 42;
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime == file.lastModified() );
+
+ assertEquals( 1, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( sample, in.read() );
+ assertEquals( -1, in.read() );
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test03_DifferentContent() throws IOException
+ {
+ int sample01 = 42;
+ int sample02 = sample01 + 1;
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample01 );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( 2, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( sample01, in.read() );
+ assertEquals( sample02, in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test04_ShorterFile() throws IOException
+ {
+ int sample01 = 42;
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample01 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( 1, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( sample01, in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test05_LongerFile() throws IOException
+ {
+ int sample01 = 42;
+ int sample02 = sample01 + 1;
+ int sample03 = sample01 + 2;
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.write( sample02 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample01 );
+ stm.write( sample02 );
+ stm.write( sample03 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( 3, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( sample01, in.read() );
+ assertEquals( sample02, in.read() );
+ assertEquals( sample03, in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test06_ShorterFileWithNewContent() throws IOException
+ {
+ int sample01 = 42;
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.write( sample01 );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample01 );
+ stm.write( sample01 + 1 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( 2, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( sample01, in.read() );
+ assertEquals( sample01 + 1, in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test07_BuffMissingFile() throws IOException
+ {
+ byte[] sample = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ file.delete();
+ assertFalse( file.exists() );
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample );
+ stm.close();
+
+ file = new File( pathname );
+ assertTrue( file.exists() );
+
+ assertEquals( sample.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample.length; ++i )
+ assertEquals( sample[i], in.read() );
+ assertEquals( -1, in.read() );
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test08_BuffSameContent() throws IOException
+ {
+ byte[] sample = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime == file.lastModified() );
+
+ assertEquals( sample.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample.length; ++i )
+ assertEquals( sample[i], in.read() );
+ assertEquals( -1, in.read() );
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test09_BuffDifferentContent() throws IOException
+ {
+ byte[] sample01 = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+ byte[] sample02 = new byte[]
+ {
+ 42, 43, 46, 47
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( sample02.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample02.length; ++i )
+ assertEquals( sample02[i], in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test10_BuffShorterFile() throws IOException
+ {
+ byte[] sample01 = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+ byte[] sample02 = new byte[]
+ {
+ 42, 43
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( sample02.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample02.length; ++i )
+ assertEquals( sample02[i], in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test11_BuffLongerFile() throws IOException
+ {
+ byte[] sample01 = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+ byte[] sample02 = new byte[]
+ {
+ 42, 43, 44, 45, 46, 47, 48, 49
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( sample02.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample02.length; ++i )
+ assertEquals( sample02[i], in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test12_BuffShorterFileWithNewContent() throws IOException
+ {
+ byte[] sample01 = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+ byte[] sample02 = new byte[]
+ {
+ 42, 46, 44
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( sample02.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample02.length; ++i )
+ assertEquals( sample02[i], in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test13_BuffDiffOnBoundary() throws IOException
+ {
+ byte[] sample01 = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+ byte[] sample02 = new byte[]
+ {
+ 42, 44, 46, 47
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname, 2 );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( sample02.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample02.length; ++i )
+ assertEquals( sample02[i], in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test14_BuffDiffBeforeBoundary() throws IOException
+ {
+ byte[] sample01 = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+ byte[] sample02 = new byte[]
+ {
+ 42, 46, 44, 45
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample01 );
+ out.close();
+
+ long modTime = file.lastModified();
+ pause();
+
+ ComparisonStream stm = ComparisonStream.create( pathname, 2 );
+ stm.write( sample02 );
+ stm.close();
+
+ assertTrue( file.exists() );
+ assertTrue( modTime < file.lastModified() );
+
+ assertEquals( sample02.length, file.length() );
+ FileInputStream in = new FileInputStream( file );
+ for( int i = 0; i < sample02.length; ++i )
+ assertEquals( sample02[i], in.read() );
+ assertEquals( -1, in.read() );
+
+ in.close();
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test15_DeferredCreate() throws IOException
+ {
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ file.delete();
+
+ assertFalse( new File( pathname ).exists() );
+
+ ComparisonStream stm = ComparisonStream.createProvisional( pathname );
+ assertNotNull( stm );
+
+ assertFalse( new File( pathname ).exists() );
+
+ file.deleteOnExit();
+ }
+
+ @Test
+ public void test16_ProvisionalWriteOnNewFile() throws IOException
+ {
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ file.delete();
+ assertFalse( new File( pathname ).exists() );
+
+ ComparisonStream stm = ComparisonStream.createProvisional( pathname );
+ assertNotNull( stm );
+ assertFalse( new File( pathname ).exists() );
+ assertTrue( stm.isProvisional() );
+ stm.write( (byte)'a' );
+ assertTrue( stm.isProvisional() );
+ assertFalse( new File( pathname ).exists() );
+ stm.close();
+ assertFalse( new File( pathname ).exists() );
+ }
+
+ @Test
+ public void test17_RealWriteOnNewFile() throws IOException
+ {
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ file.delete();
+ assertFalse( new File( pathname ).exists() );
+
+ // write real content, make sure the file is created
+ ComparisonStream stm = ComparisonStream.createProvisional( pathname );
+ assertNotNull( stm );
+ assertFalse( new File( pathname ).exists() );
+ stm.write( (byte)'b' );
+ assertFalse( new File( pathname ).exists() );
+
+ stm.enableWrites();
+ assertFalse( new File( pathname ).exists() );
+ stm.write( (byte)'c' );
+ assertTrue( new File( pathname ).exists() );
+ stm.close();
+
+ FileInputStream in = new FileInputStream( file );
+ assertEquals( 'b', in.read() );
+ assertEquals( 'c', in.read() );
+ assertEquals( -1, in.read() );
+ in.close();
+
+ // create a new stream, with provisional content, make sure file
+ // gets deleted
+ stm = ComparisonStream.createProvisional( pathname );
+ assertNotNull( stm );
+ assertTrue( new File( pathname ).exists() );
+ stm.write( (byte)'d' );
+ stm.write( (byte)'e' );
+ assertTrue( new File( pathname ).exists() );
+ stm.close();
+ assertFalse( new File( pathname ).exists() );
+ }
+
+ // Create a file then write the same content and make sure lastChar is properly
+ // updated.
+ @Test
+ public void test18_lastChar() throws IOException
+ {
+ byte[] sample = new byte[]
+ {
+ 42, 43, 44, 45
+ };
+
+ File file = File.createTempFile( "cstm", null );
+ String pathname = file.getAbsolutePath();
+ FileOutputStream out = new FileOutputStream( file );
+ out.write( sample );
+ out.close();
+
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ assertEquals( 0, stm.getLastChar() );
+
+ stm.write( sample[0] );
+ assertEquals( sample[0], stm.getLastChar() );
+
+ stm.write( sample, 1, 2 );
+ assertEquals( sample[2], stm.getLastChar() );
+
+ stm.close();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/.classpath b/codegen/org.eclipse.papyrusrt.codegen.lang/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/.project b/codegen/org.eclipse.papyrusrt.codegen.lang/.project
new file mode 100644
index 0000000..9030d0b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.lang</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.lang/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.lang/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7576a60
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Language Model
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.lang
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: org.eclipse.papyrusrt.codegen.lang.io
+Require-Bundle: org.eclipse.papyrusrt.codegen,
+ org.eclipse.xtext.xbase.lib
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/about.html b/codegen/org.eclipse.papyrusrt.codegen.lang/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/about.properties b/codegen/org.eclipse.papyrusrt.codegen.lang/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/build.properties b/codegen/org.eclipse.papyrusrt.codegen.lang/build.properties
new file mode 100644
index 0000000..17daa5b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.lang/pom.xml
new file mode 100644
index 0000000..3e6b70b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.lang</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/src/org/eclipse/papyrusrt/codegen/lang/io/CodeFormatter.java b/codegen/org.eclipse.papyrusrt.codegen.lang/src/org/eclipse/papyrusrt/codegen/lang/io/CodeFormatter.java
new file mode 100644
index 0000000..8642d28
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/src/org/eclipse/papyrusrt/codegen/lang/io/CodeFormatter.java
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.io;
+
+import java.io.IOException;
+
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+
+/**
+ * The formatter provides basic code formatting support for code that is written.
+ * This provides reasonable looking code even when the generator is executed
+ * outside of Eclipse (where the CDT formatter is not available).
+ */
+public class CodeFormatter
+{
+ private final ComparisonStream stm;
+
+ private int indentLevel = 0;
+ private static final byte[] Indent = " ".getBytes();
+ private boolean noText = true;
+ private String pending = null;
+
+ public static CodeFormatter create( String pathname )
+ {
+ ComparisonStream stm = ComparisonStream.create( pathname );
+ return stm == null ? null : new CodeFormatter( stm );
+ }
+
+ public static CodeFormatter createProvisional( String pathname )
+ {
+ ComparisonStream stm = ComparisonStream.createProvisional( pathname );
+ return stm == null ? null : new CodeFormatter( stm );
+ }
+
+ protected CodeFormatter( ComparisonStream stm )
+ {
+ this.stm = stm;
+ }
+
+ /**
+ * Mark the stream at places where a token could optionally be generated. This is used
+ * to suppress a trailing space.
+ */
+ public boolean markNoText() { noText = true; return true; }
+
+ // The formatter allows for pending characters to be set. They will be
+ // written on any normal write that happens before clearPending is called.
+ // This is used for things like formatting parameters lists as:
+ // ( arg1, arg2 ) or ().
+ public void clearPending() { pending = null; }
+ public void setPending( String p ) { pending = p; }
+ private void flushPendingFor( char c )
+ {
+ if( pending == null )
+ return;
+
+ // Don't write trailing whitespace
+ if( c == '\n' )
+ while( pending.length() > 0 )
+ {
+ int len = pending.length();
+ char last = pending.charAt( len - 1 );
+ if( last != ' ' )
+ break;
+ pending = pending.substring( 0, len - 1 );
+ }
+
+ if( pending.isEmpty() )
+ {
+ pending = null;
+ return;
+ }
+
+ // Avoid cycles where the call to write( pending ) try to flush the pending.
+ String p = pending;
+ pending = null;
+ write( p );
+ }
+
+ public void enableWrites()
+ {
+ stm.enableWrites();
+ }
+
+ public boolean isProvisional()
+ {
+ return stm.isProvisional();
+ }
+
+ public void close()
+ {
+ try { stm.close(); }
+ catch( IOException e ) { CodeGenPlugin.error( e ); }
+ }
+
+ public boolean write( String str )
+ {
+ if( str == null
+ || str.isEmpty() )
+ return true;
+
+ flushPendingFor( str.charAt( 0 ) );
+
+ try
+ {
+ writeIndent();
+
+ int lastNewline = 0;
+ while( lastNewline >= 0 )
+ {
+ // TODO this should manage all special characters
+ int nextNewline = str.indexOf( '\n', lastNewline + 1 );
+ if( nextNewline < 0 )
+ {
+ noText = false;
+ stm.write( str.substring( lastNewline ).getBytes() );
+ return true;
+ }
+
+ noText = false;
+ stm.write( str.substring( lastNewline, nextNewline ).getBytes() );
+ newline();
+
+ lastNewline = nextNewline + 1;
+ }
+ }
+ catch( IOException e )
+ {
+ CodeGenPlugin.error( e );
+ return false;
+ }
+ return true;
+ }
+
+ public boolean write( char c )
+ {
+ flushPendingFor( c );
+
+ try
+ {
+ if( c != '\n' )
+ writeIndent();
+
+ noText = false;
+ stm.write( (byte)c );
+ }
+ catch( IOException e )
+ {
+ CodeGenPlugin.error( e );
+ return false;
+ }
+ return true;
+ }
+
+ // Writes indent at the appropriate level. This cannot be implemented by
+ // setting pending after a newline because the level of indent could change
+ // before it actually needs to be written.
+ private boolean writeIndent()
+ {
+ if( indentLevel > 0
+ && stm.getLastChar() == '\n' )
+ {
+ for( int i = 0; i < indentLevel; ++i )
+ {
+ try { stm.write( Indent ); }
+ catch( IOException e ) { CodeGenPlugin.error( e ); return false; }
+ }
+ }
+
+ return true;
+ }
+
+ public boolean incIndent()
+ {
+ ++indentLevel;
+ return true;
+ }
+
+ public boolean decIndent()
+ {
+ --indentLevel;
+ return true;
+ }
+
+ public boolean space()
+ {
+ // If there wasn't a token before the current location then the space is not needed.
+ if( noText )
+ return true;
+
+ switch( getLastChar() )
+ {
+ case '\0':
+ case ' ':
+ case '\n':
+ return true;
+ default:
+ break;
+ }
+
+ return write( ' ' );
+ }
+
+ private char getLastChar()
+ {
+ if( pending != null
+ && ! pending.isEmpty() )
+ return pending.charAt( pending.length() - 1 );
+
+ // If the last char was a newline, and there is a positive level of
+ // indent, then our next char will be a space.
+ char last = stm.getLastChar();
+ if( last != '\n' )
+ return last;
+
+ return indentLevel > 0 ? ' ' : last;
+ }
+
+ public boolean spaceUnless( char last )
+ {
+ return getLastChar() == last
+ || write( ' ' );
+ }
+
+ public boolean pendingSpace()
+ {
+ if( noText )
+ return true;
+
+ // If a space was just written then there is nothing else to do.
+ if( stm.getLastChar() == ' ' )
+ return true;
+
+ // If we aren't currently pending anything, then make a pending space.
+ if( pending == null
+ || pending.isEmpty() )
+ pending = " ";
+
+ // Otherwise, if the we are pending and the last char is not a space, then
+ // append one. If there is a space there already, then suppress this one
+ // by doing nothing.
+ else if( pending.charAt( pending.length() - 1 ) != ' ' )
+ pending = pending + " ";
+
+ return true;
+ }
+
+ public boolean newline()
+ {
+ return write( '\n' );
+ }
+
+ public boolean terminate()
+ {
+ // If anything is pending then strip all trailing whitespace before
+ // writing the terminator.
+ if( pending != null
+ && ! pending.isEmpty() )
+ {
+ byte[] p = pending.getBytes();
+ pending = null;
+ for( int i = p.length - 1; i >= 0; --i )
+ if( p[i] != ' ' )
+ {
+ write( new String( p, 0, i ) );
+ break;
+ }
+ }
+
+ return writeLn( ';' );
+ }
+
+ public boolean openBrace()
+ {
+ if( ( stm.getLastChar() != '\n' && ! newline() )
+ || ! writeLn( '{' ) )
+ return false;
+
+ ++indentLevel;
+ return true;
+ }
+
+ public boolean closeBrace( boolean trailingNewline )
+ {
+ --indentLevel;
+ return ( stm.getLastChar() == '\n' || newline() )
+ && write( '}' )
+ && ( ! trailingNewline || newline() );
+ }
+
+ public boolean closeBrace()
+ {
+ return closeBrace( true );
+ }
+
+ public boolean writeLn( char c )
+ {
+ return write( c )
+ && newline();
+ }
+
+ public boolean writeLn( String str )
+ {
+ return write( str )
+ && newline();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.lang/src/org/eclipse/papyrusrt/codegen/lang/io/ComparisonStream.java b/codegen/org.eclipse.papyrusrt.codegen.lang/src/org/eclipse/papyrusrt/codegen/lang/io/ComparisonStream.java
new file mode 100644
index 0000000..cf60b2f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.lang/src/org/eclipse/papyrusrt/codegen/lang/io/ComparisonStream.java
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.lang.io;
+
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+
+/**
+ * An OutputStream that compares new and old versions of a file. The file is only
+ * modified if the new content differs from the old.
+ */
+public class ComparisonStream extends OutputStream
+{
+ private final String pathname;
+
+ // Reads of the existing file are buffered within this implementation. BufferedInputStream
+ // does not provide enough access to the content of the buffer.
+ private final byte[] inBuff;
+ private int pos;
+ private int end;
+ private int len = 0;
+ private char lastChar = '\0';
+
+ // The input stream is only used until there is a difference in content. The output
+ // stream is only used after that point.
+ private File existing;
+ private InputStream in;
+ private OutputStream out;
+
+ // Provisional mode is used to speculatively start a file that may have nothing but
+ // boilerplate content. For example, when a C++ header is created, we want to write
+ // the guard macro. If the file turns out to have no real content, then the entire
+ // buffer is abandoned without writing anything to disk. This is managed by starting
+ // the stream in "provisional" mode.
+ private boolean provisional = false;
+ private StringBuilder provisionalBuffer;
+
+ public static ComparisonStream create( String pathname, int buffLen )
+ {
+ ComparisonStream stm = new ComparisonStream( pathname, buffLen );
+ try
+ {
+ stm.createFile();
+ }
+ catch( IOException e )
+ {
+ CodeGenPlugin.error( e );
+ return null;
+ }
+ return stm;
+ }
+
+ /** TODO This hasn't been tested yet. */
+ public static ComparisonStream createProvisional( String pathname, int buffLen )
+ {
+ ComparisonStream stm = new ComparisonStream( pathname, buffLen );
+ stm.provisional = true;
+ stm.provisionalBuffer = new StringBuilder( 512 );
+ return stm;
+ }
+
+ public static ComparisonStream create( String pathname )
+ {
+ return create( pathname, 64 * 1024 );
+ }
+
+ public static ComparisonStream createProvisional( String pathname )
+ {
+ return createProvisional( pathname, 64 * 1024 );
+ }
+
+ private ComparisonStream( String pathname, int buffLen )
+ {
+ this.pathname = pathname;
+ this.inBuff = new byte[buffLen];
+ this.pos = 0;
+ this.end = 0;
+ }
+
+ private int next() throws IOException
+ {
+ // There isn't a next character when the current file does not exist.
+ if( in == null )
+ return -1;
+
+ if( pos >= end )
+ {
+ end = in.read( inBuff );
+ len += end;
+ pos = 0;
+ }
+
+ return pos >= end ? -1 : inBuff[pos++];
+ }
+
+ /**
+ * Returns the last character that was written to the stream. This is used for things
+ * like suppressing duplicate spaces.
+ */
+ public char getLastChar()
+ {
+ return lastChar;
+ }
+
+ /**
+ * Return true if the stream is able to write and false otherwise.
+ */
+ public void enableWrites()
+ {
+ provisional = false;
+ }
+
+ /**
+ * Return true if the receiver is in provisional mode and false otherwise.
+ */
+ public boolean isProvisional()
+ {
+ // the receiver is in provisional mode until the buffer is flushed
+ return provisional || provisionalBuffer != null;
+ }
+
+ private void createFile() throws IOException
+ {
+ File file = new File( pathname );
+ File dir = file.getParentFile();
+ if( dir != null
+ && ! dir.exists() )
+ dir.mkdirs();
+
+ // The input stream is only needed when the file already exists, otherwise
+ // start writing immediately. This implementation managed its own buffer,
+ // the stream does not need buffering of its own.
+ if( file.exists() )
+ in = new FileInputStream( file );
+
+ existing = file;
+ }
+
+ /** Buffer must not be flushed when the receiver is still in provisional mode. */
+ private void flushProvisionalBuffer() throws IOException
+ {
+ if( provisional || provisionalBuffer == null )
+ return;
+
+ // flush is only called when there is something to write, so the
+ // file must be created, etc. at this point
+ createFile();
+
+ // disable the provisional buffer before starting a recursive path
+ StringBuilder buff = provisionalBuffer;
+ provisionalBuffer = null;
+ write( buff.toString().getBytes() );
+ }
+
+ // Change the stream from read-compare mode to always-write mode.
+ private void changeToWriteMode( boolean truncateExisting ) throws IOException
+ {
+ // The input stream is no longer needed.
+ if( in != null )
+ in.close();
+ in = null;
+
+ // Create a new stream to append the rest of the content to the existing file.
+ FileOutputStream stm = new FileOutputStream( existing, true );
+
+ // If the file has any more data (indicated by having just read something)
+ // then it needs to be truncated before the byte that differed.
+ if( truncateExisting )
+ stm.getChannel().truncate( len - end + pos - 1 );
+
+ out = new BufferedOutputStream( stm );
+ }
+
+ @Override
+ public void write( int b ) throws IOException
+ {
+ // if the stream is in provisional mode, then just write to the buffer
+ if( provisional && provisionalBuffer != null )
+ {
+ provisionalBuffer.append( (char)b );
+ return;
+ }
+
+ // otherwise make sure the buffer has been flushed
+ flushProvisionalBuffer();
+
+ // At this point the char is committed to either going out or to
+ // matching the existing, update internal tracking.
+ lastChar = (char)b;
+
+ // and continue with the normal write
+ if( out != null )
+ {
+ out.write( b );
+ return;
+ }
+
+ int next = next();
+ if( next == b )
+ return;
+
+ // If the file has any more data (indicated by having just read something)
+ // then it needs to be truncated before the byte that differed.
+ changeToWriteMode( next >= 0 );
+
+ out.write( b );
+ }
+
+ @Override
+ public void write( byte[] b, int o, int l ) throws IOException
+ {
+ // if the stream is in provisional mode, then just write to the buffer
+ if( provisional && provisionalBuffer != null )
+ {
+ while( o < l )
+ provisionalBuffer.append( (char)b[o++] );
+ return;
+ }
+
+ // otherwise make sure the buffer has been flushed
+ flushProvisionalBuffer();
+
+ // and continue with the normal write
+ for( ; l > 0; ++o, --l )
+ {
+ if( out != null )
+ {
+ out.write( b, o, l );
+ lastChar = (char)b[o + l - 1];
+ return;
+ }
+
+ int next = next();
+ if( next == b[o] )
+ lastChar = (char)b[o];
+ else
+ {
+ // If the file has any more data (indicated by having just read something)
+ // then it needs to be truncated before the byte that differed.
+ changeToWriteMode( next >= 0 );
+
+ out.write( b, o, l );
+ lastChar = (char)b[o + l - 1];
+ return;
+ }
+ }
+ }
+
+ @Override
+ public void close() throws IOException
+ {
+ // if still in provisional mode, then nothing should be
+ // written, delete the existing file if it exists
+ if( isProvisional() )
+ new File( pathname ).delete();
+
+ if( out != null )
+ try { out.close(); }
+ catch( IOException e ) { e.printStackTrace(); }
+
+ // We are not writing any more new input to the file, if we were still
+ // reading a file then either the new content is identical to the old
+ // (since any change would have closed the input stream to change to
+ // write mode), or the new content is shorter than the old. In the second
+ // case we need to truncate the existing file at the current position.
+ if( in != null )
+ {
+ int newLen = len - end + pos;
+ if( existing.length() > newLen )
+ {
+ FileOutputStream stm = null;
+ try
+ {
+ stm = new FileOutputStream( existing, true );
+ stm.getChannel().truncate( newLen );
+ }
+ catch( IOException e )
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ if( stm != null )
+ try { stm.close(); }
+ catch( IOException e ) { }
+ }
+ }
+ in.close();
+ }
+ }
+
+ /**
+ * Create and return a formatter that will write to the given memory-based output
+ * stream. Mostly for the test suite.
+ */
+ public ComparisonStream( ByteArrayOutputStream out )
+ {
+ this.pathname = "";
+ this.inBuff = new byte[0];
+ this.pos = 0;
+ this.end = 0;
+
+ this.out = out;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/.classpath b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/.project b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.project
new file mode 100644
index 0000000..ba53930
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.papyrus</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..26674cb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT CodeGen Papyrus Integration
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.papyrus;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.databinding;bundle-version="1.4.2",
+ org.eclipse.emf.transaction;bundle-version="1.8.0",
+ org.eclipse.emf.workspace;bundle-version="1.5.1",
+ org.eclipse.papyrus.codegen.base;bundle-version="1.0.2",
+ org.eclipse.papyrus.infra.core;bundle-version="1.0.2",
+ org.eclipse.papyrus.infra.core.log,
+ org.eclipse.papyrus.infra.emf,
+ org.eclipse.papyrus.infra.widgets,
+ org.eclipse.papyrus.uml.tools,
+ org.eclipse.papyrus.uml.properties,
+ org.eclipse.papyrus.umlrt,
+ org.eclipse.papyrus.views.properties,
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.papyrusrt.codegen.xtumlrt.trans
+Export-Package: org.eclipse.papyrusrt.codegen.papyrus
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrusrt.codegen.papyrus.Activator
+Import-Package: org.eclipse.papyrusrt.codegen.cpp
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/about.html b/codegen/org.eclipse.papyrusrt.codegen.papyrus/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/about.properties b/codegen/org.eclipse.papyrusrt.codegen.papyrus/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/build.properties b/codegen/org.eclipse.papyrusrt.codegen.papyrus/build.properties
new file mode 100644
index 0000000..786b1df
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml
new file mode 100644
index 0000000..874a98f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/plugin.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension point="org.eclipse.ui.commands">
+ <category
+ name="UML-RT Commands"
+ description="Commands related to the PapyrusRT UML-RT implementation"
+ id="org.eclipse.papyrusrt.codegen.papyrus.commands-category"/>
+ <command
+ name="UML-RT Code Generator"
+ description="Generate code for the selected element of a UML-RT model"
+ categoryId="org.eclipse.papyrusrt.codegen.papyrus.commands-category"
+ id="org.eclipse.papyrusrt.codegen.papyrus.codegen"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.handlers">
+ <handler
+ commandId="org.eclipse.papyrusrt.codegen.papyrus.codegen"
+ class="org.eclipse.papyrusrt.codegen.papyrus.internal.UMLRTCppCodeGen">
+<!--
+ <activeWhen>
+ <with variable="selection">
+ <iterate operator="and">
+ <adapt type="org.eclipse.core.resources.IFile">
+ <or>
+ <test property="org.eclipse.core.resources.name" value="*.hex"/>
+ <test property="org.eclipse.core.resources.name" value="*.exh"/>
+ </or>
+ </adapt>
+ </iterate>
+ </with>
+ </activeWhen>
+-->
+ </handler>
+ </extension>
+
+ <extension point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="true"
+ locationURI="popup:org.eclipse.papyrus.views.modelexplorer.modelexplorer.popup">
+ <command
+ commandId="org.eclipse.papyrusrt.codegen.papyrus.codegen">
+ <visibleWhen checkEnabled="true"/>
+ </command>
+ </menuContribution>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.core.service">
+ <service
+ classname="org.eclipse.papyrusrt.codegen.papyrus.internal.ModelCloseService"
+ id="org.eclipse.papyrusrt.codegen.papyrus.modelclose"
+ priority="1"
+ startKind="startup">
+ <dependsOn
+ serviceKeyRef="org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor">
+ </dependsOn>
+ </service>
+ </extension>
+<!--
+ <extension point="org.eclipse.ui.bindings">
+ <key
+ commandId="com.zeligsoft.umlrt.papyrus.codegen"
+ sequence=""
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
+ </extension>
+ -->
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.papyrus/pom.xml
new file mode 100644
index 0000000..7edf42a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.papyrus</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/Activator.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/Activator.java
new file mode 100644
index 0000000..4b61ae4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/Activator.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrusrt.codegen.papyrus"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+ * )
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+
+ // register the login helper
+ log = new LogHelper(plugin);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+ * )
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/UMLRTGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/UMLRTGenerator.java
new file mode 100644
index 0000000..dfb9f86
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/UMLRTGenerator.java
@@ -0,0 +1,231 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus;
+
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.papyrus.codegen.base.codesync.ChangeObject;
+import org.eclipse.papyrus.codegen.base.codesync.ManageChangeEvents;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.CppProjectGenerator;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtModelTranslator;
+
+@SuppressWarnings("nls")
+public class UMLRTGenerator
+{
+ public static IStatus generate( List<EObject> elements, String top )
+ {
+ UML2xtumlrtModelTranslator translator = new UML2xtumlrtModelTranslator();
+ CppCodePattern cpp = new CppCodePattern();
+ CppCodeGenerator codegen = new CppCodeGenerator( cpp, translator );
+
+ codegen.setTop( top );
+ final List<ChangeObject> changes = new ArrayList<ChangeObject>();
+ // The set of inputs is grouped by project and each project is generated independently.
+ Map<IFolder, List<EObject>> targets = new HashMap<IFolder, List<EObject>>();
+
+ for( EObject eobj : elements )
+ {
+ getChanges( changes, eobj );
+ IFolder folder = getOutputFolder( eobj );
+ List<EObject> list = targets.get( folder );
+ if( list == null )
+ {
+ list = new ArrayList<EObject>();
+ targets.put( folder, list );
+ }
+ list.add( eobj );
+ }
+
+ codegen.getChangeTracker().addChanges( changes );
+
+ // The ErrorDialog cannot display status that is OK. There is a bitmask check that needs
+ // at least a bit to be enabled. We use INFO instead of OK to work around this.
+ MultiStatus status = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, "UML-RT Code Generator Invoked", null );
+
+ long start = System.currentTimeMillis();
+ if( targets.isEmpty() )
+ status.add( CodeGenPlugin.error( "Selection must contain at least one model element" ) );
+ else
+ {
+ try
+ {
+ for( Map.Entry<IFolder, List<EObject>> entry : targets.entrySet() )
+ {
+ java.nio.file.Path path = Paths.get( entry.getKey().getLocation().toPortableString() );
+
+ translator.setTargets( entry.getValue() );
+ translator.setOutputPath( path );
+
+ try { status.addAll( translator.generate() ); }
+ catch( Throwable t )
+ {
+ status.add( CodeGenPlugin.error( "Error during translation", t ) );
+ t.printStackTrace( System.err );
+ continue;
+ }
+
+ List<EObject> translated = translator.getAllGenerated();
+ if (translated == null || translated.isEmpty()) continue;
+
+ cpp.setOutputFolder( entry.getKey().getLocation().toFile() );
+ codegen.setTargets( translated );
+
+ try { status.addAll( codegen.generate() ); }
+ catch( Throwable t )
+ {
+ status.add( CodeGenPlugin.error( "Error during generation", t ) );
+ t.printStackTrace( System.err );
+ continue;
+ }
+
+ long writeStart = System.currentTimeMillis();
+ if( cpp.write() )
+ status.add( CodeGenPlugin.info( "Updated generated files " + ( System.currentTimeMillis() - writeStart ) + "ms" ) );
+ else
+ status.add( CodeGenPlugin.error( "Failed to write generated model to disk" ) );
+
+ entry.getKey().refreshLocal( IResource.DEPTH_INFINITE, null );
+ }
+ }
+ catch( Throwable t )
+ {
+ CodeGenPlugin.error( "error during codegen action", t );
+ status.add( CodeGenPlugin.error( t ) );
+ }
+ }
+
+ String message
+ = "Generation "
+ + ( status.getSeverity() <= IStatus.INFO ? "complete" : "error" )
+ + ", elapsed time "
+ + ( System.currentTimeMillis() - start ) + " ms";
+
+ MultiStatus result = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, message, null );
+ result.addAll( status );
+ return result;
+ }
+
+ private static void getChanges( final List<ChangeObject> changes,
+ EObject object )
+ {
+ TransactionalEditingDomain domain = TransactionUtil
+ .getEditingDomain( object );
+
+ if (domain != null)
+ {
+
+ EList<ChangeObject> changeList = ManageChangeEvents
+ .getChangeList( domain );
+ ManageChangeEvents.stopRecording( domain );
+ ManageChangeEvents.initChangeList( domain, true );
+ if (changeList != null)
+ {
+ changes.addAll( changeList );
+ }
+ }
+ }
+
+ private static IFolder getOutputFolder( EObject eobj )
+ {
+ URI uri = eobj.eResource().getURI();
+
+ // Default project name is same as name of the UML file
+ String[] segments = uri.segments();
+ String projectName = segments[segments.length - 1];
+ projectName = projectName.replace( ".uml", "" ) + "_CDTProject";
+
+ String rootPath = ResourcesPlugin.getWorkspace().getRoot()
+ .getLocation().toOSString();
+ IProject project = ResourcesPlugin.getWorkspace().getRoot()
+ .getProject( projectName );
+
+ if (!project.exists())
+ {
+
+ boolean result = new CppProjectGenerator().generate( rootPath,
+ projectName );
+ if (!result)
+ {
+ CodeGenPlugin.error( "Failed to create output project" );
+ return null;
+ }
+
+ try
+ {
+ IProjectDescription description = ResourcesPlugin
+ .getWorkspace()
+ .loadProjectDescription( new Path( rootPath + "/"
+ + projectName
+ + "/.project" ) );
+ project = ResourcesPlugin.getWorkspace().getRoot()
+ .getProject( description.getName() );
+ project.create( description, null );
+ }
+ catch (CoreException e1)
+ {
+ CodeGenPlugin.error( "Failed to create output project" );
+ }
+ }
+
+ if (!project.isOpen())
+ {
+ try
+ {
+ project.open( new NullProgressMonitor() );
+ }
+ catch (CoreException e)
+ {
+ CodeGenPlugin.error( "Failed to open project" );
+ }
+ }
+
+ // Bug 109: Refresh the folder before checking if it exists.
+ IFolder folder = project.getFolder( "src" );
+ try
+ {
+ folder.refreshLocal( IResource.DEPTH_ZERO, null );
+ }
+ catch (CoreException e)
+ {
+ CodeGenPlugin.error( "could not refresh output folder", e );
+ }
+
+ if (!folder.exists()) try
+ {
+ folder.create( true, true, null );
+ }
+ catch (CoreException e)
+ {
+ CodeGenPlugin.error( "could not create output folder", e );
+ }
+
+ return folder;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/ModelCloseService.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/ModelCloseService.java
new file mode 100644
index 0000000..6b1ac33
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/ModelCloseService.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus.internal;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.EditorLifecycleEventListener;
+import org.eclipse.papyrus.infra.core.services.EditorLifecycleManager;
+import org.eclipse.papyrus.infra.core.services.IService;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrusrt.codegen.cpp.UML2ChangeTracker;
+
+
+public class ModelCloseService implements IService
+{
+ private ServicesRegistry registry;
+
+ public ModelCloseService()
+ {
+ }
+
+ @Override
+ public void disposeService() throws ServiceException
+ {
+ }
+
+ @Override
+ public void init( ServicesRegistry registry ) throws ServiceException
+ {
+ this.registry = registry;
+ }
+
+ @Override
+ public void startService() throws ServiceException
+ {
+ ModelSet modelSet = registry.getService( ModelSet.class ); // Get the ModelSet service from the ServicesRegistry
+ TransactionalEditingDomain editingDomain = modelSet
+ .getTransactionalEditingDomain();
+ EditorLifecycleManager lifecycleManager = registry
+ .getService( EditorLifecycleManager.class );
+ lifecycleManager
+ .addEditorLifecycleEventsListener( new EditorCycleListener(
+ editingDomain ) );
+ }
+
+ /**
+ * An internal listener for life cycle events of Papyrus
+ */
+ protected static class EditorCycleListener implements
+ EditorLifecycleEventListener
+ {
+
+ TransactionalEditingDomain domain;
+
+ EditorCycleListener( TransactionalEditingDomain domain )
+ {
+ this.domain = domain;
+ }
+
+ public void postInit( IMultiDiagramEditor editor )
+ {
+ }
+
+ public void postDisplay( IMultiDiagramEditor editor )
+ {
+ }
+
+ /**
+ * Executed before an editor will close => stop recording for this
+ * editing domain
+ */
+ public void beforeClose( IMultiDiagramEditor editor )
+ {
+ for (Resource res : domain.getResourceSet().getResources())
+ {
+ UML2ChangeTracker.getActiveInstance().closeResource( res );
+ }
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java
new file mode 100644
index 0000000..6386720
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.papyrus/src/org/eclipse/papyrusrt/codegen/papyrus/internal/UMLRTCppCodeGen.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.papyrus.internal;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrusrt.codegen.papyrus.UMLRTGenerator;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+public class UMLRTCppCodeGen extends AbstractHandler
+{
+ @SuppressWarnings( "rawtypes" )
+ @Override
+ public Object execute( ExecutionEvent event ) throws ExecutionException
+ {
+ ISelection sel = HandlerUtil.getCurrentSelection( event );
+ if( ! ( sel instanceof IStructuredSelection ) )
+ return null;
+
+ List<EObject> targets = new ArrayList<EObject>();
+
+ IStructuredSelection selection = (IStructuredSelection)sel;
+ Iterator i = selection.iterator();
+ while( i.hasNext() )
+ {
+ Object obj = i.next();
+ EObject eobj = EMFHelper.getEObject( obj );
+ if( eobj == null )
+ throw new IllegalArgumentException( obj.getClass().getCanonicalName() + " is not an EObject" );
+
+ targets.add( eobj );
+ }
+
+ final IStatus status = UMLRTGenerator.generate( targets, "Top" ); // "Top" should be replaced by some user-given property
+ Display.getDefault().syncExec( new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ ErrorDialog.openError( Display.getCurrent().getActiveShell(), "UML-RT Code Generator", null, status );
+ }
+ } );
+
+ return null;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/.classpath b/codegen/org.eclipse.papyrusrt.codegen.standalone/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/.project b/codegen/org.eclipse.papyrusrt.codegen.standalone/.project
new file mode 100644
index 0000000..1f3834c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.standalone</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.standalone/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.standalone/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a120ee9
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Eclipse-BundleShape: dir
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Standalone Generator
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.standalone
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.uml2.uml;bundle-version="5.0.1",
+ org.eclipse.uml2.uml.resources,
+ org.eclipse.papyrus.umlrt,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.ocl;bundle-version="3.4.2",
+ org.eclipse.equinox.registry,
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.codegen.cpp.statemachines.flat,
+ org.eclipse.papyrusrt.codegen.cpp.structure,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrus.cpp.profile,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.papyrusrt.codegen.xtumlrt.trans,
+ org.eclipse.papyrusrt.rts;bundle-version="0.5.0",
+ org.apache.commons.cli;bundle-version="1.2.0"
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/about.html b/codegen/org.eclipse.papyrusrt.codegen.standalone/about.html
new file mode 100644
index 0000000..6778939
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/about.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p><<em>insert current release date here, e.g., June 5, 2007</em>></p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+
+ <h3>Third Party Content</h3>
+ <p>The Content includes items that have been sourced from third parties as set out below. If you
+ did not receive this Content directly from the Eclipse Foundation, the following is provided
+ for informational purposes only, and you should look to the Redistributor's license for
+ terms and conditions of use.</p>
+ <p><em>
+ <strong>Apache Commons CLI 1.2</strong> <br/><br/>
+ <p>The plug-in includes Commons CLI 1.2 ("Commons CLI") developed by the Apache Software Foundation as part of the Apache Commons project. Therefore:</p>
+
+ <blockquote>
+ This product includes software developed by the Apache Software Foundation (<a href="http://www.apache.org/">http://www.apache.org/</a>).
+ </blockquote>
+
+ <p>The Commons CLI is obtained from <a href="http://commons.apache.org/cli/">http://commons.apache.org/cli/</a>.
+
+ <p>The Commons CLI binary code is included with no modifications except postprocessing
+ (pack200 conditioning and signing). The corresponding Commons CLI source code can be obtained from <a href="http://commons.apache.org/cli/">http://commons.apache.org/cli/</a></p>
+
+ <p>Commons CLI is:</p>
+
+ <blockquote>Copyright (c) 2001-2009 The Apache Software Foundation. All rights reserved.</blockquote>
+
+ <p>Your use of the Commons CLI code is subject to the terms and conditions of the Apache Software License 2.0. A copy of the license is contained
+ in the file <a href="about_files/Apache_Software_Licence-2.0.txt">Apache_Software_Licence-2.0.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>.
+
+ <p>Examples and documentation as well as updated source code for Commons CLI is available at <a href="http://commons.apache.org/cli/">http://commons.apache.org/cli/</a>.</p>
+
+ <br/><br/>
+
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/about.properties b/codegen/org.eclipse.papyrusrt.codegen.standalone/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/about_files/Apache_Software_Licence-2.0.txt b/codegen/org.eclipse.papyrusrt.codegen.standalone/about_files/Apache_Software_Licence-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/about_files/Apache_Software_Licence-2.0.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/build.properties b/codegen/org.eclipse.papyrusrt.codegen.standalone/build.properties
new file mode 100644
index 0000000..303b4b1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ umlrtgen.sh,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.standalone/pom.xml
new file mode 100644
index 0000000..695d32b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.standalone</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/PapyrusCppProfileMetadata.java b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/PapyrusCppProfileMetadata.java
new file mode 100644
index 0000000..bf2adef
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/PapyrusCppProfileMetadata.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.standalone;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.papyrus.C_Cpp.C_CppPackage;
+
+public class PapyrusCppProfileMetadata extends ProfileMetadata
+{
+ public static final PapyrusCppProfileMetadata INSTANCE = new PapyrusCppProfileMetadata();
+ private static final String CPP_PROFILE_ID = "org.eclipse.papyrus.cpp.profile";
+ private static final String CPP_NS_URI = C_CppPackage.eNS_URI; //"http://www.eclipse.org/papyrus/C_Cpp/1"
+ private static final C_CppPackage CPP_PKG = C_CppPackage.eINSTANCE;
+ private static final String CPP_PATHMAP = "pathmap://PapyrusC_Cpp_PROFILE/C_Cpp.profile.uml";
+ private static final String CPP_ROOT_ID = "_j9REUByGEduN1bTiWJ0lyw"; // TODO: Find out if this can be extracted programatically
+ private static final String CPP_ROOT_URI = CPP_PATHMAP + "#" + CPP_ROOT_ID;
+ private static final String CPP_PROFILE_SUBDIR = "profiles";
+ private static final String CPP_PROFILE_MODEL = "C_Cpp.profile.uml";
+ @Override
+ public String getProfileId()
+ {
+ return CPP_PROFILE_ID;
+ }
+ @Override
+ public String getNS_URI()
+ {
+ return CPP_NS_URI;
+ }
+ @Override
+ public EPackage getProfilePackage()
+ {
+ return CPP_PKG;
+ }
+ @Override
+ public String getPathmap()
+ {
+ return CPP_PATHMAP;
+ }
+ @Override
+ public String getRootId()
+ {
+ return CPP_ROOT_ID;
+ }
+ @Override
+ public String getRootURI()
+ {
+ return CPP_ROOT_URI;
+ }
+ @Override
+ public String getProfileSubdirectory()
+ {
+ return CPP_PROFILE_SUBDIR;
+ }
+ @Override
+ public String getProfileModel()
+ {
+ return CPP_PROFILE_MODEL;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/ProfileMetadata.java b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/ProfileMetadata.java
new file mode 100644
index 0000000..93e0441
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/ProfileMetadata.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.standalone;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.ocl.internal.helper.PluginFinder;
+import org.eclipse.uml2.uml.UMLPlugin;
+
+@SuppressWarnings( "restriction" )
+public abstract class ProfileMetadata
+{
+ public abstract String getProfileId();
+ public abstract String getNS_URI();
+ public abstract EPackage getProfilePackage();
+ public abstract String getPathmap();
+ public abstract String getRootId();
+ public abstract String getRootURI();
+ public abstract String getProfileSubdirectory();
+ public abstract String getProfileModel();
+
+ public void register( ResourceSet resourceSet )
+ {
+ // Register profile package in the resourceSet package registry
+ resourceSet.getPackageRegistry().put( getNS_URI(), getProfilePackage() );
+ // Register the profile's NS_URI to its pathmap location
+ UMLPlugin.getEPackageNsURIToProfileLocationMap().put( getNS_URI(), URI.createURI( getRootURI() ) );
+ // Register the actual profile location with the URIConverter
+ resourceSet.getURIConverter()
+ .getURIMap()
+ .put( URI.createURI( getPathmap() ),
+ URI.createURI( getProfileLocation() ) );
+ }
+
+ /**
+ * Find the plugin that contains the profile
+ */
+ public String getProfileLocation()
+ {
+ PluginFinder pluginFinder = new PluginFinder( getProfileId() );
+ pluginFinder.resolve();
+ return pluginFinder.get( getProfileId() ) + getProfileSubdirectory() + "/" + getProfileModel();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/StandaloneUMLRTCodeGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/StandaloneUMLRTCodeGenerator.java
new file mode 100644
index 0000000..2590190
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/StandaloneUMLRTCodeGenerator.java
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.standalone;
+
+import java.io.FileNotFoundException;
+import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+
+import org.apache.commons.cli.BasicParser;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.GeneratorManager;
+import org.eclipse.papyrusrt.codegen.standalone.internal.StandaloneGeneratorManager;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.resources.util.UMLResourcesUtil;
+
+public class StandaloneUMLRTCodeGenerator
+{
+ // System properties
+ public static final String OUTPUT_PATH_PROPERTY = "com.zeligsoft.umlrt.output-path";
+ public static final String TOP_CAPSULE_PROPERTY = "com.zeligsoft.umlrt.top-capsule";
+
+ // Default values
+ public static final String DEFAULT_LOG_LEVEL = "OFF";
+ public static final String DEFAULT_TOP = "Top";
+
+ // Command-line options
+ private static CommandLine clargs;
+ private static final Options options = new Options();
+ private static final HelpFormatter helpFormatter = new HelpFormatter();
+ private static final String CMDLINE_SYNTAX = "umlrtgen [-h] <path>";
+ private static final String OPT_HELP = "h";
+ private static final String OPT_QUIET = "q";
+ private static final String OPT_LOG_LEVEL = "l";
+ private static final String OPT_OUTPUT_PATH = "o";
+ private static final String OPT_TOP = "t";
+ private static final String OPT_TO_XTUMLRT = "x";
+ private static final String OPT_PRINT_STACK_TRACE = "s";
+
+ private static ResourceSet resourceSet;
+
+ // User-specified variables/options
+ private static Path modelPath = null;
+ private static Path outputPath = null;
+ private static String top = null;
+ private static boolean printStackTrace = false;
+
+ public static void main(String[] args)
+ {
+ try
+ {
+ parseCmdLineArgs( args );
+ if (!processCmdLineArgs()) System.exit( 1 );
+ init();
+ URI fullURI = URI.createFileURI( modelPath.toString() );
+ Model model = loadModel( fullURI );
+ IStatus result = generate( model );
+ if (!clargs.hasOption(OPT_QUIET))
+ {
+ displayStatus(result);
+ }
+ System.exit( result.getSeverity() < IStatus.ERROR ? 0 : 1 );
+ }
+ catch (ParseException e)
+ {
+ System.out.println("Invalid command-line arguments.");
+ helpFormatter.printHelp(CMDLINE_SYNTAX, options);
+ }
+ catch (InvalidPathException e)
+ {
+ System.out.println("Invalid path");
+ }
+ catch (FileNotFoundException e)
+ {
+ System.out.println(e);
+ }
+ catch (IllegalArgumentException e)
+ {
+ System.out.println(e);
+ e.printStackTrace();
+ }
+
+ System.exit( 1 );
+ }
+
+ public static Path getOutputPath()
+ {
+ return outputPath;
+ }
+
+ public static String getTop()
+ {
+ return top;
+ }
+
+ private static void parseCmdLineArgs(String[] args) throws ParseException
+ {
+ options.addOption(OPT_HELP, "help", false, "Prints this message.");
+ options.addOption(OPT_QUIET, "quiet", false, "Inhibits printing messages during generation.");
+ options.addOption(OPT_LOG_LEVEL, "loglevel", true, "Set the level of logging (OFF, SEVERE, INFO, WARNING, CONFIG, FINE, FINER, FINEST). The default is OFF");
+ options.addOption(OPT_PRINT_STACK_TRACE, "prtrace", false, "Print the stack trace for exceptions");
+ options.addOption(OPT_OUTPUT_PATH, "outdir", true, "Specifies the output folder. By default it is 'gen' in the same folder as the input model.");
+ options.addOption(OPT_TOP, "top", true, "Specify the name of the top capsule. By default it is \"Top\"");
+ options.addOption(OPT_TO_XTUMLRT, "toxr", false, "Translate an input UML2 model into an xtUMLrt model instead of generating code.");
+ CommandLineParser parser = new BasicParser();
+ clargs = parser.parse(options, args);
+ if ( clargs.getArgList().isEmpty() && !clargs.hasOption( OPT_HELP ) )
+ {
+ throw new ParseException("There must be at least one argument.");
+ }
+ }
+
+ private static boolean processCmdLineArgs()
+ throws InvalidPathException, FileNotFoundException
+ {
+ if (clargs.hasOption(OPT_HELP))
+ {
+ helpFormatter.printHelp(CMDLINE_SYNTAX, options);
+ return false;
+ }
+ outputPath =
+ validateOutputPath
+ (
+ clargs.getOptionValue
+ (
+ OPT_OUTPUT_PATH,
+ System.getProperty( OUTPUT_PATH_PROPERTY )
+ )
+ );
+ modelPath = validateModelPath( clargs.getArgs()[0] );
+ top =
+ clargs.getOptionValue
+ (
+ OPT_TOP,
+ System.getProperty( TOP_CAPSULE_PROPERTY, DEFAULT_TOP )
+ );
+ printStackTrace = clargs.hasOption( OPT_PRINT_STACK_TRACE );
+ configureLogging();
+ return true;
+ }
+
+ private static Path validateOutputPath( String outputPath )
+ throws InvalidPathException
+ {
+ if (outputPath != null)
+ {
+ return Paths.get( outputPath );
+ }
+ return null;
+ }
+
+ private static Path validateModelPath( String modelPathString )
+ throws InvalidPathException, FileNotFoundException
+ {
+ Path modelPath = Paths.get( modelPathString );
+ if (!Files.exists( modelPath ))
+ throw new FileNotFoundException( "Model file '" + modelPathString + "' not found" );
+ return modelPath;
+ }
+
+ private static void configureLogging()
+ {
+ // TODO: add a FileHandler if an appropriate option is provided. Also a Formatter.
+ Level level = Level.parse( clargs.getOptionValue( OPT_LOG_LEVEL, DEFAULT_LOG_LEVEL ).toUpperCase() );
+ Handler consoleHandler = new ConsoleHandler();
+ consoleHandler.setLevel( level );
+ CodeGenPlugin.getLogger().addHandler( consoleHandler );
+ CodeGenPlugin.getLogger().setLevel( level );
+ }
+
+ private static void init()
+ {
+ // Create the resource set
+ resourceSet = new ResourceSetImpl();
+ // Initialize global registry
+ UMLResourcesUtil.init( resourceSet );
+ // Register UMLRT profile
+ UMLRTProfileMetadata.INSTANCE.register( resourceSet );
+ // Register Papyrus C++ profile
+ PapyrusCppProfileMetadata.INSTANCE.register( resourceSet );
+ }
+
+ private static Model loadModel(URI fullURI)
+ {
+ Resource resource = resourceSet.getResource( fullURI, true );
+ EList<EObject> contents = resource.getContents();
+ return (Model) EcoreUtil.getObjectByType( contents, UMLPackage.Literals.PACKAGE );
+ }
+
+ private static IStatus generate(Model model)
+ {
+ IStatus status = null;
+ CodeGenPlugin codegenPlugin = new CodeGenPlugin();
+ CodeGenPlugin.setStandalone( printStackTrace );
+ if (clargs.hasOption( OPT_TO_XTUMLRT ))
+ {
+ status = UMLRTGenerator.generateXTUMLRT( model );
+ }
+ else
+ {
+ List<EObject> targets = new ArrayList<EObject>();
+ targets.add( model );
+ GeneratorManager.setInstance( new StandaloneGeneratorManager() );
+ status = UMLRTGenerator.generate( targets, top );
+ }
+ return status;
+ }
+
+ private static void displayStatus(IStatus status)
+ {
+ String result = "";
+ switch (status.getSeverity())
+ {
+ case IStatus.CANCEL: result = "Generation cancelled"; break;
+ case IStatus.ERROR: result = "Generation failed with an error"; break;
+ case IStatus.OK:
+ case IStatus.INFO: result = "Generation successful"; break;
+ case IStatus.WARNING: result = "Generation successful but with warnings"; break;
+ }
+ System.out.println(result);
+
+ if (!clargs.hasOption( OPT_QUIET ))
+ displayAll( System.out, "", status );
+ }
+
+ private static void displayAll( PrintStream out, String indent, IStatus status )
+ {
+ out.print( indent );
+ out.println( status.getMessage() );
+ for( IStatus child : status.getChildren() )
+ displayAll( out, indent + " ", child );
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/UMLRTGenerator.java b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/UMLRTGenerator.java
new file mode 100644
index 0000000..4730bf8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/UMLRTGenerator.java
@@ -0,0 +1,211 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.standalone;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.CppProjectGenerator;
+import org.eclipse.papyrusrt.codegen.xtumlrt.trans.UML2xtumlrtModelTranslator;
+
+public class UMLRTGenerator {
+
+ private static Path commonOutputPath;
+ private static UML2xtumlrtModelTranslator translator = new UML2xtumlrtModelTranslator();
+ private static CppCodePattern cpp = new CppCodePattern();
+ private static CppCodeGenerator codegen = new CppCodeGenerator( cpp, translator );
+
+ public static IStatus generate(List<EObject> elements, String top)
+ {
+ codegen.setTop( top );
+ // The set of inputs is grouped by project and each project is generated independently.
+ Map<Path, List<EObject>> targets = new HashMap<Path, List<EObject>>();
+
+ for( EObject eobj : elements )
+ {
+ Path folder = getOutputFolder( eobj );
+ if( folder != null )
+ {
+ List<EObject> list = targets.get( folder );
+ if( list == null )
+ {
+ list = new ArrayList<EObject>();
+ targets.put( folder, list );
+ }
+ list.add( eobj );
+ }
+ }
+
+ MultiStatus status = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, "UML-RT code generator invoked", null );
+
+ long start = System.currentTimeMillis();
+ if( targets.isEmpty() )
+ status.add( CodeGenPlugin.error( "Selection must contain at least one model element" ) );
+ else
+ {
+ try
+ {
+ for( Map.Entry<Path, List<EObject>> entry : targets.entrySet() )
+ {
+ java.nio.file.Path path = entry.getKey();
+
+ translator.setTargets( entry.getValue() );
+ translator.setOutputPath( path );
+
+ status.addAll( translator.generate() );
+
+ List<EObject> translated = translator.getAllGenerated();
+ if (translated == null || translated.isEmpty()) continue;
+
+ cpp.setOutputFolder( entry.getKey().toFile() );
+ codegen.setTargets( translated );
+
+ status.addAll( codegen.generate() );
+
+ long writeStart = System.currentTimeMillis();
+ if( cpp.write() )
+ status.add( CodeGenPlugin.info( "Updated generated files " + ( System.currentTimeMillis() - writeStart ) + "ms" ) );
+ else
+ status.add( CodeGenPlugin.error( "Failed to write generated model to disk" ) );
+ }
+ }
+ catch( Throwable t )
+ {
+ CodeGenPlugin.error( "error during codegen action", t );
+ status.add( CodeGenPlugin.error( t ) );
+ }
+ }
+
+ String message
+ = "Generation "
+ + ( status.getSeverity() <= IStatus.INFO ? "complete" : "error" )
+ + ", elapsed time "
+ + ( System.currentTimeMillis() - start ) + " ms";
+
+ CodeGenPlugin.info( message );
+ MultiStatus result = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, message, null );
+ result.addAll( status );
+ return result;
+ }
+
+ public static IStatus generateXTUMLRT( org.eclipse.uml2.uml.Model model )
+ {
+ Path folder = getOutputFolder( model );
+ MultiStatus status = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, "UML2-to-xtUMLrt Translator Invoked", null );
+
+ long start = System.currentTimeMillis();
+ if( model == null )
+ status.add( CodeGenPlugin.error( "No input model given" ) );
+ else
+ {
+ try
+ {
+ List<EObject> targets = new ArrayList<EObject>();
+ targets.add( model );
+ UML2xtumlrtModelTranslator translator = new UML2xtumlrtModelTranslator( targets, folder );
+ status.addAll( translator.generate() );
+
+ long writeStart = System.currentTimeMillis();
+ if( translator.write() )
+ status.add( CodeGenPlugin.info( "Updated generated files " + ( System.currentTimeMillis() - writeStart ) + "ms" ) );
+ else
+ status.add( CodeGenPlugin.error( "Failed to write generated model to disk" ) );
+ }
+ catch( Throwable t )
+ {
+ CodeGenPlugin.error( "error during translation action", t );
+ status.add( CodeGenPlugin.error( t ) );
+ }
+ }
+
+ String message
+ = "Translation "
+ + ( status.getSeverity() <= IStatus.INFO ? "complete" : "error" )
+ + ", elapsed time "
+ + ( System.currentTimeMillis() - start ) + " ms";
+
+ CodeGenPlugin.info( message );
+ MultiStatus result = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, message, null );
+ result.addAll( status );
+ return result;
+ }
+
+ private static Path getOutputFolder( EObject eobj )
+ {
+ if (commonOutputPath != null)
+ {
+ return commonOutputPath;
+ }
+ Path outputPath = StandaloneUMLRTCodeGenerator.getOutputPath();
+ if (outputPath != null)
+ {
+ // If the project path was set either via the
+ // "com.zeligsoft.umlrt.output-path" system
+ // property, or through the "-o" command-line option, then use this
+ // path to create CDT project.
+ File project = outputPath.toFile();
+ if (!project.exists() && !project.mkdirs())
+ {
+ CodeGenPlugin.error( "Failed to create project" );
+ return null;
+ }
+ String projectName = project.getName();
+ String projectPath = project.getParentFile().getPath();
+ if (!new CppProjectGenerator().generate( projectPath, projectName ))
+ {
+ CodeGenPlugin.error( "Failed to create project" );
+ return null;
+ }
+ File src = new File( project, "src" );
+ if (!src.exists() && !src.mkdir())
+ {
+ CodeGenPlugin.error( "Failed to create source folder" );
+ return null;
+ }
+
+ commonOutputPath = src.toPath();
+ return commonOutputPath;
+ }
+ // If outputPath is null, then we fallback to the default
+ URI uri = eobj.eResource().getURI();
+
+ // Default project name is same as name of the UML file
+ String[] segments = uri.segments();
+ String projectName = segments[segments.length - 1];
+ projectName = projectName.replace( ".uml", "" ) + "_CDTProject";
+
+ Path elementPath = Paths.get( uri.path() );
+ Path projectPath = elementPath.getParent().resolveSibling( projectName );
+ if (!new CppProjectGenerator().generate( projectPath.getParent().toString(), projectName ))
+ {
+ CodeGenPlugin.error( "Failed to create project" );
+ return null;
+ }
+ File project = projectPath.toFile();
+ File src = new File( project, "src" );
+ if (!src.exists() && !src.mkdir())
+ {
+ CodeGenPlugin.error( "Failed to create source folder" );
+ return null;
+ }
+ return src.toPath();
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/UMLRTProfileMetadata.java b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/UMLRTProfileMetadata.java
new file mode 100644
index 0000000..a2deeb2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/UMLRTProfileMetadata.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.standalone;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.papyrus.umlrt.UMLRealTime.UMLRealTimePackage;
+
+public class UMLRTProfileMetadata extends ProfileMetadata
+{
+ public static final UMLRTProfileMetadata INSTANCE = new UMLRTProfileMetadata();
+ private static final String UMLRT_PROFILE_ID = "org.eclipse.papyrus.umlrt";
+ private static final String UMLRT_NS_URI = UMLRealTimePackage.eNS_URI; //"http://www.eclipse.org/papyrus/umlrt"
+ private static final UMLRealTimePackage UMLRT_PKG = UMLRealTimePackage.eINSTANCE;
+ private static final String UMLRT_PATHMAP = "pathmap://UML_RT_PROFILE/uml-rt.profile.uml";
+ private static final String UMLRT_ROOT_ID = "_1h74oEeVEeO0lv5O1DTHOQ"; // TODO: Find out if this can be extracted programatically
+ private static final String UMLRT_ROOT_URI = UMLRT_PATHMAP + "#" + UMLRT_ROOT_ID;
+ private static final String UMLRT_PROFILE_SUBDIR = "umlProfile";
+ private static final String UMLRT_PROFILE_MODEL = "uml-rt.profile.uml";
+ @Override
+ public String getProfileId()
+ {
+ return UMLRT_PROFILE_ID;
+ }
+ @Override
+ public String getNS_URI()
+ {
+ return UMLRT_NS_URI;
+ }
+ @Override
+ public EPackage getProfilePackage()
+ {
+ return UMLRT_PKG;
+ }
+ @Override
+ public String getPathmap()
+ {
+ return UMLRT_PATHMAP;
+ }
+ @Override
+ public String getRootId()
+ {
+ return UMLRT_ROOT_ID;
+ }
+ @Override
+ public String getRootURI()
+ {
+ return UMLRT_ROOT_URI;
+ }
+ @Override
+ public String getProfileSubdirectory()
+ {
+ return UMLRT_PROFILE_SUBDIR;
+ }
+ @Override
+ public String getProfileModel()
+ {
+ return UMLRT_PROFILE_MODEL;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/internal/StandaloneGeneratorManager.java b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/internal/StandaloneGeneratorManager.java
new file mode 100644
index 0000000..b76bd83
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/src/org/eclipse/papyrusrt/codegen/standalone/internal/StandaloneGeneratorManager.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.standalone.internal;
+
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine;
+
+import org.eclipse.papyrusrt.codegen.cpp.AbstractCppGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodeGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.CppCodePattern;
+import org.eclipse.papyrusrt.codegen.cpp.GeneratorManager;
+import org.eclipse.papyrusrt.codegen.cpp.structure.CompositionGenerator;
+import org.eclipse.papyrusrt.codegen.cpp.statemachines.flat.generator.StateMachineGenerator;
+
+public class StandaloneGeneratorManager extends GeneratorManager
+{
+
+ public AbstractCppGenerator getGenerator(
+ CppCodeGenerator.Kind kind,
+ CppCodePattern cpp,
+ NamedElement element )
+ {
+ switch( kind )
+ {
+ case Structural:
+ return new CompositionGenerator
+ .Factory()
+ .create( cpp, (Capsule) element );
+ case StateMachine:
+ return new StateMachineGenerator
+ .Factory()
+ .create( cpp, (StateMachine) element );
+ default:
+ return super.getGenerator( kind, cpp, element );
+ }
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.standalone/umlrtgen.sh b/codegen/org.eclipse.papyrusrt.codegen.standalone/umlrtgen.sh
new file mode 100755
index 0000000..ae5604e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.standalone/umlrtgen.sh
@@ -0,0 +1,115 @@
+#!/bin/sh
+
+# PLUGIN_DIR is the root directory of plugin dependencies, i.e. the 'plugins' directory of the target
+# eclipse platform, or just a directory that contains all required Eclipse jar files
+PLUGIN_DIR=$1
+
+# SRC_DIR is the root of the development directory containing the binaries of the development
+# version of the code generator.
+SRC_DIR=$2
+
+JAVA_VM=$3
+
+if [ -z "$PLUGIN_DIR" -o -z "$SRC_DIR" ]; then
+ echo "Usage $0 <plugin-dir> <src-dir> [<java-vm>]"
+ exit 1
+fi
+
+shift
+shift
+
+if [ -z "$JAVA_VM" ]; then
+ JAVA_VM=java
+else
+ shift
+fi
+
+# Initialize the class path with at least the standalone generator.
+cp=`dirname $0`:`dirname $0`/lib/commons-cli-1.2.jar
+
+# Add the given class location (folder of .class files or .jar file) to the
+# classpath that will be used.
+update_classpath() {
+ to_add=$1
+ if [ -z "$to_add" ]; then
+ echo Nothing to add
+ exit 1
+ fi
+
+ if [ -z "$cp" ]; then
+ cp=$to_add
+ else
+ cp=$cp:$to_add
+ fi
+}
+
+# Use the list of base paths to find the full path to the given jar file.
+find_jar_for() {
+
+ # Search the development workspace first. Look for a folder with the exact
+ # name. If found put the contained bin folder into the classpath.
+ project=`find $SRC_DIR -name .git -prune -o -type d -name ${1} -print`
+ if [ -n "$project" -a -d $project/bin ]; then
+ update_classpath $project/bin
+ return
+ fi
+
+ # Otherwise look for a jar file in the reference plugins folder. Allow for the
+ # _<version>.jar, e.g., org.eclipse.uml2.uml_5.0.1.v20140910-1354.jar.
+ jar=`find $SRC_DIR $PLUGIN_DIR -name ${1}_\*.jar`
+ if [ -n "$jar" ]; then
+ update_classpath $jar
+ fi
+}
+
+# The XtUMLRT dependencies
+find_jar_for org.eclipse.papyrusrt.xtumlrt.common.model
+find_jar_for org.eclipse.papyrusrt.xtumlrt.platform.cpp.model
+find_jar_for org.eclipse.papyrusrt.xtumlrt.platform.model
+find_jar_for org.eclipse.papyrusrt.xtumlrt.umlrt.model
+find_jar_for org.eclipse.papyrusrt.xtumlrt.xtuml.model
+
+# The UML-RT plugins
+find_jar_for org.eclipse.papyrusrt.codegen
+find_jar_for org.eclipse.papyrusrt.codegen.cpp
+find_jar_for org.eclipse.papyrusrt.codegen.cpp.rts
+find_jar_for org.eclipse.papyrusrt.codegen.cpp.statemachines.flat
+find_jar_for org.eclipse.papyrusrt.codegen.cpp.structure
+find_jar_for org.eclipse.papyrusrt.codegen.lang
+find_jar_for org.eclipse.papyrusrt.codegen.lang.cpp
+find_jar_for org.eclipse.papyrusrt.codegen.statemachines.flat
+find_jar_for org.eclipse.papyrusrt.codegen.statemachines.flat.model
+find_jar_for org.eclipse.papyrusrt.codegen.xtumlrt.trans
+find_jar_for com.zeligsoft.umlrt.papyrus
+find_jar_for com.zeligsoft.umlrt.releng
+find_jar_for com.zeligsoft.umlrt.standalone
+find_jar_for com.zeligsoft.umlrt.rts
+find_jar_for org.eclipse.papyrusrt.codegen.utils
+
+
+# The dependencies
+find_jar_for org.eclipse.uml2.uml
+find_jar_for org.eclipse.uml2.uml.resources
+find_jar_for org.eclipse.papyrus.umlrt
+find_jar_for org.eclipse.emf.ecore
+find_jar_for org.eclipse.emf.common
+find_jar_for org.eclipse.ocl
+find_jar_for org.eclipse.equinox.registry
+find_jar_for org.eclipse.uml2.types
+find_jar_for org.eclipse.emf.ecore.xmi
+find_jar_for org.eclipse.core.runtime
+find_jar_for org.eclipse.osgi
+find_jar_for org.eclipse.papyrus.cpp.profile
+find_jar_for org.eclipse.equinox.common
+find_jar_for org.eclipse.uml2.common
+find_jar_for org.eclipse.uml2.uml.profile.standard
+find_jar_for org.eclipse.emf.mapping.ecore2xml
+find_jar_for org.eclipse.xtext.xbase.lib
+find_jar_for com.google.guava
+find_jar_for org.apache.commons.cli
+
+# LIBS contains other third-party libraries.
+update_classpath $SRC_DIR/umlrt.code-generator/com.zeligsoft.umlrt.standalone/lib/commons-cli-1.2.jar
+
+#echo $JAVA_VM -cp $cp org.eclipse.papyrusrt.codegen.standalone.StandaloneUMLRTCodeGenerator $@
+$JAVA_VM -cp $cp org.eclipse.papyrusrt.codegen.standalone.StandaloneUMLRTCodeGenerator $@
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.classpath b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.project b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.project
new file mode 100644
index 0000000..c4fa0aa
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.statemachines.flat.model</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.sirius.nature.modelingproject</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..efeb4ea
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Flat State Machine Model
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.statemachines.flat.model;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel,
+ org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl,
+ org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.papyrusrt.xtumlrt.common.model;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/about.html b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/about.properties b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/build.properties b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/build.properties
new file mode 100644
index 0000000..f174beb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/build.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+# 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
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/.gitignore b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/.gitignore
new file mode 100644
index 0000000..1abae46
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/.gitignore
@@ -0,0 +1,3 @@
+/smflatmodel-20150306_1116.aird.old
+/smflatmodel-20150306_1118.aird.old
+/smflatmodel-20150306_1140.aird.old
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.aird b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.aird
new file mode 100644
index 0000000..2ccf04a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.aird
@@ -0,0 +1,580 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_bUhCML7OEeS9UtFUBaZTJg" selectedViews="_bwOt0L7OEeS9UtFUBaZTJg" version="10.0.10.201502231700">
+ <models xmi:type="ecore:EPackage" href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="smflatmodel.ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="platform:/resource/com.zeligsoft.xtumlrt.common.model/model/common.ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#/"/>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_bwOt0L7OEeS9UtFUBaZTJg" initialized="true">
+ <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_b_QBQL7OEeS9UtFUBaZTJg" name="smflatmodel class diagram">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_cAL1YL7OEeS9UtFUBaZTJg" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="_cAMccL7OEeS9UtFUBaZTJg" type="Sirius" element="_b_QBQL7OEeS9UtFUBaZTJg" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_ohOUEL7OEeS9UtFUBaZTJg" type="2003" element="_ogqTYL7OEeS9UtFUBaZTJg">
+ <children xmi:type="notation:Node" xmi:id="_ohPiML7OEeS9UtFUBaZTJg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_ohQJQL7OEeS9UtFUBaZTJg" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ohQJQb7OEeS9UtFUBaZTJg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ohQJQr7OEeS9UtFUBaZTJg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_ohOUEb7OEeS9UtFUBaZTJg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ohOUEr7OEeS9UtFUBaZTJg" x="315" y="342" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_rZRfQL7OEeS9UtFUBaZTJg" type="2003" element="_rZF5EL7OEeS9UtFUBaZTJg">
+ <children xmi:type="notation:Node" xmi:id="_rZSGUL7OEeS9UtFUBaZTJg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_rZStYL7OEeS9UtFUBaZTJg" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_rZStYb7OEeS9UtFUBaZTJg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_rZStYr7OEeS9UtFUBaZTJg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_rZRfQb7OEeS9UtFUBaZTJg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rZRfQr7OEeS9UtFUBaZTJg" x="522" y="342" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_hvciMPA6EeSG3oiRNiMzRA" type="2003" element="_hvIZIPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_hvwEMPA6EeSG3oiRNiMzRA" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_hvxSUPA6EeSG3oiRNiMzRA" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_hvzukPA6EeSG3oiRNiMzRA" type="3010" element="_hvRjEPA6EeSG3oiRNiMzRA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_hvzukfA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_hvzukvA6EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hvxSUfA6EeSG3oiRNiMzRA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hvxSUvA6EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_hvciMfA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hvciMvA6EeSG3oiRNiMzRA" x="729" y="117"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_lLB4QPA6EeSG3oiRNiMzRA" type="2003" element="_lKz10PA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_lLCfUPA6EeSG3oiRNiMzRA" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_lLCfUfA6EeSG3oiRNiMzRA" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_lLCfUvA6EeSG3oiRNiMzRA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_lLCfU_A6EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_lLB4QfA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lLB4QvA6EeSG3oiRNiMzRA" x="729" y="342" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ou95EPA6EeSG3oiRNiMzRA" type="2003" element="_ouuBcPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_ou-gIPA6EeSG3oiRNiMzRA" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_ou-gIfA6EeSG3oiRNiMzRA" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ou-gIvA6EeSG3oiRNiMzRA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ou-gI_A6EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_ou95EfA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ou95EvA6EeSG3oiRNiMzRA" x="936" y="342" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_qgkZkPA6EeSG3oiRNiMzRA" type="2003" element="_qgVwEPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_qglAoPA6EeSG3oiRNiMzRA" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_qglnsPA6EeSG3oiRNiMzRA" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qglnsfA6EeSG3oiRNiMzRA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qglnsvA6EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_qgkZkfA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qgkZkvA6EeSG3oiRNiMzRA" x="1143" y="342" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gqQMPA6EeSG3oiRNiMzRA" type="2003" element="_4gU5APA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_4gq3QPA6EeSG3oiRNiMzRA" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_4gq3QfA6EeSG3oiRNiMzRA" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_4gq3QvA6EeSG3oiRNiMzRA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_4gq3Q_A6EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_4gqQMfA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gqQMvA6EeSG3oiRNiMzRA" x="108" y="20"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Bb9-UPA7EeSG3oiRNiMzRA" type="2003" element="_BbkVsPA7EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_Bb-lYPA7EeSG3oiRNiMzRA" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Bb_McPA7EeSG3oiRNiMzRA" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Bb_McfA7EeSG3oiRNiMzRA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Bb_McvA7EeSG3oiRNiMzRA"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Bb9-UfA7EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Bb9-UvA7EeSG3oiRNiMzRA" x="108" y="189"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_cAMccb7OEeS9UtFUBaZTJg"/>
+ <edges xmi:type="notation:Edge" xmi:id="_hv4AAPA6EeSG3oiRNiMzRA" type="4001" element="_hvUmYPA6EeSG3oiRNiMzRA" source="_ohOUEL7OEeS9UtFUBaZTJg" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_hv51MPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hv51MfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_hv7DUPA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hv7DUfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_hv8RcPA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hv8RcfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_hv4AAfA6EeSG3oiRNiMzRA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_hv4AAvA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hv4AA_A6EeSG3oiRNiMzRA" points="[0, -49, -405, 185]$[0, -121, -405, 113]$[406, -121, 1, 113]$[406, -185, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hwMwIPA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hwMwIfA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_hwNXMPA6EeSG3oiRNiMzRA" type="4001" element="_hvV0gPA6EeSG3oiRNiMzRA" source="_rZRfQL7OEeS9UtFUBaZTJg" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_hwOlUPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hwOlUfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_hwPMYPA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hwPMYfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_hwPMYvA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hwPMY_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_hwNXMfA6EeSG3oiRNiMzRA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_hwNXMvA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_hwNXM_A6EeSG3oiRNiMzRA" points="[549, 351, 549, 351]$[720, 117, 720, 117]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hwPzcPA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hwQagPA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_yYzhIPA6EeSG3oiRNiMzRA" type="4001" element="_yYnT4PA6EeSG3oiRNiMzRA" source="_lLB4QPA6EeSG3oiRNiMzRA" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_yY0IMPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yY0IMfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_yY0IMvA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yY0IM_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_yY0INPA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yY0INfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_yYzhIfA6EeSG3oiRNiMzRA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_yYzhIvA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_yYzhI_A6EeSG3oiRNiMzRA" points="[0, 0, 9, 127]$[-9, -127, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yY0vQPA6EeSG3oiRNiMzRA" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yY0vQfA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_y6i8QPA6EeSG3oiRNiMzRA" type="4001" element="_y6WH8PA6EeSG3oiRNiMzRA" source="_ou95EPA6EeSG3oiRNiMzRA" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_y6jjUPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y6jjUfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_y6jjUvA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y6jjU_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_y6kKYPA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y6kKYfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_y6i8QfA6EeSG3oiRNiMzRA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_y6i8QvA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_y6i8Q_A6EeSG3oiRNiMzRA" points="[0, 0, 230, 127]$[-230, -127, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_y6kKYvA6EeSG3oiRNiMzRA" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_y6kKY_A6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_zZEEQPA6EeSG3oiRNiMzRA" type="4001" element="_zYxwYPA6EeSG3oiRNiMzRA" source="_qgkZkPA6EeSG3oiRNiMzRA" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_zZErUPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zZErUfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_zZErUvA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zZFSYPA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_zZFSYfA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zZFSYvA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_zZEEQfA6EeSG3oiRNiMzRA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_zZEEQvA6EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zZEEQ_A6EeSG3oiRNiMzRA" points="[0, -36, 355, 176]$[0, -105, 355, 107]$[-354, -105, 1, 107]$[-354, -163, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zZF5cPA6EeSG3oiRNiMzRA" id="(0.5416666666666666,0.07)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zZF5cfA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_4greUPA6EeSG3oiRNiMzRA" type="4001" element="_4ggfMPA6EeSG3oiRNiMzRA" source="_ohOUEL7OEeS9UtFUBaZTJg" target="_4gqQMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_4gsFYPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gsFYfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gsFYvA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gsFY_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gsscPA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gsscfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4greUfA6EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4greUvA6EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4greU_A6EeSG3oiRNiMzRA" points="[-43, -49, 164, 273]$[-43, -238, 164, 84]$[-176, -238, 31, 84]$[-176, -273, 31, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gsscvA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gssc_A6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_4gssdPA6EeSG3oiRNiMzRA" type="4001" element="_4gi7cPA6EeSG3oiRNiMzRA" source="_rZRfQL7OEeS9UtFUBaZTJg" target="_4gqQMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_4gtTgPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gtTgfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gtTgvA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gtTg_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gt6kPA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gt6kfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4gssdfA6EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4gssdvA6EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4gssd_A6EeSG3oiRNiMzRA" points="[-59, -21, 355, 301]$[-77, -21, 337, 301]$[-77, -299, 337, 23]$[-355, -299, 59, 23]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gt6kvA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gt6k_A6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_4gt6lPA6EeSG3oiRNiMzRA" type="4001" element="_4gjig_A6EeSG3oiRNiMzRA" source="_4gqQMPA6EeSG3oiRNiMzRA" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_4guhoPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4guhofA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4guhovA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4guho_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gvIsPA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gvIsfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4gt6lfA6EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4gt6lvA6EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4gt6l_A6EeSG3oiRNiMzRA" points="[59, -1, -562, -98]$[405, -1, -216, -98]$[405, 93, -216, -4]$[562, 93, -59, -4]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gxk8PA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gxk8fA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_4gxk8vA6EeSG3oiRNiMzRA" type="4001" element="_4gkwoPA6EeSG3oiRNiMzRA" source="_4gqQMPA6EeSG3oiRNiMzRA" target="_hvciMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_4gyMAPA6EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gyMAfA6EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gyzEPA6EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gyzEfA6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4gyzEvA6EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4gyzE_A6EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4gxk8_A6EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4gxk9PA6EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4gxk9fA6EeSG3oiRNiMzRA" points="[59, -22, -562, -119]$[427, -22, -194, -119]$[427, 66, -194, -31]$[562, 66, -59, -31]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gzaIPA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4gzaIfA6EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Bb_zgPA7EeSG3oiRNiMzRA" type="4001" element="_Bb1bcPA7EeSG3oiRNiMzRA" source="_ohOUEL7OEeS9UtFUBaZTJg" target="_Bb9-UPA7EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_BcAakPA7EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcAakfA7EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcAakvA7EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcAak_A7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcBBoPA7EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcBBofA7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Bb_zgfA7EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Bb_zgvA7EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Bb_zg_A7EeSG3oiRNiMzRA" points="[-59, -19, 148, 134]$[-208, -19, -1, 134]$[-208, -104, -1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcBBovA7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcBBo_A7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_BcBBpPA7EeSG3oiRNiMzRA" type="4001" element="_Bb2pkPA7EeSG3oiRNiMzRA" source="_rZRfQL7OEeS9UtFUBaZTJg" target="_Bb9-UPA7EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_BcBosPA7EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcBosfA7EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcCPwPA7EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcCPwfA7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcCPwvA7EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcCPw_A7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_BcBBpfA7EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_BcBBpvA7EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BcBBp_A7EeSG3oiRNiMzRA" points="[-59, -10, 355, 143]$[-104, -10, 310, 143]$[-104, -144, 310, 9]$[-355, -144, 59, 9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcCPxPA7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcCPxfA7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_BcC20PA7EeSG3oiRNiMzRA" type="4001" element="_Bb3Qo_A7EeSG3oiRNiMzRA" source="_Bb9-UPA7EeSG3oiRNiMzRA" target="_4gqQMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_BcC21PA7EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcC21fA7EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcDd4PA7EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcDd4fA7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcDd4vA7EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcDd4_A7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_BcC20fA7EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_BcC20vA7EeSG3oiRNiMzRA" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BcC20_A7EeSG3oiRNiMzRA" points="[-23, -49, -23, 120]$[-23, -120, -23, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcEE8PA7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcEE8fA7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_BcEE8vA7EeSG3oiRNiMzRA" type="4001" element="_Bb67APA7EeSG3oiRNiMzRA" source="_Bb9-UPA7EeSG3oiRNiMzRA" target="_4gqQMPA6EeSG3oiRNiMzRA">
+ <children xmi:type="notation:Node" xmi:id="_BcEsAPA7EeSG3oiRNiMzRA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcEsAfA7EeSG3oiRNiMzRA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcEsAvA7EeSG3oiRNiMzRA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcEsA_A7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_BcEsBPA7EeSG3oiRNiMzRA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BcEsBfA7EeSG3oiRNiMzRA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_BcEE8_A7EeSG3oiRNiMzRA" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_BcEE9PA7EeSG3oiRNiMzRA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BcEE9fA7EeSG3oiRNiMzRA" points="[-9, -11, 36, 120]$[-45, -65, 0, 66]$[-45, -65, 0, 66]$[-45, -82, 0, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcFTEPA7EeSG3oiRNiMzRA" id="(0.8833333333333333,0.12)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BcFTEfA7EeSG3oiRNiMzRA" id="(0.5,0.5)"/>
+ </edges>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="__PZ8ML7OEeS9UtFUBaZTJg" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="__PajQL7OEeS9UtFUBaZTJg">
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_4ghtUPA6EeSG3oiRNiMzRA" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_4ghtUfA6EeSG3oiRNiMzRA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_4ghtUvA6EeSG3oiRNiMzRA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_4gkJkPA6EeSG3oiRNiMzRA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_4gkJkfA6EeSG3oiRNiMzRA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_4gkJkvA6EeSG3oiRNiMzRA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_ogqTYL7OEeS9UtFUBaZTJg" name="SaveHistory" tooltipText="" outgoingEdges="_hvUmYPA6EeSG3oiRNiMzRA _4ggfMPA6EeSG3oiRNiMzRA _Bb1bcPA7EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//SaveHistory"/>
+ <semanticElements xmi:type="ecore:EClass" href="smflatmodel.ecore#//SaveHistory"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_33sIUMQfEeSJvNw22IM-EQ" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_rZF5EL7OEeS9UtFUBaZTJg" name="CheckHistory" tooltipText="" outgoingEdges="_hvV0gPA6EeSG3oiRNiMzRA _4gi7cPA6EeSG3oiRNiMzRA _Bb2pkPA7EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//CheckHistory"/>
+ <semanticElements xmi:type="ecore:EClass" href="smflatmodel.ecore#//CheckHistory"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_rZHHML7OEeS9UtFUBaZTJg" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_hvIZIPA6EeSG3oiRNiMzRA" name="ActionCode" tooltipText="" incomingEdges="_hvUmYPA6EeSG3oiRNiMzRA _hvV0gPA6EeSG3oiRNiMzRA _yYnT4PA6EeSG3oiRNiMzRA _y6WH8PA6EeSG3oiRNiMzRA _zYxwYPA6EeSG3oiRNiMzRA _4gjig_A6EeSG3oiRNiMzRA _4gkwoPA6EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode"/>
+ <semanticElements xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode"/>
+ <decorations xmi:type="viewpoint:Decoration" xmi:id="_hvTYQPA6EeSG3oiRNiMzRA">
+ <description xmi:type="description:SemanticBasedDecoration" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@decorationDescriptionsSet/@decorationDescriptions[name='External']"/>
+ </decorations>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_hvJnQPA6EeSG3oiRNiMzRA" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_hvRjEPA6EeSG3oiRNiMzRA" name="source : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode/source"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode/source"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_hvSxMPA6EeSG3oiRNiMzRA" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_hvUmYPA6EeSG3oiRNiMzRA" sourceNode="_ogqTYL7OEeS9UtFUBaZTJg" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//SaveHistory"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="smflatmodel.ecore#//SaveHistory/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_hvVNcPA6EeSG3oiRNiMzRA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_hvVNcfA6EeSG3oiRNiMzRA" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_hvVNcvA6EeSG3oiRNiMzRA" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_hvV0gPA6EeSG3oiRNiMzRA" sourceNode="_rZF5EL7OEeS9UtFUBaZTJg" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//CheckHistory"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="smflatmodel.ecore#//CheckHistory/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_hvWbkPA6EeSG3oiRNiMzRA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_hvWbkfA6EeSG3oiRNiMzRA" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_hvWbkvA6EeSG3oiRNiMzRA" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_lKz10PA6EeSG3oiRNiMzRA" name="EntryAction" tooltipText="" outgoingEdges="_yYnT4PA6EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//EntryAction"/>
+ <semanticElements xmi:type="ecore:EClass" href="smflatmodel.ecore#//EntryAction"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_lK0c4PA6EeSG3oiRNiMzRA" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_ouuBcPA6EeSG3oiRNiMzRA" name="ExitAction" tooltipText="" outgoingEdges="_y6WH8PA6EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//ExitAction"/>
+ <semanticElements xmi:type="ecore:EClass" href="smflatmodel.ecore#//ExitAction"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_ouuogPA6EeSG3oiRNiMzRA" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_qgVwEPA6EeSG3oiRNiMzRA" name="TransitionAction" tooltipText="" outgoingEdges="_zYxwYPA6EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//TransitionAction"/>
+ <semanticElements xmi:type="ecore:EClass" href="smflatmodel.ecore#//TransitionAction"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_qgW-MPA6EeSG3oiRNiMzRA" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_yYnT4PA6EeSG3oiRNiMzRA" sourceNode="_lKz10PA6EeSG3oiRNiMzRA" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//EntryAction"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="smflatmodel.ecore#//EntryAction/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_yYnT4fA6EeSG3oiRNiMzRA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_yYnT4vA6EeSG3oiRNiMzRA" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_yYnT4_A6EeSG3oiRNiMzRA" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_y6WH8PA6EeSG3oiRNiMzRA" sourceNode="_ouuBcPA6EeSG3oiRNiMzRA" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//ExitAction"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="smflatmodel.ecore#//ExitAction/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_y6WvAPA6EeSG3oiRNiMzRA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_y6WvAfA6EeSG3oiRNiMzRA" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_y6WvAvA6EeSG3oiRNiMzRA" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_zYxwYPA6EeSG3oiRNiMzRA" sourceNode="_qgVwEPA6EeSG3oiRNiMzRA" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EClass" href="smflatmodel.ecore#//TransitionAction"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="smflatmodel.ecore#//TransitionAction/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_zYyXcPA6EeSG3oiRNiMzRA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_zYyXcfA6EeSG3oiRNiMzRA" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_zYyXcvA6EeSG3oiRNiMzRA" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_4gU5APA6EeSG3oiRNiMzRA" name="State" tooltipText="" outgoingEdges="_4gjig_A6EeSG3oiRNiMzRA _4gkwoPA6EeSG3oiRNiMzRA" incomingEdges="_4ggfMPA6EeSG3oiRNiMzRA _4gi7cPA6EeSG3oiRNiMzRA _Bb3Qo_A7EeSG3oiRNiMzRA _Bb67APA7EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State"/>
+ <semanticElements xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State"/>
+ <decorations xmi:type="viewpoint:Decoration" xmi:id="_4gf4IPA6EeSG3oiRNiMzRA">
+ <description xmi:type="description:SemanticBasedDecoration" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@decorationDescriptionsSet/@decorationDescriptions[name='External']"/>
+ </decorations>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_4gWHIPA6EeSG3oiRNiMzRA" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4ggfMPA6EeSG3oiRNiMzRA" name="[1..1] subState" sourceNode="_ogqTYL7OEeS9UtFUBaZTJg" targetNode="_4gU5APA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="smflatmodel.ecore#//SaveHistory/subState"/>
+ <semanticElements xmi:type="ecore:EReference" href="smflatmodel.ecore#//SaveHistory/subState"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4giUYPA6EeSG3oiRNiMzRA" description="_4ghtUPA6EeSG3oiRNiMzRA" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4giUYfA6EeSG3oiRNiMzRA" labelFormat="bold" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_4giUYvA6EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4gi7cPA6EeSG3oiRNiMzRA" name="[1..1] subState" sourceNode="_rZF5EL7OEeS9UtFUBaZTJg" targetNode="_4gU5APA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="smflatmodel.ecore#//CheckHistory/subState"/>
+ <semanticElements xmi:type="ecore:EReference" href="smflatmodel.ecore#//CheckHistory/subState"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4gjigPA6EeSG3oiRNiMzRA" description="_4ghtUPA6EeSG3oiRNiMzRA" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4gjigfA6EeSG3oiRNiMzRA" labelFormat="bold" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_4gjigvA6EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4gjig_A6EeSG3oiRNiMzRA" name="[0..1] entryAction" sourceNode="_4gU5APA6EeSG3oiRNiMzRA" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State/entryAction"/>
+ <semanticElements xmi:type="ecore:EReference" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State/entryAction"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4gkJk_A6EeSG3oiRNiMzRA" description="_4gkJkPA6EeSG3oiRNiMzRA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4gkJlPA6EeSG3oiRNiMzRA" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_4gkJlfA6EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4gkwoPA6EeSG3oiRNiMzRA" name="[0..1] exitAction" sourceNode="_4gU5APA6EeSG3oiRNiMzRA" targetNode="_hvIZIPA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State/exitAction"/>
+ <semanticElements xmi:type="ecore:EReference" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State/exitAction"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4glXsPA6EeSG3oiRNiMzRA" description="_4gkJkPA6EeSG3oiRNiMzRA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4glXsfA6EeSG3oiRNiMzRA" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_4glXsvA6EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_BbkVsPA7EeSG3oiRNiMzRA" name="CompositeState" tooltipText="" outgoingEdges="_Bb3Qo_A7EeSG3oiRNiMzRA _Bb67APA7EeSG3oiRNiMzRA" incomingEdges="_Bb1bcPA7EeSG3oiRNiMzRA _Bb2pkPA7EeSG3oiRNiMzRA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState"/>
+ <semanticElements xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState"/>
+ <decorations xmi:type="viewpoint:Decoration" xmi:id="_BbxxEPA7EeSG3oiRNiMzRA">
+ <description xmi:type="description:SemanticBasedDecoration" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@decorationDescriptionsSet/@decorationDescriptions[name='External']"/>
+ </decorations>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Bblj0PA7EeSG3oiRNiMzRA" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Bb1bcPA7EeSG3oiRNiMzRA" name="[1..1] compositeState" sourceNode="_ogqTYL7OEeS9UtFUBaZTJg" targetNode="_BbkVsPA7EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="smflatmodel.ecore#//SaveHistory/compositeState"/>
+ <semanticElements xmi:type="ecore:EReference" href="smflatmodel.ecore#//SaveHistory/compositeState"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Bb2CgPA7EeSG3oiRNiMzRA" description="_4ghtUPA6EeSG3oiRNiMzRA" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Bb2CgfA7EeSG3oiRNiMzRA" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_Bb2CgvA7EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Bb2pkPA7EeSG3oiRNiMzRA" name="[1..1] compositeState" sourceNode="_rZF5EL7OEeS9UtFUBaZTJg" targetNode="_BbkVsPA7EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="smflatmodel.ecore#//CheckHistory/compositeState"/>
+ <semanticElements xmi:type="ecore:EReference" href="smflatmodel.ecore#//CheckHistory/compositeState"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Bb3QoPA7EeSG3oiRNiMzRA" description="_4ghtUPA6EeSG3oiRNiMzRA" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Bb3QofA7EeSG3oiRNiMzRA" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_Bb3QovA7EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Bb3Qo_A7EeSG3oiRNiMzRA" name="[0..*] substates" sourceNode="_BbkVsPA7EeSG3oiRNiMzRA" targetNode="_4gU5APA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EReference" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState/substates"/>
+ <semanticElements xmi:type="ecore:EReference" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState/substates"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Bb33sPA7EeSG3oiRNiMzRA" description="_4gkJkPA6EeSG3oiRNiMzRA" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0">
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Bb33sfA7EeSG3oiRNiMzRA" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_Bb33svA7EeSG3oiRNiMzRA" showIcon="false" labelColor="39,76,114">
+ <customFeatures>labelSize</customFeatures>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Bb67APA7EeSG3oiRNiMzRA" sourceNode="_BbkVsPA7EeSG3oiRNiMzRA" targetNode="_4gU5APA6EeSG3oiRNiMzRA">
+ <target xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Bb7iEPA7EeSG3oiRNiMzRA" targetArrow="InputClosedArrow" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Bb7iEfA7EeSG3oiRNiMzRA" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Bb7iEvA7EeSG3oiRNiMzRA" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_b_QBRb7OEeS9UtFUBaZTJg"/>
+ <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+ <target xmi:type="ecore:EPackage" href="smflatmodel.ecore#/"/>
+ </ownedRepresentations>
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+ </ownedViews>
+</viewpoint:DAnalysis>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.ecore b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.ecore
new file mode 100644
index 0000000..1e17d69
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.ecore
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="smflatmodel" nsURI="http://www.zeligsoft.com/smflatmodel" nsPrefix="smflatmodel">
+ <eClassifiers xsi:type="ecore:EClass" name="SaveHistory" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="compositeState" lowerBound="1"
+ eType="ecore:EClass ../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="subState" lowerBound="1"
+ eType="ecore:EClass ../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CheckHistory" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="compositeState" lowerBound="1"
+ eType="ecore:EClass ../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//CompositeState"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="subState" lowerBound="1"
+ eType="ecore:EClass ../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//State"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EntryAction" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ExitAction" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode"/>
+ <eClassifiers xsi:type="ecore:EClass" name="TransitionAction" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#//ActionCode"/>
+</ecore:EPackage>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.genmodel b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.genmodel
new file mode 100644
index 0000000..f71b189
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/model/smflatmodel.genmodel
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
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
"
+ modelDirectory="/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src" editDirectory="/org.eclipse.papyrusrt.codegen.statemachines.flat.model.edit/src"
+ editorDirectory="/org.eclipse.papyrusrt.codegen.statemachines.flat.model.editor/src"
+ modelPluginID="org.eclipse.papyrusrt.codegen.statemachines.flat.model" modelName="Smflatmodel"
+ modelPluginClass="" editPluginClass="org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.provider.SmflatmodelEditPlugin"
+ editorPluginClass="org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.presentation.SmflatmodelEditorPlugin"
+ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" testSuiteClass="org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.tests.SmflatmodelAllTests"
+ importerID="org.eclipse.emf.importer.ecore" complianceLevel="7.0" copyrightFields="false"
+ editPluginID="org.eclipse.papyrusrt.codegen.statemachines.flat.model.edit" editorPluginID="org.eclipse.papyrusrt.codegen.statemachines.flat.model.editor"
+ usedGenPackages="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.genmodel#//common"
+ operationReflection="true" importOrganizing="true">
+ <foreignModel>smflatmodel.ecore</foreignModel>
+ <genPackages prefix="Smflatmodel" basePackage="org.eclipse.papyrusrt.codegen.statemachines.flat.model"
+ disposableProviderFactory="true" ecorePackage="smflatmodel.ecore#/">
+ <genClasses ecoreClass="smflatmodel.ecore#//SaveHistory">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference smflatmodel.ecore#//SaveHistory/compositeState"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference smflatmodel.ecore#//SaveHistory/subState"/>
+ </genClasses>
+ <genClasses ecoreClass="smflatmodel.ecore#//CheckHistory">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference smflatmodel.ecore#//CheckHistory/compositeState"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference smflatmodel.ecore#//CheckHistory/subState"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/plugin.properties b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/plugin.properties
new file mode 100644
index 0000000..bde101c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/plugin.properties
@@ -0,0 +1,9 @@
+# Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+# 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
+#
+
+pluginName = Smflatmodel Model
+providerName = www.example.org
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/plugin.xml
new file mode 100644
index 0000000..59c32a4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ 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
+
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated smflatmodel -->
+ <package
+ uri="http://www.zeligsoft.com/smflatmodel"
+ class="org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage"
+ genModel="model/smflatmodel.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/pom.xml
new file mode 100644
index 0000000..b1af5ec
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.statemachines.flat.model</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/CheckHistory.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/CheckHistory.java
new file mode 100644
index 0000000..b2ebfe0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/CheckHistory.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState;
+import org.eclipse.papyrusrt.xtumlrt.common.State;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Check History</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getCompositeState <em>Composite State</em>}</li>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getSubState <em>Sub State</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getCheckHistory()
+ * @model
+ * @generated
+ */
+public interface CheckHistory extends ActionCode
+{
+ /**
+ * Returns the value of the '<em><b>Composite State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Composite State</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Composite State</em>' reference.
+ * @see #setCompositeState(CompositeState)
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getCheckHistory_CompositeState()
+ * @model required="true"
+ * @generated
+ */
+ CompositeState getCompositeState();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getCompositeState <em>Composite State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Composite State</em>' reference.
+ * @see #getCompositeState()
+ * @generated
+ */
+ void setCompositeState(CompositeState value);
+
+ /**
+ * Returns the value of the '<em><b>Sub State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Sub State</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Sub State</em>' reference.
+ * @see #setSubState(State)
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getCheckHistory_SubState()
+ * @model required="true"
+ * @generated
+ */
+ State getSubState();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getSubState <em>Sub State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Sub State</em>' reference.
+ * @see #getSubState()
+ * @generated
+ */
+ void setSubState(State value);
+
+} // CheckHistory
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/EntryAction.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/EntryAction.java
new file mode 100644
index 0000000..746c4a2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/EntryAction.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Entry Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getEntryAction()
+ * @model
+ * @generated
+ */
+public interface EntryAction extends ActionCode
+{
+} // EntryAction
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/ExitAction.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/ExitAction.java
new file mode 100644
index 0000000..eb4007d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/ExitAction.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Exit Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getExitAction()
+ * @model
+ * @generated
+ */
+public interface ExitAction extends ActionCode
+{
+} // ExitAction
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SaveHistory.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SaveHistory.java
new file mode 100644
index 0000000..6d8d364
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SaveHistory.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState;
+import org.eclipse.papyrusrt.xtumlrt.common.State;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Save History</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getCompositeState <em>Composite State</em>}</li>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getSubState <em>Sub State</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getSaveHistory()
+ * @model
+ * @generated
+ */
+public interface SaveHistory extends ActionCode
+{
+ /**
+ * Returns the value of the '<em><b>Composite State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Composite State</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Composite State</em>' reference.
+ * @see #setCompositeState(CompositeState)
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getSaveHistory_CompositeState()
+ * @model required="true"
+ * @generated
+ */
+ CompositeState getCompositeState();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getCompositeState <em>Composite State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Composite State</em>' reference.
+ * @see #getCompositeState()
+ * @generated
+ */
+ void setCompositeState(CompositeState value);
+
+ /**
+ * Returns the value of the '<em><b>Sub State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Sub State</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Sub State</em>' reference.
+ * @see #setSubState(State)
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getSaveHistory_SubState()
+ * @model required="true"
+ * @generated
+ */
+ State getSubState();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getSubState <em>Sub State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Sub State</em>' reference.
+ * @see #getSubState()
+ * @generated
+ */
+ void setSubState(State value);
+
+} // SaveHistory
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SmflatmodelFactory.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SmflatmodelFactory.java
new file mode 100644
index 0000000..c964a27
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SmflatmodelFactory.java
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage
+ * @generated
+ */
+public interface SmflatmodelFactory extends EFactory
+{
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ SmflatmodelFactory eINSTANCE = org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Save History</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Save History</em>'.
+ * @generated
+ */
+ SaveHistory createSaveHistory();
+
+ /**
+ * Returns a new object of class '<em>Check History</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Check History</em>'.
+ * @generated
+ */
+ CheckHistory createCheckHistory();
+
+ /**
+ * Returns a new object of class '<em>Entry Action</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Entry Action</em>'.
+ * @generated
+ */
+ EntryAction createEntryAction();
+
+ /**
+ * Returns a new object of class '<em>Exit Action</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Exit Action</em>'.
+ * @generated
+ */
+ ExitAction createExitAction();
+
+ /**
+ * Returns a new object of class '<em>Transition Action</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Transition Action</em>'.
+ * @generated
+ */
+ TransitionAction createTransitionAction();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ SmflatmodelPackage getSmflatmodelPackage();
+
+} //SmflatmodelFactory
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SmflatmodelPackage.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SmflatmodelPackage.java
new file mode 100644
index 0000000..078e81e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/SmflatmodelPackage.java
@@ -0,0 +1,627 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.papyrusrt.xtumlrt.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface SmflatmodelPackage extends EPackage
+{
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "smflatmodel";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.zeligsoft.com/smflatmodel";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "smflatmodel";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ SmflatmodelPackage eINSTANCE = org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SaveHistoryImpl <em>Save History</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SaveHistoryImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getSaveHistory()
+ * @generated
+ */
+ int SAVE_HISTORY = 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY__NAME = CommonPackage.ACTION_CODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY__DESCRIPTION = CommonPackage.ACTION_CODE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Annotations</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY__ANNOTATIONS = CommonPackage.ACTION_CODE__ANNOTATIONS;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY__SOURCE = CommonPackage.ACTION_CODE__SOURCE;
+
+ /**
+ * The feature id for the '<em><b>Composite State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY__COMPOSITE_STATE = CommonPackage.ACTION_CODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Sub State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY__SUB_STATE = CommonPackage.ACTION_CODE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Save History</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY_FEATURE_COUNT = CommonPackage.ACTION_CODE_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the '<em>Save History</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SAVE_HISTORY_OPERATION_COUNT = CommonPackage.ACTION_CODE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.CheckHistoryImpl <em>Check History</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.CheckHistoryImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getCheckHistory()
+ * @generated
+ */
+ int CHECK_HISTORY = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY__NAME = CommonPackage.ACTION_CODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY__DESCRIPTION = CommonPackage.ACTION_CODE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Annotations</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY__ANNOTATIONS = CommonPackage.ACTION_CODE__ANNOTATIONS;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY__SOURCE = CommonPackage.ACTION_CODE__SOURCE;
+
+ /**
+ * The feature id for the '<em><b>Composite State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY__COMPOSITE_STATE = CommonPackage.ACTION_CODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Sub State</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY__SUB_STATE = CommonPackage.ACTION_CODE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Check History</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY_FEATURE_COUNT = CommonPackage.ACTION_CODE_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the '<em>Check History</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CHECK_HISTORY_OPERATION_COUNT = CommonPackage.ACTION_CODE_OPERATION_COUNT + 0;
+
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.EntryActionImpl <em>Entry Action</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.EntryActionImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getEntryAction()
+ * @generated
+ */
+ int ENTRY_ACTION = 2;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENTRY_ACTION__NAME = CommonPackage.ACTION_CODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENTRY_ACTION__DESCRIPTION = CommonPackage.ACTION_CODE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Annotations</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENTRY_ACTION__ANNOTATIONS = CommonPackage.ACTION_CODE__ANNOTATIONS;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENTRY_ACTION__SOURCE = CommonPackage.ACTION_CODE__SOURCE;
+
+ /**
+ * The number of structural features of the '<em>Entry Action</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENTRY_ACTION_FEATURE_COUNT = CommonPackage.ACTION_CODE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Entry Action</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ENTRY_ACTION_OPERATION_COUNT = CommonPackage.ACTION_CODE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.ExitActionImpl <em>Exit Action</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.ExitActionImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getExitAction()
+ * @generated
+ */
+ int EXIT_ACTION = 3;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXIT_ACTION__NAME = CommonPackage.ACTION_CODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXIT_ACTION__DESCRIPTION = CommonPackage.ACTION_CODE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Annotations</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXIT_ACTION__ANNOTATIONS = CommonPackage.ACTION_CODE__ANNOTATIONS;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXIT_ACTION__SOURCE = CommonPackage.ACTION_CODE__SOURCE;
+
+ /**
+ * The number of structural features of the '<em>Exit Action</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXIT_ACTION_FEATURE_COUNT = CommonPackage.ACTION_CODE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Exit Action</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int EXIT_ACTION_OPERATION_COUNT = CommonPackage.ACTION_CODE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.TransitionActionImpl <em>Transition Action</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.TransitionActionImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getTransitionAction()
+ * @generated
+ */
+ int TRANSITION_ACTION = 4;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TRANSITION_ACTION__NAME = CommonPackage.ACTION_CODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TRANSITION_ACTION__DESCRIPTION = CommonPackage.ACTION_CODE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Annotations</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TRANSITION_ACTION__ANNOTATIONS = CommonPackage.ACTION_CODE__ANNOTATIONS;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TRANSITION_ACTION__SOURCE = CommonPackage.ACTION_CODE__SOURCE;
+
+ /**
+ * The number of structural features of the '<em>Transition Action</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TRANSITION_ACTION_FEATURE_COUNT = CommonPackage.ACTION_CODE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Transition Action</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int TRANSITION_ACTION_OPERATION_COUNT = CommonPackage.ACTION_CODE_OPERATION_COUNT + 0;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory <em>Save History</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Save History</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+ * @generated
+ */
+ EClass getSaveHistory();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getCompositeState <em>Composite State</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Composite State</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getCompositeState()
+ * @see #getSaveHistory()
+ * @generated
+ */
+ EReference getSaveHistory_CompositeState();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getSubState <em>Sub State</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Sub State</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory#getSubState()
+ * @see #getSaveHistory()
+ * @generated
+ */
+ EReference getSaveHistory_SubState();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory <em>Check History</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Check History</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+ * @generated
+ */
+ EClass getCheckHistory();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getCompositeState <em>Composite State</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Composite State</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getCompositeState()
+ * @see #getCheckHistory()
+ * @generated
+ */
+ EReference getCheckHistory_CompositeState();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getSubState <em>Sub State</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Sub State</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory#getSubState()
+ * @see #getCheckHistory()
+ * @generated
+ */
+ EReference getCheckHistory_SubState();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction <em>Entry Action</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Entry Action</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction
+ * @generated
+ */
+ EClass getEntryAction();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction <em>Exit Action</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Exit Action</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction
+ * @generated
+ */
+ EClass getExitAction();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction <em>Transition Action</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Transition Action</em>'.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction
+ * @generated
+ */
+ EClass getTransitionAction();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ SmflatmodelFactory getSmflatmodelFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals
+ {
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SaveHistoryImpl <em>Save History</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SaveHistoryImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getSaveHistory()
+ * @generated
+ */
+ EClass SAVE_HISTORY = eINSTANCE.getSaveHistory();
+
+ /**
+ * The meta object literal for the '<em><b>Composite State</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SAVE_HISTORY__COMPOSITE_STATE = eINSTANCE.getSaveHistory_CompositeState();
+
+ /**
+ * The meta object literal for the '<em><b>Sub State</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SAVE_HISTORY__SUB_STATE = eINSTANCE.getSaveHistory_SubState();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.CheckHistoryImpl <em>Check History</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.CheckHistoryImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getCheckHistory()
+ * @generated
+ */
+ EClass CHECK_HISTORY = eINSTANCE.getCheckHistory();
+
+ /**
+ * The meta object literal for the '<em><b>Composite State</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference CHECK_HISTORY__COMPOSITE_STATE = eINSTANCE.getCheckHistory_CompositeState();
+
+ /**
+ * The meta object literal for the '<em><b>Sub State</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference CHECK_HISTORY__SUB_STATE = eINSTANCE.getCheckHistory_SubState();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.EntryActionImpl <em>Entry Action</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.EntryActionImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getEntryAction()
+ * @generated
+ */
+ EClass ENTRY_ACTION = eINSTANCE.getEntryAction();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.ExitActionImpl <em>Exit Action</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.ExitActionImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getExitAction()
+ * @generated
+ */
+ EClass EXIT_ACTION = eINSTANCE.getExitAction();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.TransitionActionImpl <em>Transition Action</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.TransitionActionImpl
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SmflatmodelPackageImpl#getTransitionAction()
+ * @generated
+ */
+ EClass TRANSITION_ACTION = eINSTANCE.getTransitionAction();
+
+ }
+
+} //SmflatmodelPackage
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/TransitionAction.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/TransitionAction.java
new file mode 100644
index 0000000..05b78fc
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/TransitionAction.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Transition Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#getTransitionAction()
+ * @model
+ * @generated
+ */
+public interface TransitionAction extends ActionCode
+{
+} // TransitionAction
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/CheckHistoryImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/CheckHistoryImpl.java
new file mode 100644
index 0000000..968275c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/CheckHistoryImpl.java
@@ -0,0 +1,247 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage;
+
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState;
+import org.eclipse.papyrusrt.xtumlrt.common.State;
+
+import org.eclipse.papyrusrt.xtumlrt.common.impl.ActionCodeImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Check History</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.CheckHistoryImpl#getCompositeState <em>Composite State</em>}</li>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.CheckHistoryImpl#getSubState <em>Sub State</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class CheckHistoryImpl extends ActionCodeImpl implements CheckHistory
+{
+ /**
+ * The cached value of the '{@link #getCompositeState() <em>Composite State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCompositeState()
+ * @generated
+ * @ordered
+ */
+ protected CompositeState compositeState;
+
+ /**
+ * The cached value of the '{@link #getSubState() <em>Sub State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSubState()
+ * @generated
+ * @ordered
+ */
+ protected State subState;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected CheckHistoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return SmflatmodelPackage.Literals.CHECK_HISTORY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompositeState getCompositeState()
+ {
+ if (compositeState != null && compositeState.eIsProxy())
+ {
+ InternalEObject oldCompositeState = (InternalEObject)compositeState;
+ compositeState = (CompositeState)eResolveProxy(oldCompositeState);
+ if (compositeState != oldCompositeState)
+ {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, SmflatmodelPackage.CHECK_HISTORY__COMPOSITE_STATE, oldCompositeState, compositeState));
+ }
+ }
+ return compositeState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompositeState basicGetCompositeState()
+ {
+ return compositeState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCompositeState(CompositeState newCompositeState)
+ {
+ CompositeState oldCompositeState = compositeState;
+ compositeState = newCompositeState;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SmflatmodelPackage.CHECK_HISTORY__COMPOSITE_STATE, oldCompositeState, compositeState));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public State getSubState()
+ {
+ if (subState != null && subState.eIsProxy())
+ {
+ InternalEObject oldSubState = (InternalEObject)subState;
+ subState = (State)eResolveProxy(oldSubState);
+ if (subState != oldSubState)
+ {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, SmflatmodelPackage.CHECK_HISTORY__SUB_STATE, oldSubState, subState));
+ }
+ }
+ return subState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public State basicGetSubState()
+ {
+ return subState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSubState(State newSubState)
+ {
+ State oldSubState = subState;
+ subState = newSubState;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SmflatmodelPackage.CHECK_HISTORY__SUB_STATE, oldSubState, subState));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.CHECK_HISTORY__COMPOSITE_STATE:
+ if (resolve) return getCompositeState();
+ return basicGetCompositeState();
+ case SmflatmodelPackage.CHECK_HISTORY__SUB_STATE:
+ if (resolve) return getSubState();
+ return basicGetSubState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.CHECK_HISTORY__COMPOSITE_STATE:
+ setCompositeState((CompositeState)newValue);
+ return;
+ case SmflatmodelPackage.CHECK_HISTORY__SUB_STATE:
+ setSubState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.CHECK_HISTORY__COMPOSITE_STATE:
+ setCompositeState((CompositeState)null);
+ return;
+ case SmflatmodelPackage.CHECK_HISTORY__SUB_STATE:
+ setSubState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.CHECK_HISTORY__COMPOSITE_STATE:
+ return compositeState != null;
+ case SmflatmodelPackage.CHECK_HISTORY__SUB_STATE:
+ return subState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //CheckHistoryImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/EntryActionImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/EntryActionImpl.java
new file mode 100644
index 0000000..af5b034
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/EntryActionImpl.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage;
+
+import org.eclipse.papyrusrt.xtumlrt.common.impl.ActionCodeImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Entry Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class EntryActionImpl extends ActionCodeImpl implements EntryAction
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EntryActionImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return SmflatmodelPackage.Literals.ENTRY_ACTION;
+ }
+
+} //EntryActionImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/ExitActionImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/ExitActionImpl.java
new file mode 100644
index 0000000..acece9c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/ExitActionImpl.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage;
+
+import org.eclipse.papyrusrt.xtumlrt.common.impl.ActionCodeImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Exit Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ExitActionImpl extends ActionCodeImpl implements ExitAction
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ExitActionImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return SmflatmodelPackage.Literals.EXIT_ACTION;
+ }
+
+} //ExitActionImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SaveHistoryImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SaveHistoryImpl.java
new file mode 100644
index 0000000..93bdd16
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SaveHistoryImpl.java
@@ -0,0 +1,247 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage;
+
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState;
+import org.eclipse.papyrusrt.xtumlrt.common.State;
+
+import org.eclipse.papyrusrt.xtumlrt.common.impl.ActionCodeImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Save History</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SaveHistoryImpl#getCompositeState <em>Composite State</em>}</li>
+ * <li>{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl.SaveHistoryImpl#getSubState <em>Sub State</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class SaveHistoryImpl extends ActionCodeImpl implements SaveHistory
+{
+ /**
+ * The cached value of the '{@link #getCompositeState() <em>Composite State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getCompositeState()
+ * @generated
+ * @ordered
+ */
+ protected CompositeState compositeState;
+
+ /**
+ * The cached value of the '{@link #getSubState() <em>Sub State</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSubState()
+ * @generated
+ * @ordered
+ */
+ protected State subState;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected SaveHistoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return SmflatmodelPackage.Literals.SAVE_HISTORY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompositeState getCompositeState()
+ {
+ if (compositeState != null && compositeState.eIsProxy())
+ {
+ InternalEObject oldCompositeState = (InternalEObject)compositeState;
+ compositeState = (CompositeState)eResolveProxy(oldCompositeState);
+ if (compositeState != oldCompositeState)
+ {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, SmflatmodelPackage.SAVE_HISTORY__COMPOSITE_STATE, oldCompositeState, compositeState));
+ }
+ }
+ return compositeState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CompositeState basicGetCompositeState()
+ {
+ return compositeState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCompositeState(CompositeState newCompositeState)
+ {
+ CompositeState oldCompositeState = compositeState;
+ compositeState = newCompositeState;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SmflatmodelPackage.SAVE_HISTORY__COMPOSITE_STATE, oldCompositeState, compositeState));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public State getSubState()
+ {
+ if (subState != null && subState.eIsProxy())
+ {
+ InternalEObject oldSubState = (InternalEObject)subState;
+ subState = (State)eResolveProxy(oldSubState);
+ if (subState != oldSubState)
+ {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, SmflatmodelPackage.SAVE_HISTORY__SUB_STATE, oldSubState, subState));
+ }
+ }
+ return subState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public State basicGetSubState()
+ {
+ return subState;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setSubState(State newSubState)
+ {
+ State oldSubState = subState;
+ subState = newSubState;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, SmflatmodelPackage.SAVE_HISTORY__SUB_STATE, oldSubState, subState));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.SAVE_HISTORY__COMPOSITE_STATE:
+ if (resolve) return getCompositeState();
+ return basicGetCompositeState();
+ case SmflatmodelPackage.SAVE_HISTORY__SUB_STATE:
+ if (resolve) return getSubState();
+ return basicGetSubState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.SAVE_HISTORY__COMPOSITE_STATE:
+ setCompositeState((CompositeState)newValue);
+ return;
+ case SmflatmodelPackage.SAVE_HISTORY__SUB_STATE:
+ setSubState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.SAVE_HISTORY__COMPOSITE_STATE:
+ setCompositeState((CompositeState)null);
+ return;
+ case SmflatmodelPackage.SAVE_HISTORY__SUB_STATE:
+ setSubState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case SmflatmodelPackage.SAVE_HISTORY__COMPOSITE_STATE:
+ return compositeState != null;
+ case SmflatmodelPackage.SAVE_HISTORY__SUB_STATE:
+ return subState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //SaveHistoryImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SmflatmodelFactoryImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SmflatmodelFactoryImpl.java
new file mode 100644
index 0000000..a6e6297
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SmflatmodelFactoryImpl.java
@@ -0,0 +1,160 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SmflatmodelFactoryImpl extends EFactoryImpl implements SmflatmodelFactory
+{
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static SmflatmodelFactory init()
+ {
+ try
+ {
+ SmflatmodelFactory theSmflatmodelFactory = (SmflatmodelFactory)EPackage.Registry.INSTANCE.getEFactory(SmflatmodelPackage.eNS_URI);
+ if (theSmflatmodelFactory != null)
+ {
+ return theSmflatmodelFactory;
+ }
+ }
+ catch (Exception exception)
+ {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new SmflatmodelFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public SmflatmodelFactoryImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass)
+ {
+ switch (eClass.getClassifierID())
+ {
+ case SmflatmodelPackage.SAVE_HISTORY: return createSaveHistory();
+ case SmflatmodelPackage.CHECK_HISTORY: return createCheckHistory();
+ case SmflatmodelPackage.ENTRY_ACTION: return createEntryAction();
+ case SmflatmodelPackage.EXIT_ACTION: return createExitAction();
+ case SmflatmodelPackage.TRANSITION_ACTION: return createTransitionAction();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public SaveHistory createSaveHistory()
+ {
+ SaveHistoryImpl saveHistory = new SaveHistoryImpl();
+ return saveHistory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public CheckHistory createCheckHistory()
+ {
+ CheckHistoryImpl checkHistory = new CheckHistoryImpl();
+ return checkHistory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EntryAction createEntryAction()
+ {
+ EntryActionImpl entryAction = new EntryActionImpl();
+ return entryAction;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ExitAction createExitAction()
+ {
+ ExitActionImpl exitAction = new ExitActionImpl();
+ return exitAction;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public TransitionAction createTransitionAction()
+ {
+ TransitionActionImpl transitionAction = new TransitionActionImpl();
+ return transitionAction;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public SmflatmodelPackage getSmflatmodelPackage()
+ {
+ return (SmflatmodelPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static SmflatmodelPackage getPackage()
+ {
+ return SmflatmodelPackage.eINSTANCE;
+ }
+
+} //SmflatmodelFactoryImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SmflatmodelPackageImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SmflatmodelPackageImpl.java
new file mode 100644
index 0000000..66605aa
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/SmflatmodelPackageImpl.java
@@ -0,0 +1,328 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelFactory;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction;
+import org.eclipse.papyrusrt.xtumlrt.common.CommonPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SmflatmodelPackageImpl extends EPackageImpl implements SmflatmodelPackage
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass saveHistoryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass checkHistoryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass entryActionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass exitActionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass transitionActionEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private SmflatmodelPackageImpl()
+ {
+ super(eNS_URI, SmflatmodelFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link SmflatmodelPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static SmflatmodelPackage init()
+ {
+ if (isInited) return (SmflatmodelPackage)EPackage.Registry.INSTANCE.getEPackage(SmflatmodelPackage.eNS_URI);
+
+ // Obtain or create and register package
+ SmflatmodelPackageImpl theSmflatmodelPackage = (SmflatmodelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof SmflatmodelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new SmflatmodelPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ CommonPackage.eINSTANCE.eClass();
+
+ // Create package meta-data objects
+ theSmflatmodelPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theSmflatmodelPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theSmflatmodelPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(SmflatmodelPackage.eNS_URI, theSmflatmodelPackage);
+ return theSmflatmodelPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getSaveHistory()
+ {
+ return saveHistoryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getSaveHistory_CompositeState()
+ {
+ return (EReference)saveHistoryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getSaveHistory_SubState()
+ {
+ return (EReference)saveHistoryEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getCheckHistory()
+ {
+ return checkHistoryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getCheckHistory_CompositeState()
+ {
+ return (EReference)checkHistoryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getCheckHistory_SubState()
+ {
+ return (EReference)checkHistoryEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getEntryAction()
+ {
+ return entryActionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getExitAction()
+ {
+ return exitActionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getTransitionAction()
+ {
+ return transitionActionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public SmflatmodelFactory getSmflatmodelFactory()
+ {
+ return (SmflatmodelFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents()
+ {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ saveHistoryEClass = createEClass(SAVE_HISTORY);
+ createEReference(saveHistoryEClass, SAVE_HISTORY__COMPOSITE_STATE);
+ createEReference(saveHistoryEClass, SAVE_HISTORY__SUB_STATE);
+
+ checkHistoryEClass = createEClass(CHECK_HISTORY);
+ createEReference(checkHistoryEClass, CHECK_HISTORY__COMPOSITE_STATE);
+ createEReference(checkHistoryEClass, CHECK_HISTORY__SUB_STATE);
+
+ entryActionEClass = createEClass(ENTRY_ACTION);
+
+ exitActionEClass = createEClass(EXIT_ACTION);
+
+ transitionActionEClass = createEClass(TRANSITION_ACTION);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents()
+ {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ CommonPackage theCommonPackage = (CommonPackage)EPackage.Registry.INSTANCE.getEPackage(CommonPackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ saveHistoryEClass.getESuperTypes().add(theCommonPackage.getActionCode());
+ checkHistoryEClass.getESuperTypes().add(theCommonPackage.getActionCode());
+ entryActionEClass.getESuperTypes().add(theCommonPackage.getActionCode());
+ exitActionEClass.getESuperTypes().add(theCommonPackage.getActionCode());
+ transitionActionEClass.getESuperTypes().add(theCommonPackage.getActionCode());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(saveHistoryEClass, SaveHistory.class, "SaveHistory", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getSaveHistory_CompositeState(), theCommonPackage.getCompositeState(), null, "compositeState", null, 1, 1, SaveHistory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getSaveHistory_SubState(), theCommonPackage.getState(), null, "subState", null, 1, 1, SaveHistory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(checkHistoryEClass, CheckHistory.class, "CheckHistory", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getCheckHistory_CompositeState(), theCommonPackage.getCompositeState(), null, "compositeState", null, 1, 1, CheckHistory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getCheckHistory_SubState(), theCommonPackage.getState(), null, "subState", null, 1, 1, CheckHistory.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(entryActionEClass, EntryAction.class, "EntryAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(exitActionEClass, ExitAction.class, "ExitAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(transitionActionEClass, TransitionAction.class, "TransitionAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //SmflatmodelPackageImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/TransitionActionImpl.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/TransitionActionImpl.java
new file mode 100644
index 0000000..d269c4a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/impl/TransitionActionImpl.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage;
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction;
+
+import org.eclipse.papyrusrt.xtumlrt.common.impl.ActionCodeImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Transition Action</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TransitionActionImpl extends ActionCodeImpl implements TransitionAction
+{
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TransitionActionImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return SmflatmodelPackage.Literals.TRANSITION_ACTION;
+ }
+
+} //TransitionActionImpl
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/util/SmflatmodelAdapterFactory.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/util/SmflatmodelAdapterFactory.java
new file mode 100644
index 0000000..523fbf4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/util/SmflatmodelAdapterFactory.java
@@ -0,0 +1,261 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.*;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage
+ * @generated
+ */
+public class SmflatmodelAdapterFactory extends AdapterFactoryImpl
+{
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static SmflatmodelPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public SmflatmodelAdapterFactory()
+ {
+ if (modelPackage == null)
+ {
+ modelPackage = SmflatmodelPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object)
+ {
+ if (object == modelPackage)
+ {
+ return true;
+ }
+ if (object instanceof EObject)
+ {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected SmflatmodelSwitch<Adapter> modelSwitch =
+ new SmflatmodelSwitch<Adapter>()
+ {
+ @Override
+ public Adapter caseSaveHistory(SaveHistory object)
+ {
+ return createSaveHistoryAdapter();
+ }
+ @Override
+ public Adapter caseCheckHistory(CheckHistory object)
+ {
+ return createCheckHistoryAdapter();
+ }
+ @Override
+ public Adapter caseEntryAction(EntryAction object)
+ {
+ return createEntryActionAdapter();
+ }
+ @Override
+ public Adapter caseExitAction(ExitAction object)
+ {
+ return createExitActionAdapter();
+ }
+ @Override
+ public Adapter caseTransitionAction(TransitionAction object)
+ {
+ return createTransitionActionAdapter();
+ }
+ @Override
+ public Adapter caseNamedElement(NamedElement object)
+ {
+ return createNamedElementAdapter();
+ }
+ @Override
+ public Adapter caseActionCode(ActionCode object)
+ {
+ return createActionCodeAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object)
+ {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target)
+ {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory <em>Save History</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+ * @generated
+ */
+ public Adapter createSaveHistoryAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory <em>Check History</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+ * @generated
+ */
+ public Adapter createCheckHistoryAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction <em>Entry Action</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction
+ * @generated
+ */
+ public Adapter createEntryActionAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction <em>Exit Action</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction
+ * @generated
+ */
+ public Adapter createExitActionAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction <em>Transition Action</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction
+ * @generated
+ */
+ public Adapter createTransitionActionAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.xtumlrt.common.NamedElement <em>Named Element</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+ * @generated
+ */
+ public Adapter createNamedElementAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrusrt.xtumlrt.common.ActionCode <em>Action Code</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+ * @generated
+ */
+ public Adapter createActionCodeAdapter()
+ {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter()
+ {
+ return null;
+ }
+
+} //SmflatmodelAdapterFactory
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/util/SmflatmodelSwitch.java b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/util/SmflatmodelSwitch.java
new file mode 100644
index 0000000..8617134
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat.model/src/org/eclipse/papyrusrt/codegen/statemachines/flat/model/smflatmodel/util/SmflatmodelSwitch.java
@@ -0,0 +1,262 @@
+/**
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *
+ */
+package org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.*;
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode;
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage
+ * @generated
+ */
+public class SmflatmodelSwitch<T> extends Switch<T>
+{
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static SmflatmodelPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public SmflatmodelSwitch()
+ {
+ if (modelPackage == null)
+ {
+ modelPackage = SmflatmodelPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage)
+ {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject)
+ {
+ switch (classifierID)
+ {
+ case SmflatmodelPackage.SAVE_HISTORY:
+ {
+ SaveHistory saveHistory = (SaveHistory)theEObject;
+ T result = caseSaveHistory(saveHistory);
+ if (result == null) result = caseActionCode(saveHistory);
+ if (result == null) result = caseNamedElement(saveHistory);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case SmflatmodelPackage.CHECK_HISTORY:
+ {
+ CheckHistory checkHistory = (CheckHistory)theEObject;
+ T result = caseCheckHistory(checkHistory);
+ if (result == null) result = caseActionCode(checkHistory);
+ if (result == null) result = caseNamedElement(checkHistory);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case SmflatmodelPackage.ENTRY_ACTION:
+ {
+ EntryAction entryAction = (EntryAction)theEObject;
+ T result = caseEntryAction(entryAction);
+ if (result == null) result = caseActionCode(entryAction);
+ if (result == null) result = caseNamedElement(entryAction);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case SmflatmodelPackage.EXIT_ACTION:
+ {
+ ExitAction exitAction = (ExitAction)theEObject;
+ T result = caseExitAction(exitAction);
+ if (result == null) result = caseActionCode(exitAction);
+ if (result == null) result = caseNamedElement(exitAction);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case SmflatmodelPackage.TRANSITION_ACTION:
+ {
+ TransitionAction transitionAction = (TransitionAction)theEObject;
+ T result = caseTransitionAction(transitionAction);
+ if (result == null) result = caseActionCode(transitionAction);
+ if (result == null) result = caseNamedElement(transitionAction);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Save History</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Save History</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseSaveHistory(SaveHistory object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Check History</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Check History</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseCheckHistory(CheckHistory object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Entry Action</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Entry Action</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseEntryAction(EntryAction object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Exit Action</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Exit Action</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseExitAction(ExitAction object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Transition Action</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Transition Action</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTransitionAction(TransitionAction object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Named Element</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Named Element</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseNamedElement(NamedElement object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Action Code</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Action Code</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseActionCode(ActionCode object)
+ {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object)
+ {
+ return null;
+ }
+
+} //SmflatmodelSwitch
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.classpath b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.classpath
new file mode 100644
index 0000000..248b4c5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.project b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.project
new file mode 100644
index 0000000..183259f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.statemachines.flat</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..33e2392
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT State Machine Generator
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.statemachines.flat;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Export-Package: org.eclipse.papyrusrt.codegen.statemachines.transformations
+Require-Bundle: org.eclipse.papyrus.umlrt;bundle-version="1.0.1",
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.cpp.rts,
+ org.eclipse.papyrusrt.codegen.cpp,
+ org.eclipse.papyrusrt.codegen.lang.cpp,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrusrt.xtumlrt.umlrt.model,
+ org.eclipse.papyrusrt.codegen.statemachines.flat.model,
+ org.eclipse.xtend.lib;bundle-version="2.7.2",
+ org.eclipse.xtext.xbase;bundle-version="2.7.2"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-Vendor: Zeligsoft (2009) Limited
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/about.html b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/about.properties b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/build.properties b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/build.properties
new file mode 100644
index 0000000..9207ee0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/build.properties
@@ -0,0 +1,6 @@
+source.. = xtend-gen/,\
+ src/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/plugin.xml b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/plugin.xml
new file mode 100644
index 0000000..0f315ba
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/plugin.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/pom.xml
new file mode 100644
index 0000000..b57158d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.statemachines.flat</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionDeclarationGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionDeclarationGenerator.xtend
new file mode 100644
index 0000000..7376fa4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionDeclarationGenerator.xtend
@@ -0,0 +1,103 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CastExpr
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.DereferenceExpr
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.UserCode
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GlobalConstants
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+import static extension org.eclipse.papyrusrt.codegen.statemachines.transformations.CppNamesUtil.*
+import org.eclipse.xtend.lib.annotations.Data
+
+/**
+ * This visitor generates function declarations for actions in the state machine.
+ *
+ * @author Ernesto Posse
+ */
+class ActionDeclarationGenerator
+{
+
+ static class Context {}
+
+ @Data static class UserActionContext extends Context
+ {
+ Type rtmessageType
+ Type rtdataType
+ }
+
+ def dispatch visit( SaveHistory action, Context ctx )
+ {
+ //... only one needs to be generated... better in the transformer class
+ }
+
+ def dispatch
+ create
+ func: new MemberFunction( PrimitiveType.VOID, action.funcName.toString )
+ visit( ActionCode action, Context ctx )
+ {
+ val type = (ctx as UserActionContext).rtmessageType
+ val rtdataType = (ctx as UserActionContext).rtdataType
+ var Type genRTdataType
+ if (rtdataType === null)
+ {
+ genRTdataType = PrimitiveType.VOID.ptr()
+ }
+ else
+ {
+ genRTdataType = rtdataType
+ }
+ val param = new Parameter( type, GlobalConstants.ACTION_FUNC_PARAM )
+ val body = new UserCode( action.source ) // TODO figure out dependencies?
+ func.add( param )
+ var Expression initVal =
+ new DereferenceExpr
+ (
+ new CastExpr
+ (
+ genRTdataType.ptr(),
+ UMLRTRuntime.UMLRTInSignal.getPayload(
+ new MemberAccess
+ (
+ new ElementAccess( param ),
+ UMLRTRuntime.UMLRTMessage.signal
+ )
+ )
+ )
+ )
+ // Non-primitive types should be available to the user code as const references.
+ var varType = genRTdataType
+ if ( ! varType.isIndirect()
+ && ! ( varType instanceof PrimitiveType ) )
+ varType = genRTdataType.const_().ref()
+ func.add
+ (
+ new Variable
+ (
+ varType,
+ GlobalConstants.ACTION_DATA_VARIABLE,
+ initVal
+ )
+ )
+ func.add( body )
+ }
+
+}
+
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionInvocationGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionInvocationGenerator.xtend
new file mode 100644
index 0000000..efb84f1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionInvocationGenerator.xtend
@@ -0,0 +1,91 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.FunctionCall
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.ExpressionStatement
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+
+import java.util.Map
+import org.eclipse.xtend.lib.annotations.Data
+
+class ActionInvocationGenerator
+{
+
+ @Data static class Context
+ {
+ MemberFunction func
+ }
+
+ @Data static class UserActionContext extends Context
+ {
+ ElementAccess enclosingFuncParam
+ }
+
+ @Data static class SaveHistoryActionContext extends Context
+ {
+ Map<State, Enumerator> stateEnumerators
+ }
+
+ /**
+ * Creates a call to the history saving action.
+ *
+ * <p> The generated call would be something like:
+ *
+ * <p><pre>
+ * <code>
+ * saveHistory(compositeState, subState);
+ * </code>
+ * </pre>
+ */
+ def dispatch visit( SaveHistory action, Context ctx )
+ {
+ val func = ctx.func
+ val stateEnumerators =
+ (ctx as SaveHistoryActionContext).stateEnumerators
+ val compositeState = stateEnumerators.get( action.compositeState )
+ val subState = stateEnumerators.get( action.subState )
+ new ExpressionStatement
+ (
+ new FunctionCall
+ (
+ func,
+ new ElementAccess( compositeState ),
+ new ElementAccess( subState )
+ )
+ )
+ }
+
+ /**
+ * Creates a call to a user action.
+ *
+ * <p> The generated call would be something like:
+ *
+ * <p><pre>
+ * <code>
+ * entryaction_s1(rtdata);
+ * </code>
+ * </pre>
+ *
+ * where <code>rtdata</code> is an access to the parameter of the enclosing
+ * (calling) action chain function.
+ */
+ def dispatch visit( ActionCode action, Context ctx )
+ {
+ val func = ctx.func
+ val arg = (ctx as UserActionContext).enclosingFuncParam
+ new ExpressionStatement( new FunctionCall( func,arg ) )
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionNameComparator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionNameComparator.xtend
new file mode 100644
index 0000000..d601564
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ActionNameComparator.xtend
@@ -0,0 +1,46 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.util.Comparator
+import org.eclipse.papyrusrt.xtumlrt.common.ActionChain
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.*
+import static extension org.eclipse.papyrusrt.codegen.statemachines.transformations.CppNamesUtil.*
+
+class ActionNameComparator implements Comparator<ActionCode>
+{
+
+ val totalOrder =
+ #[
+ State,
+ ActionChain,
+ ActionCode,
+ Transition
+ ]
+
+ override compare( ActionCode o1, ActionCode o2 )
+ {
+ if (o1 instanceof CheckHistory) return -1
+ if (o1 instanceof SaveHistory) return -1
+ val owner1 = o1.owner
+ val owner2 = o2.owner
+ val pos1 = totalOrder.indexOf(owner1.class)
+ val pos2 = totalOrder.indexOf(owner2.class)
+ if (pos1 == pos2)
+ o1.funcName.toString.compareTo( o2.funcName.toString )
+ else if (pos1 < pos2) -1
+ else 1
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ChainNameComparator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ChainNameComparator.xtend
new file mode 100644
index 0000000..a9c7975
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/ChainNameComparator.xtend
@@ -0,0 +1,24 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.util.Comparator
+import org.eclipse.papyrusrt.xtumlrt.common.ActionChain
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+
+class ChainNameComparator implements Comparator<ActionChain>
+{
+
+ override compare( ActionChain o1, ActionChain o2 )
+ {
+ o1.owner.cachedFullName.compareTo( o2.owner.cachedFullName )
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/CppNamesUtil.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/CppNamesUtil.xtend
new file mode 100644
index 0000000..1e8d0e9
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/CppNamesUtil.xtend
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.CommonPackage
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.State
+
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.*
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelPackage
+
+class CppNamesUtil
+{
+ static def getFuncName( NamedElement element ) '''«element.prefix»«partSep»«element.ffqn»'''
+
+ static def getPartSep() '''«GlobalConstants.FUNC_NAME_PART_SEP»'''
+
+ static def getPrefix( NamedElement element )
+ {
+ switch (element.eClass.classifierID)
+ {
+ case CommonPackage.SIMPLE_STATE: GlobalConstants.SIMPLE_STATE_FUNC_PREFIX
+ case CommonPackage.COMPOSITE_STATE: GlobalConstants.COMPOSITE_STATE_FUNC_PREFIX
+ case CommonPackage.STATE: GlobalConstants.STATE_FUNC_PREFIX
+ case CommonPackage.TRANSITION: GlobalConstants.TRANS_ACTION_FUNC_PREFIX
+ case CommonPackage.CHOICE_POINT: GlobalConstants.CHOICE_FUNC_PREFIX
+ case CommonPackage.JUNCTION_POINT: GlobalConstants.JUNCTION_FUNC_PREFIX
+ case CommonPackage.GUARD: GlobalConstants.GUARD_FUNC_PREFIX
+ case CommonPackage.ACTION_CHAIN: GlobalConstants.ACTION_CHAIN_FUNC_PREFIX
+ case SmflatmodelPackage.ENTRY_ACTION: GlobalConstants.ENTRY_ACTION_FUNC_PREFIX
+ case SmflatmodelPackage.EXIT_ACTION: GlobalConstants.EXIT_ACTION_FUNC_PREFIX
+ case SmflatmodelPackage.TRANSITION_ACTION: GlobalConstants.TRANS_ACTION_FUNC_PREFIX
+ case CommonPackage.ACTION_CODE:
+ {
+ val owner = element.owner
+ switch (owner.eClass.classifierID)
+ {
+ case CommonPackage.STATE:
+ {
+ if (element == (owner as State).entryAction)
+ GlobalConstants.ENTRY_ACTION_FUNC_PREFIX
+ else if (element == (owner as State).exitAction)
+ GlobalConstants.EXIT_ACTION_FUNC_PREFIX
+ else
+ GlobalConstants.ACTION_FUNC_PREFIX
+ }
+ case CommonPackage.ACTION_CHAIN:
+ GlobalConstants.TRANS_ACTION_FUNC_PREFIX
+ default:
+ GlobalConstants.ACTION_FUNC_PREFIX
+ }
+ }
+ default:
+ GlobalConstants.ACTION_FUNC_PREFIX
+ }
+ }
+
+ static def String getFfqn( NamedElement element )
+ {
+ var txt = element.cachedFullSMName.makeValidCName
+ txt.replace( GlobalConstants.QUAL_NAME_SEP, GlobalConstants.FUNC_NAME_QUAL_NAME_SEP )
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/DeepHistoryAdder.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/DeepHistoryAdder.xtend
new file mode 100644
index 0000000..7c918f4
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/DeepHistoryAdder.xtend
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.CommonFactory
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+
+/**
+ * This preprocessor adds a deep history point to every composite state that doesn't have one.
+ * This is needed to ensure the correctness of the flattening transformation.
+ *
+ * <p>It performs the transformation in-place.
+ *
+ * @author Ernesto Posse
+ */
+class DeepHistoryAdder implements InPlaceTransformation
+{
+
+ public static val INSTANCE = new DeepHistoryAdder
+
+ static def boolean applyTransformation
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+ {
+ return INSTANCE.transformInPlace( stateMachine, context )
+ }
+
+ override boolean transformInPlace
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+ {
+ try
+ {
+ visit( stateMachine )
+ return true
+ }
+ catch (Exception e)
+ {
+ CodeGenPlugin.error("[DeepHistoryPreprocessor] error preprocessing state machine", e)
+ return false
+ }
+ }
+
+ dispatch def void visit( StateMachine stateMachine )
+ {
+ if (stateMachine.top !== null)
+ visit( stateMachine.top )
+ }
+
+ dispatch def void visit( CompositeState state )
+ {
+ if (state.deepHistory === null)
+ {
+ state.deepHistory = CommonFactory.eINSTANCE.createDeepHistory
+ }
+ state.substates.forEach[ visit(it) ]
+ }
+
+ dispatch def void visit( SimpleState state )
+ {
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/DepthPreprocessor.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/DepthPreprocessor.xtend
new file mode 100644
index 0000000..51c5546
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/DepthPreprocessor.xtend
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+
+/**
+ * This preprocessor traverses the state machine computing and caching the depth
+ * of state machine elements. This is necessary for resolving the precedence of
+ * transitions during code generation.
+ *
+ * @author Ernesto Posse
+ */
+class DepthPreprocessor
+{
+
+ public static val INSTANCE = new DepthPreprocessor
+
+ static def boolean doCacheAllDepths( StateMachine stateMachine )
+ {
+ return INSTANCE.cacheAllDepths( stateMachine )
+ }
+
+ def boolean cacheAllDepths( StateMachine stateMachine )
+ {
+ try
+ {
+ visit( stateMachine )
+ return true
+ }
+ catch (Exception e)
+ {
+ CodeGenPlugin.error("[QualifiedNamePreprocessor] error preprocessing state machine", e)
+ return false
+ }
+ }
+
+ dispatch def void visit( StateMachine stateMachine )
+ {
+ stateMachine.getCachedDepth
+ if (stateMachine.top !== null)
+ visit( stateMachine.top )
+ }
+
+ dispatch def void visit( SimpleState state )
+ {
+ visitState( state )
+ }
+
+ dispatch def void visit( CompositeState state )
+ {
+ visitState( state )
+ state.initial?.getCachedDepth
+ state.deepHistory.getCachedDepth
+ state.choicePoints.forEach[ it.getCachedDepth ]
+ state.junctionPoints.forEach[ it.getCachedDepth ]
+ state.substates.forEach[ visit(it) ]
+ state.transitions.forEach[ visit(it) ]
+ }
+
+ protected def visitState( State state )
+ {
+ state.getCachedDepth
+ state.entryPoints.forEach[ it.getCachedDepth ]
+ state.exitPoints.forEach[ it.getCachedDepth ]
+ }
+
+ dispatch def void visit( Transition transition )
+ {
+ transition.getCachedDepth
+ transition.triggers.forEach[ it.getCachedDepth ]
+ transition.guard?.getCachedDepth
+ transition.actionChain?.getCachedDepth
+ }
+
+ dispatch def void visit( NamedElement element )
+ {
+ element.getCachedDepth
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/FlatteningTransformer.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/FlatteningTransformer.xtend
new file mode 100644
index 0000000..377f000
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/FlatteningTransformer.xtend
@@ -0,0 +1,84 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.util.Collection
+
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.codegen.utils.QualifiedNames
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+import org.eclipse.papyrusrt.codegen.utils.XTUMLRTElementPrinter
+
+class FlatteningTransformer
+{
+
+ val qualNamesPreProcessor = new QualifiedNamePreprocessor
+ val depthPreProcessor = new DepthPreprocessor
+ val deepHistoryAdder = new DeepHistoryAdder
+ val inheritanceFlattener = new StateMachineInheritanceFlattener
+ val nestingFlattener = new StateNestingFlattener
+
+ def TransformationResult transform( StateMachine stateMachine )
+ {
+ var result = false
+
+ CodeGenPlugin.debug( "State machine before generating:")
+ CodeGenPlugin.debug( [ XTUMLRTElementPrinter.str( stateMachine ) ] )
+
+ // We reset the name counter so that freshly generated names are always
+ // generated deterministically.
+ QualifiedNames.resetCounter
+
+ // We flatten (expand) the inheritance hierarchy
+ val expandedStateMachine = inheritanceFlattener.transform( stateMachine, null )
+ result = expandedStateMachine !== null
+ if (!result) return new TransformationResult( result, expandedStateMachine, null )
+
+ CodeGenPlugin.debug( "State machine after flattening inheritance:")
+ CodeGenPlugin.debug( [ XTUMLRTElementPrinter.str( expandedStateMachine ) ] )
+
+ // We add a deep history pseudostate to every composite state that
+ // doesn't have one. This simplifies the flattening.
+ result = deepHistoryAdder.transformInPlace( expandedStateMachine, null )
+ if (!result) return new TransformationResult( result, expandedStateMachine, null )
+
+ CodeGenPlugin.debug( "State machine after adding history:")
+ CodeGenPlugin.debug( [ XTUMLRTElementPrinter.str( expandedStateMachine ) ] )
+
+ // We also precompute the nesting depth of elements in order to break
+ // ties between transitions enabled in a given state.
+ result = depthPreProcessor.cacheAllDepths( expandedStateMachine )
+ if (!result) return new TransformationResult( result, expandedStateMachine, null )
+
+ // We precompute the fully qualified names for all elements of the
+ // state machine so that they can be used by the C++ generator for the
+ // corresponding C++ methods.
+ result = qualNamesPreProcessor.cacheAllNames( expandedStateMachine )
+ if (!result) return new TransformationResult( result, expandedStateMachine, null )
+
+ CodeGenPlugin.debug( "State machine after caching names:")
+ CodeGenPlugin.debug( [ XTUMLRTElementPrinter.str( expandedStateMachine ) ] )
+
+ // StateNestingFlattener adds all discarded composite states to this
+ // list, so the C++ generator can use it to create enumerators for them
+ var Collection<State> discardedStates = newArrayList
+ val ctx1 = new StateNestingFlattener.FlatteningTransformationContext( discardedStates )
+
+ // Now we do the actual state flattening
+ result = nestingFlattener.transformInPlace( expandedStateMachine, ctx1 )
+ if (!result) return new TransformationResult( result, expandedStateMachine, discardedStates )
+
+ CodeGenPlugin.debug( "State machine after flattening:")
+ CodeGenPlugin.debug( [ XTUMLRTElementPrinter.str( expandedStateMachine ) ] )
+
+ return new TransformationResult( result, expandedStateMachine, discardedStates )
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/FunctionalTransformation.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/FunctionalTransformation.xtend
new file mode 100644
index 0000000..68c9501
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/FunctionalTransformation.xtend
@@ -0,0 +1,25 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+
+/**
+ * This is the interface for transformations on StateMachines that perform their
+ * task in a functional way, i.e., do not modify the input state machine in-place,
+ * but create a new one from the given input.
+ */
+interface FunctionalTransformation
+{
+ def StateMachine transform
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GeneratorException.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GeneratorException.xtend
new file mode 100644
index 0000000..92246b8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GeneratorException.xtend
@@ -0,0 +1,18 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.lang.Exception
+
+class GeneratorException extends Exception {
+
+ new(String msg) {
+ super(msg)
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GlobalConstants.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GlobalConstants.xtend
new file mode 100644
index 0000000..818fa83
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GlobalConstants.xtend
@@ -0,0 +1,59 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+class GlobalConstants
+{
+ public static val QUAL_NAME_SEP = "."
+ public static val FUNC_NAME_QUAL_NAME_SEP = "__"
+ public static val FUNC_NAME_PART_SEP = "____"
+ public static val INJECT_FUNC_NAME = "inject"
+ public static val INITIALIZE_FUNC_NAME = "initialize"
+ public static val STATE_FUNC_PREFIX = "state_"
+ public static val SIMPLE_STATE_FUNC_PREFIX = "state_"
+ public static val COMPOSITE_STATE_FUNC_PREFIX = "state_"
+ public static val JUNCTION_FUNC_PREFIX = "junction_"
+ public static val CHOICE_FUNC_PREFIX = "choice_"
+ public static val ACTION_CHAIN_FUNC_PREFIX = "actionchain_"
+ public static val ACTION_FUNC_PREFIX = "action_"
+ public static val GUARD_FUNC_PREFIX = "guard_"
+ public static val USER_ACTION_FUNC_PREFIX = "useraction_"
+ public static val USER_GUARD_FUNC_PREFIX = "userguard_"
+ public static val EXIT_ACTION_FUNC_PREFIX = "exitaction_"
+ public static val ENTRY_ACTION_FUNC_PREFIX = "entryaction_"
+ public static val TRANS_ACTION_FUNC_PREFIX = "transitionaction_"
+ public static val SAVE_HISTORY_FUNC_NAME = "save_history"
+ public static val CHECK_HISTORY_FUNC_NAME = "check_history"
+ public static val CHECK_HISTORY_FUNC_PREFIX = "checkhistory_"
+ public static val CURRENT_STATE_FIELD_NAME = "currentState"
+ public static val HISTORY_TABLE_NAME = "history"
+ public static val UNDEFINED = "SPECIAL_INTERNAL_STATE_UNDEFINED"
+ public static val UNVISITED = "SPECIAL_INTERNAL_STATE_UNVISITED"
+ public static val STATE_TYPE_NAME = "State"
+ public static val PORT_TYPE_NAME = "Port"
+ public static val SIGNAL_TYPE_NAME = "Signal"
+ public static val INJECT_FUNC_PARAM = "msg"
+ public static val INITIALIZE_FUNC_PARAM = "msg"
+ public static val STATE_FUNC_PARAM = "msg"
+ public static val JUNC_FUNC_PARAM = "msg"
+ public static val CHOICE_FUNC_PARAM = "msg"
+ public static val CHAIN_FUNC_PARAM = "msg"
+ public static val ACTION_FUNC_PARAM = "msg"
+ public static val ACTION_DATA_VARIABLE = "rtdata"
+ public static val EMPTY_ACTION_COMMENT = "// (Automatically generated stub for an empty action)"
+ public static val MISSING_CODE_COMMENT = "// (No C++ code found for this action)"
+ public static val MISSING_CONSTRAINT_BODY = "false"
+ public static val FRESH_NAME_PREFIX = "new_"
+ public static val FRESH_ENTRYPOINT_NAME_PREFIX = "new_entrypoint_"
+ public static val FRESH_EXITPOINT_NAME_PREFIX = "new_exitpoint_"
+ public static val FRESH_CHOICEPOINT_NAME_PREFIX = "new_choice_"
+ public static val FRESH_JUNCTIONPOINT_NAME_PREFIX = "new_junction_"
+ public static var FRESH_TRANSITION_NAME_PREFIX = "new_transition_"
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardDeclarationGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardDeclarationGenerator.xtend
new file mode 100644
index 0000000..1790934
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardDeclarationGenerator.xtend
@@ -0,0 +1,99 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.codegen.lang.cpp.Expression
+import org.eclipse.papyrusrt.codegen.lang.cpp.Type
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Parameter
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.PrimitiveType
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Variable
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.CastExpr
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.DereferenceExpr
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.MemberFunctionCall
+import org.eclipse.papyrusrt.codegen.lang.cpp.stmt.UserCode
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GlobalConstants
+import org.eclipse.papyrusrt.codegen.cpp.rts.UMLRTRuntime
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+import static extension org.eclipse.papyrusrt.codegen.statemachines.transformations.CppNamesUtil.*
+
+import org.eclipse.xtend.lib.annotations.Data
+
+/**
+ * This visitor generates function declarations for guards in the state machine.
+ *
+ * @author Ernesto Posse
+ */
+class GuardDeclarationGenerator
+{
+
+ static class Context
+ {
+ }
+
+ @Data static class UserGuardContext extends Context
+ {
+ Type rtmessageType
+ Type rtdataType
+ }
+
+ def dispatch
+ create func: new MemberFunction( PrimitiveType.BOOL, guard.funcName.toString )
+ visit( Guard guard, Context ctx )
+ {
+ val type = (ctx as UserGuardContext).rtmessageType
+ val rtdataType = (ctx as UserGuardContext).rtdataType
+ var Type genRTdataType
+ if (rtdataType === null)
+ {
+ genRTdataType = PrimitiveType.VOID.ptr()
+ }
+ else
+ {
+ genRTdataType = rtdataType
+ }
+ val param = new Parameter( type, GlobalConstants.ACTION_FUNC_PARAM )
+ val body = new UserCode ( guard.body.source ) // TODO figure out dependencies?
+ func.add( param )
+ var Expression initVal =
+ new DereferenceExpr
+ (
+ new CastExpr
+ (
+ genRTdataType.ptr(),
+ UMLRTRuntime.UMLRTInSignal.getPayload(
+ new MemberAccess
+ (
+ new ElementAccess(param),
+ UMLRTRuntime.UMLRTMessage.signal
+ )
+ )
+ )
+ )
+ // Non-primitive types should be available to the user code as const references.
+ var varType = genRTdataType
+ if ( ! varType.isIndirect()
+ && ! ( varType instanceof PrimitiveType ) )
+ varType = genRTdataType.const_().ref()
+ func.add
+ (
+ new Variable
+ (
+ varType,
+ GlobalConstants.ACTION_DATA_VARIABLE,
+ initVal
+ )
+ )
+ func.add( body )
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardInvocationGenerator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardInvocationGenerator.xtend
new file mode 100644
index 0000000..02e7900
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardInvocationGenerator.xtend
@@ -0,0 +1,86 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.xtend.lib.annotations.Data
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.MemberFunction
+import org.eclipse.papyrusrt.codegen.lang.cpp.element.Enumerator
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.ElementAccess
+import org.eclipse.papyrusrt.codegen.lang.cpp.expr.FunctionCall
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+import java.util.Map
+
+class GuardInvocationGenerator
+{
+
+ @Data static class Context
+ {
+ MemberFunction func
+ }
+
+ @Data static class UserGuardContext extends Context
+ {
+ ElementAccess enclosingFuncParam
+ }
+
+ @Data static class CheckHistoryGuardContext extends Context
+ {
+ Map<State, Enumerator> stateEnumerators
+ }
+
+ /**
+ * Creates a call to the history checking guard.
+ *
+ * <p> The generated call would be something like:
+ *
+ * <p><pre>
+ * <code>
+ * check_history(compositeState, subState);
+ * </code>
+ * </pre>
+ */
+ def dispatch visit( CheckHistory guard, Context ctx )
+ {
+ val func = ctx.func
+ val stateEnumerators =
+ (ctx as CheckHistoryGuardContext).stateEnumerators
+ val compositeState = stateEnumerators.get( guard.compositeState )
+ val subState = stateEnumerators.get( guard.subState )
+ new FunctionCall
+ (
+ func,
+ new ElementAccess( compositeState ),
+ new ElementAccess( subState )
+ )
+ }
+
+ /**
+ * Creates a call to a user guard.
+ *
+ * <p> The generated call would be something like:
+ *
+ * <p><pre>
+ * <code>
+ * guard_g1(rtdata);
+ * </code>
+ * </pre>
+ *
+ * where <code>rtdata</code> is an access to the parameter of the enclosing
+ * (calling) action chain function.
+ */
+ def dispatch visit( Guard guard, Context ctx )
+ {
+ val func = ctx.func
+ val arg = (ctx as UserGuardContext).enclosingFuncParam
+ new FunctionCall(func,arg)
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardNameComparator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardNameComparator.xtend
new file mode 100644
index 0000000..926294c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/GuardNameComparator.xtend
@@ -0,0 +1,25 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.util.Comparator
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.CheckHistory
+import static extension org.eclipse.papyrusrt.codegen.statemachines.transformations.CppNamesUtil.*
+
+class GuardNameComparator implements Comparator<Guard>
+{
+
+ override compare( Guard g1, Guard g2 )
+ {
+ if (g1 instanceof CheckHistory) return -1
+ g1.funcName.toString.compareTo( g2.funcName.toString )
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/InPlaceTransformation.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/InPlaceTransformation.xtend
new file mode 100644
index 0000000..4813a49
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/InPlaceTransformation.xtend
@@ -0,0 +1,24 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+
+/**
+ * This is the interface for transformations on StateMachines which perform
+ * their task in-place.
+ */
+interface InPlaceTransformation
+{
+ def boolean transformInPlace
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/QualifiedNamePreprocessor.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/QualifiedNamePreprocessor.xtend
new file mode 100644
index 0000000..e2910c9
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/QualifiedNamePreprocessor.xtend
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+
+/**
+ * This visitor goes through the state machine before flattening to pre-compute the fully
+ * qualified names of all elements. This is needed because the flattening process changes, by
+ * definition the containment relationships and therefore the qualified names of elements, but
+ * the original qualified names are needed to disambiguate element in the generated code.
+ *
+ * <p>This performs the computation only for the elements whose original fully qualified names
+ * are needed by the generator: vertices (both states and pseudostates), transitions, triggers,
+ * guards and actions.
+ *
+ * <p> This is implemented as a simple visitor on state machine elements which invokes the
+ * {@link org.eclipse.papyrusrt.codegen.utils.QualifiedNames.cachedFullName} method on each element.
+ * Since that method caches the name, subsequent invocations of that method in the generator,
+ * will return the original qualified name.
+ *
+ * @author Ernesto Posse
+ */
+class QualifiedNamePreprocessor
+{
+
+ public static val INSTANCE = new QualifiedNamePreprocessor
+
+ static def boolean doCacheAllNames( StateMachine stateMachine )
+ {
+ return INSTANCE.cacheAllNames( stateMachine )
+ }
+
+ def boolean cacheAllNames( StateMachine stateMachine )
+ {
+ try
+ {
+ visit( stateMachine )
+ return true
+ }
+ catch (Exception e)
+ {
+ CodeGenPlugin.error("[QualifiedNamePreprocessor] error preprocessing state machine", e)
+ return false
+ }
+ }
+
+ dispatch def void visit( StateMachine stateMachine )
+ {
+ stateMachine.cachedFullName
+ if (stateMachine.top !== null)
+ visit( stateMachine.top )
+ }
+
+ dispatch def void visit( CompositeState state )
+ {
+ visitState( state )
+ state.initial?.cachedFullSMName
+ state.deepHistory?.cachedFullSMName
+ state.choicePoints.forEach[ it.cachedFullSMName ]
+ state.junctionPoints.forEach[ it.cachedFullSMName ]
+ state.substates.forEach[ visit(it) ]
+ state.transitions.forEach[ visit(it) ]
+ }
+
+ dispatch def void visit( SimpleState state )
+ {
+ visitState( state )
+ }
+
+ protected def void visitState( State state )
+ {
+ state.cachedFullSMName
+ state.entryPoints.forEach[ it.cachedFullSMName ]
+ state.exitPoints.forEach[ it.cachedFullSMName ]
+ }
+
+ dispatch def void visit( Transition transition )
+ {
+ transition.cachedFullSMName
+ transition.triggers.forEach[ it.cachedFullSMName ]
+ transition.guard?.cachedFullSMName
+ transition.actionChain?.cachedFullSMName
+ }
+
+ dispatch def void visit( NamedElement element )
+ {
+ element?.cachedFullSMName
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/StateMachineInheritanceFlattener.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/StateMachineInheritanceFlattener.xtend
new file mode 100644
index 0000000..c81b17b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/StateMachineInheritanceFlattener.xtend
@@ -0,0 +1,258 @@
+/**
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ */
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionChain
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import org.eclipse.papyrusrt.xtumlrt.common.CommonFactory
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.DeepHistory
+import org.eclipse.papyrusrt.xtumlrt.common.EntryPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ExitPoint
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.xtumlrt.common.InitialPoint
+import org.eclipse.papyrusrt.xtumlrt.common.JunctionPoint
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.Parameter
+import org.eclipse.papyrusrt.xtumlrt.common.Port
+import org.eclipse.papyrusrt.xtumlrt.common.Pseudostate
+import org.eclipse.papyrusrt.xtumlrt.common.Signal
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPort
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTTrigger
+import org.eclipse.papyrusrt.xtumlrt.umlrt.UmlrtFactory
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTSMVirtualInheritanceExtensions.*
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelFactory
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.EntryAction
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.ExitAction
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.TransitionAction
+
+/**
+ * This class provides a function to transform a state machine into an
+ * equivalent state machine where the inheritance relation has been flattened.
+ *
+ * @author Ernesto Posse
+ */
+class StateMachineInheritanceFlattener implements FunctionalTransformation
+{
+
+ override StateMachine transform
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+ {
+ getExpanded( stateMachine ) as StateMachine
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createStateMachine
+ getExpanded( StateMachine stateMachine )
+ {
+ name = stateMachine.name
+ top = getExpanded( stateMachine.top ) as CompositeState
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createSimpleState
+ getExpanded( SimpleState state )
+ {
+ expandConnectionPoints( state, it )
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createCompositeState
+ getExpanded( CompositeState state )
+ {
+ expandConnectionPoints( state, it )
+ val init = state.actualInitialPoint
+ if (init !== null)
+ initial = getExpanded( init ) as InitialPoint
+ if (deepHistory !== null)
+ deepHistory = getExpanded( state.actualDeepHistory ) as DeepHistory
+ choicePoints .addAll( state.allChoicePoints. map [ getExpanded( it ) as ChoicePoint ] )
+ junctionPoints .addAll( state.allJunctionPoints. map [ getExpanded( it ) as JunctionPoint ] )
+ substates .addAll( state.allSubstates. map [ getExpanded( it ) as State ] )
+ transitions .addAll( state.allTransitions. map [ getExpanded( it, state ) as Transition ] )
+ }
+
+ private def void expandConnectionPoints( State oldState, State newState )
+ {
+ newState.name = oldState.name
+ newState.entryPoints .addAll( oldState.allEntryPoints. map [ getExpanded( it ) as EntryPoint ] )
+ newState.exitPoints .addAll( oldState.allExitPoints. map [ getExpanded( it ) as ExitPoint ] )
+ newState.entryAction = if (oldState.entryAction !== null) getActionCodeCopy( oldState.entryAction )
+ newState.exitAction = if (oldState.exitAction !== null) getActionCodeCopy( oldState.exitAction )
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createInitialPoint
+ getExpanded( InitialPoint initialPoint )
+ {
+ name = initialPoint.name
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createDeepHistory
+ getExpanded( DeepHistory deepHistory )
+ {
+ name = deepHistory.name
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createChoicePoint
+ getExpanded( ChoicePoint choicePoint )
+ {
+ name = choicePoint.name
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createJunctionPoint
+ getExpanded( JunctionPoint junctionPoint )
+ {
+ name = junctionPoint.name
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createEntryPoint
+ getExpanded( EntryPoint entryPoint )
+ {
+ name = entryPoint.name
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createExitPoint
+ getExpanded( ExitPoint exitPoint )
+ {
+ name = exitPoint.name
+ }
+
+ dispatch def NamedElement getExpanded( Pseudostate pseudostate )
+ {
+ }
+
+ dispatch def NamedElement
+ create CommonFactory.eINSTANCE.createTransition
+ getExpanded( Transition transition, CompositeState container )
+ {
+ name = transition.name
+ val sourceInContainer = transition.getTransitionSourceInState( container as CompositeState )
+ val targetInContainer = transition.getTransitionTargetInState( container as CompositeState )
+ sourceVertex = getExpanded( sourceInContainer ) as Vertex
+ targetVertex = getExpanded( targetInContainer ) as Vertex
+ triggers.addAll( transition.triggers )
+ guard = transition.guard
+ actionChain = transition.actionChain
+ }
+
+ def RTTrigger
+ create UmlrtFactory.eINSTANCE.createRTTrigger
+ getTriggerCopy( RTTrigger trigger )
+ {
+ name = trigger.name
+ ports.addAll( trigger.ports )
+ signal = getSignalCopy( trigger.signal )
+ }
+
+ def Guard
+ create CommonFactory.eINSTANCE.createGuard
+ getGuardCopy( Guard guard )
+ {
+ name = guard.name
+ body = getActionCodeCopy( guard.body )
+ }
+
+ def NamedElement
+ create CommonFactory.eINSTANCE.createActionChain
+ getActionChainCopy( ActionChain actionChain )
+ {
+ name = actionChain.name
+ actions.addAll( actionChain.actions.map [ getActionCodeCopy( it ) as ActionCode ] )
+ }
+
+ dispatch def ActionCode
+ create CommonFactory.eINSTANCE.createActionCode
+ getActionCodeCopy( ActionCode action )
+ {
+ name = action.name
+ source = action.source
+ }
+
+ dispatch def ActionCode
+ create SmflatmodelFactory.eINSTANCE.createEntryAction
+ getActionCodeCopy( EntryAction action )
+ {
+ name = action.name
+ source = action.source
+ }
+
+ dispatch def ActionCode
+ create SmflatmodelFactory.eINSTANCE.createExitAction
+ getActionCodeCopy( ExitAction action )
+ {
+ name = action.name
+ source = action.source
+ }
+
+ dispatch def ActionCode
+ create SmflatmodelFactory.eINSTANCE.createTransitionAction
+ getActionCodeCopy( TransitionAction action )
+ {
+ name = action.name
+ source = action.source
+ }
+
+
+ def Port
+ create CommonFactory.eINSTANCE.createPort
+ getPortCopy( Port port )
+ {
+ name = port.name
+ conjugate = port.conjugate
+ type = port.type
+ }
+
+ def RTPort
+ create UmlrtFactory.eINSTANCE.createRTPort
+ getRTPortCopy( RTPort port )
+ {
+ name = port.name
+ conjugate = port.conjugate
+ type = port.type
+ notification = port.notification
+ publish = port.publish
+ wired = port.wired
+ registration = port.registration
+ registrationOverride = port.registrationOverride
+ }
+
+ def Signal
+ create CommonFactory.eINSTANCE.createSignal
+ getSignalCopy( Signal signal )
+ {
+ name = signal.name
+ parameters.addAll( signal.parameters.map [ getParameterCopy( it ) ] )
+ }
+
+ def Parameter
+ create CommonFactory.eINSTANCE.createParameter
+ getParameterCopy( Parameter parameter )
+ {
+ name = parameter.name
+ type = parameter.type
+ direction = parameter.direction
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/StateNestingFlattener.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/StateNestingFlattener.xtend
new file mode 100644
index 0000000..b92a18d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/StateNestingFlattener.xtend
@@ -0,0 +1,673 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.xtumlrt.common.ActionChain
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.CommonFactory
+import org.eclipse.papyrusrt.xtumlrt.common.DeepHistory
+import org.eclipse.papyrusrt.xtumlrt.common.EntryPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ExitPoint
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.xtumlrt.common.Pseudostate
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SaveHistory
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelFactory
+import org.eclipse.papyrusrt.codegen.statemachines.transformations.GlobalConstants
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTSMVirtualInheritanceExtensions.*
+import java.util.Collection
+import java.util.HashSet
+import java.util.Set
+import org.eclipse.xtend.lib.annotations.Data
+import org.eclipse.emf.ecore.util.EcoreUtil
+
+/**
+ * This class contains the transformation for flattening UML-RT state machines
+ *
+ * It implements the algorithms described in the technical report
+ *
+ * E. Posse. "Flattening UML-RT State Machines".
+ * Technical Report ZTR-2014-EP-001, Version 2, Zeligsoft, Sep 2014.
+ *
+ * @author eposse
+ */
+class StateNestingFlattener implements InPlaceTransformation
+{
+
+ @Data static class FlatteningTransformationContext implements TransformationContext
+ {
+ Collection<State> discardedStates
+ }
+
+ var Collection<State> discardedStates
+
+ public static val UNVISITED = CommonFactory.eINSTANCE.createSimpleState
+
+ var freshNameCounter = 0
+ var freshEntryPointNameCounter = 0
+ var freshExitPointNameCounter = 0
+ var freshChoicePointNameCounter = 0
+ var freshJunctionPointNameCounter = 0
+ var freshTransitionNameCounter = 0
+
+ new ()
+ {
+ UNVISITED.name = GlobalConstants.UNVISITED
+ }
+
+ /**
+ * Flattens a UML-RT state machine, removing composite states, and making
+ * explicit transitions implied by group transitions, history points and
+ * initial points.
+ *
+ * This is the 'main' method of the transformer. It performs the
+ * transformation in-place.
+ *
+ * @param m a {@link StateMachine}
+ * @return the flat {@link StateMachine} m with all composite states, group
+ * transitions, history and initial pseudo-states removed.
+ */
+ override boolean transformInPlace
+ (
+ StateMachine stateMachine,
+ TransformationContext context
+ )
+ {
+ if (stateMachine === null
+ || context === null
+ || !(context instanceof FlatteningTransformationContext))
+ return false
+ this.discardedStates = (context as FlatteningTransformationContext).discardedStates
+ try
+ {
+ phase1( stateMachine )
+ phase2( stateMachine )
+ return true
+ }
+ catch (Exception e)
+ {
+ CodeGenPlugin.error("[Flattener] error during state machine flattening", e)
+ return false
+ }
+ }
+
+ /**
+ * Makes explicit transitions implied by group transitions, history points
+ * and initial points.
+ */
+ protected def phase1( StateMachine m )
+ {
+ val states = m.top?.getAllSubstates
+ if (states === null) return;
+ for (State s: states)
+ {
+ phase1ProcessState( s )
+ }
+ }
+
+ /**
+ * Creates entry transitions for incoming arrows ending at the composite
+ * state's boundary or history pseudo-state. Creates exit transitions
+ * implied by group transitions.
+ */
+ protected def void phase1ProcessState( State state )
+ {
+ moveEntryActionsToIncomingTransitions( state )
+ moveExitActionsToOutgoingTransitions( state )
+ if (state instanceof CompositeState)
+ {
+ // Deal with incoming transitions
+ redirectIncomingTransitionsToHistory( state )
+ replaceHistoryPoint( state )
+ removeInitialTransition( state )
+ // Deal with outgoing transitions
+ annotateExplicitExitTransitions( state )
+ createExitPoints( state )
+ createExitTransitions( state )
+ // Process sub-states
+ for (subState: state.substates)
+ {
+ phase1ProcessState( subState )
+ }
+ }
+ }
+
+ /**
+ * Appends the state's entry action to each (direct or indirect) incoming transition which
+ * is not owned by the state.
+ */
+ protected def moveEntryActionsToIncomingTransitions( State state )
+ {
+ for (t : state.allIncomingTransitions)
+ {
+ val owner = t.ownerState
+ if ( owner !== null && owner != state && state.entryAction !== null)
+ {
+ t.actionChain.addLastAction( state.entryAction )
+ }
+ }
+ }
+
+ /**
+ * Prepends the state's exit action to each (direct or indirect) outgoing transition which
+ * is not owned by the state.
+ */
+ protected def moveExitActionsToOutgoingTransitions( State state )
+ {
+ for (t : state.allOutgoingTransitions)
+ {
+ val owner = t.ownerState
+ if ( owner !== null && owner != state && state.exitAction !== null)
+ {
+ t.actionChain.addFirstAction( state.exitAction )
+ }
+ }
+ }
+
+ /**
+ * We redirect all incoming transitions to the composite state's deep history pseudostate.
+ *
+ * <p>There are several possible incoming transitions:
+ *
+ * <p><ul>
+ * <li> Direct incoming transitions from the outside ending at the state's boundary
+ * <li> Direct incoming transitions from the inside ending at the state's boundary
+ * <li> Indirect incoming transitions from outside the state ending in an entry point
+ * without continuation
+ * <li> Indirect incoming transitions from inside the state ending in an exit point
+ * without continuation
+ * </ul>
+ *
+ * <p> When redirecting indirect incoming transitions, it also removes the connection point.
+ *
+ * <p>To guarantee the semantics specified in the profile we assume that the preprocessor has
+ * created a {@link DeepHistory} element even for composite states that didn't have one.
+ */
+ protected def redirectIncomingTransitionsToHistory( CompositeState state )
+ {
+ for (t : state.allDirectIncomingTransitions)
+ {
+ t.targetVertex = state.deepHistory // This will be null if the preprocessor failed to create the DeepHistory point for the state.
+ }
+ for (p : state.allConnectionPoints)
+ {
+ if (p.allDirectOutgoingTransitions.isEmpty)
+ {
+ for (t : p.allDirectIncomingTransitions)
+ {
+ t.targetVertex = state.deepHistory
+ }
+ state.removeConnectionPoint(p)
+ }
+ }
+ }
+
+ /**
+ * Replaces the (deep)history pseudo-state with a choice point with transitions
+ * to each sub-state with conditions checking the value of the history table
+ * entry for this composite-state.
+ */
+ protected def ChoicePoint replaceHistoryPoint(CompositeState state) {
+ // Create new choice point.
+ val c = CommonFactory.eINSTANCE.createChoicePoint
+ c.name = "deephistory"
+ state.addChoicePoint(c)
+ c.cachedFullSMName // Cache the fully qualified name for code generation
+ // Redirect all transitions ending in the history pseudo-state to the
+ // new choice point.
+ if (state.hasDeepHistory)
+ {
+ for (Transition t: state.deepHistory.allDirectIncomingTransitions)
+ {
+ t.targetVertex = c
+ }
+ }
+ // Create transitions from the choice point to each sub-state with the
+ // appropriate guard.
+ for (State subState: state.allSubstates)
+ {
+ var Vertex targetVertex
+ if (subState instanceof SimpleState)
+ targetVertex = subState
+ else
+ {
+ val targetComposite = subState as CompositeState
+ if (targetComposite.hasDeepHistory)
+ targetVertex = targetComposite.deepHistory
+ else
+ targetVertex = targetComposite
+ }
+ val newTransition = CommonFactory.eINSTANCE.createTransition
+ newTransition.name = newFreshTransitionName
+ newTransition.sourceVertex = c
+ newTransition.targetVertex = targetVertex
+ newTransition.guard = makeCheckHistoryGuard( state, subState )
+ newTransition.actionChain = CommonFactory.eINSTANCE.createActionChain
+ state.addTransition( newTransition )
+ newTransition.cachedFullSMName
+ newTransition.actionChain.cachedFullSMName
+ }
+ // If there was an initial pseudo-state, create a transition from the
+ // choice point to the initial state where the guard will be true if
+ // the composite state has not been visited before.
+ if (state.hasInitial && !state.initial.allDirectOutgoingTransitions.isEmpty)
+ {
+ // There should be exactly one initial transition
+ val initialTransition = state.initial.allDirectOutgoingTransitions.get(0)
+ val newTransition = CommonFactory.eINSTANCE.createTransition
+ newTransition.name = newFreshTransitionName
+ newTransition.sourceVertex = c
+ newTransition.targetVertex = initialTransition.targetVertex
+ newTransition.triggers.addAll( initialTransition.triggers )
+ newTransition.guard = makeCheckHistoryGuard( state, UNVISITED )
+ newTransition.actionChain = initialTransition.actionChain.copyActionChain
+ state.addTransition( newTransition )
+ newTransition.cachedFullSMName
+ newTransition.actionChain.cachedFullSMName
+ }
+ // If there was no initial pseudo-state, create a 'dummy' simple state
+ // representing "staying at the boundary", and create a transition from
+ // the choice point to this dummy state, where the guard is true if
+ // the state has not been visited before.
+ else
+ {
+ // The name should be different name because one of the sub-states
+ // may have the same name as the composite.
+ val border = CommonFactory.eINSTANCE.createSimpleState
+ border.name = "boundary"
+ border.entryAction = state.entryAction
+ border.exitAction = state.exitAction
+ // TODO: check if we need to add also the original state's connection points and
+ // their incoming and outgoing transitions.
+ state.addSubstate( border )
+ border.cachedFullSMName
+ val newTransition = CommonFactory.eINSTANCE.createTransition
+ newTransition.name = newFreshTransitionName + "_to_" + border.name
+ newTransition.sourceVertex = c
+ newTransition.targetVertex = border
+ newTransition.guard = makeCheckHistoryGuard( state, UNVISITED )
+ newTransition.actionChain = CommonFactory.eINSTANCE.createActionChain
+ state.addTransition( newTransition )
+ newTransition.cachedFullSMName
+ newTransition.actionChain.cachedFullSMName
+ }
+ // Remove the history pseudo-state.
+ state.removeDeepHistory
+ return c
+ }
+
+ /**
+ * Remove the initial pseudo-state and transition.
+ */
+ protected def removeInitialTransition( CompositeState state )
+ {
+ if (state.hasInitial)
+ {
+ if (state.initial.allDirectOutgoingTransitions.isEmpty)
+ {
+ state.removeInitial
+ }
+ else if (state.initial.allDirectIncomingTransitions.isEmpty)
+ {
+ val initialTransition = state.initial.allDirectOutgoingTransitions.get(0) // There should be exactly one initial transition
+ state.removeTransition( initialTransition )
+ //initialTransition.targetVertex.directIncomingTransitions.remove( initialTransition ) // TODO: this might not be enough if the initial transition ends in a pseudo-state
+ state.removeInitial
+ }
+ }
+ }
+
+ /**
+ * Annotate explicit exit transitions (transitions from a sub-state to an
+ * exit point) with a "history saving action", an action that sets the
+ * history table entry for the composite state according to the sub-state
+ * that is exited.
+ */
+ // TODO: we probably need to do this also with transitions owned by the composite state which end in the deep history point.
+ protected def annotateExplicitExitTransitions( CompositeState state )
+ {
+ for (ExitPoint p: state.allExitPoints)
+ {
+ if (!p.allDirectIncomingTransitions.isEmpty)
+ {
+ for (Transition t: getExitingTransitionsFromSubstates(p))
+ {
+ val savingAction = makeSaveHistoryAction( state, t.sourceState )
+ t.actionChain.addLastAction( savingAction )
+ }
+ }
+ }
+ }
+
+ /**
+ * Computes the set of outgoing transitions from sub-states which are the
+ * first transition segment of a transition chain ending in the given exit
+ * point.
+ *
+ * This function must work backwards searching for the states which are
+ * "points of departure".
+ *
+ * The method caches previous results to speed up the operation when a given
+ * exit point is queried several times.
+ *
+ * The search algorithm used is DFS (depth-first search).
+ */
+ protected def
+ create set: new HashSet<Transition>
+ getExitingTransitionsFromSubstates( ExitPoint point )
+ {
+ val explorer = new ExitingTransitionDiscoverer(set)
+ explorer.dfs(point)
+ }
+
+ static class ExitingTransitionDiscoverer
+ {
+
+ val Set<Pseudostate> visitedPseudostates = newLinkedHashSet
+ var Set<Transition> exitingTransitions
+
+ new (HashSet<Transition> transitions)
+ {
+ exitingTransitions = transitions
+ }
+
+ def void dfs( Pseudostate p )
+ {
+ visitedPseudostates.add( p )
+ for (trans : p.allDirectIncomingTransitions)
+ {
+ val source = trans.sourceVertex
+ if ( source instanceof State || source instanceof ExitPoint )
+ {
+ exitingTransitions.add(trans)
+ }
+ else if ( !visitedPseudostates.contains( source ) )
+ {
+ dfs( source as Pseudostate )
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Create exit points for each direct outgoing transition (transition leaving
+ * directly from the composite state's boundary).
+ */
+ protected def createExitPoints( CompositeState state )
+ {
+ for (Transition t: state.allDirectOutgoingTransitions)
+ {
+ val p = CommonFactory.eINSTANCE.createExitPoint
+ p.name = newFreshExitPointName
+ state.addExitPoint( p )
+ p.cachedFullSMName
+ t.sourceVertex = p
+ }
+ }
+
+ /**
+ * Create explicit exit transitions implied by group transitions. For each
+ * group transition creates a transition from every sub-state to the
+ * group-transitions's source exit point. It annotates these transitions
+ * with a "history saving action", an action which stores the sub-state
+ * in the history table entry for this composite state.
+ */
+ protected def createExitTransitions( CompositeState state )
+ {
+ // Iterate over exit points, looking for group transitions.
+ for (ExitPoint p: state.allExitPoints)
+ {
+ // If the exit point doesn't have incoming transitions then there
+ // is at least one group transition from it.
+ if (p.allDirectIncomingTransitions.isEmpty)
+ {
+ // Create explicit transitions from every sub-state to this
+ // exit point...
+ for (State subState: state.allSubstates)
+ {
+ // ...for each group transition leaving the exit point.
+ for (Transition t: p.allDirectOutgoingTransitions)
+ {
+ // Create the history saving action.
+ val savingAction = makeSaveHistoryAction( state, subState )
+ // Append the history saving action and the state's
+ // exit action.
+ val newChain = CommonFactory.eINSTANCE.createActionChain
+ newChain.addLastAction( savingAction )
+ val newTransition = CommonFactory.eINSTANCE.createTransition
+ newTransition.name = newFreshTransitionName
+ newTransition.sourceVertex = subState
+ newTransition.targetVertex = p
+ newTransition.triggers.addAll( EcoreUtil.copyAll( t.triggers ) )
+ newTransition.guard = t.guard
+ newTransition.actionChain = newChain
+// newTransition.nestingDepth = t.nestingDepth
+ state.addTransition( newTransition )
+ newTransition.cachedFullSMName
+ newChain.cachedFullSMName
+ }
+ }
+ // Remove the trigger and guard from the old group transition,
+ // but leave the transition.
+ // TODO: we must replace the direct group transition with an indirect group transition leaving from the exit point
+ for (Transition t: p.allDirectOutgoingTransitions)
+ {
+ t.removeTriggers
+ t.removeGuard
+ }
+ }
+ }
+ }
+
+ /**
+ * Qualifies names and removes composite states.
+ */
+ protected def void phase2( StateMachine m )
+ {
+ val states = m.top?.getAllSubstates
+ if (states === null) return;
+ for (State s: states.clone)
+ {
+ phase2ProcessState( s )
+ if (s instanceof CompositeState)
+ {
+ m.moveContents( s )
+ discardedStates.add( s )
+ m.removeState( s )
+ }
+ }
+ }
+
+ /**
+ * Removes entry and exit points of a simple state, making all transitions
+ * to and from it, direct.
+ */
+ protected def dispatch void phase2ProcessState( SimpleState state )
+ {
+ state.name = state.cachedFullSMName
+ for (Transition t: state.allIndirectIncomingTransitions)
+ {
+ t.targetVertex = state // TODO: Potential problem: depending on the set implementation we may be modifying the iterator
+ }
+ for (Transition t: state.allOutgoingTransitions)
+ {
+ t.sourceVertex = state
+ }
+ for (EntryPoint p: state.allEntryPoints)
+ {
+ state.removeEntryPoint( p )
+ }
+ for (ExitPoint p: state.allExitPoints)
+ {
+ state.removeExitPoint( p )
+ }
+ }
+
+ /**
+ * Replaces all entry and exit points of the composite state with junction
+ * points, and recursively apply this to sub-states.
+ */
+ protected def dispatch void phase2ProcessState( CompositeState state )
+ {
+ state.name = state.cachedFullSMName
+ // Replace connection points with junction points
+ for (Pseudostate p: state.allConnectionPoints)
+ {
+ val j = CommonFactory.eINSTANCE.createJunctionPoint
+ j.name = p.name
+ state.addJunctionPoint( j )
+ j.cachedFullSMName
+ j.cachedFullName
+ for (Transition t: p.allDirectIncomingTransitions)
+ {
+ t.targetVertex = j
+ }
+ for (Transition t: p.allDirectOutgoingTransitions)
+ {
+ t.sourceVertex = j
+ }
+ if (p instanceof EntryPoint)
+ {
+ state.removeEntryPoint(p)
+ }
+ else if (p instanceof ExitPoint)
+ {
+ state.removeExitPoint(p)
+ }
+ }
+ // Process substates
+
+ for (State subState: state.allSubstates.clone)
+ {
+ phase2ProcessState( subState )
+ if (subState instanceof CompositeState)
+ {
+ state.moveContents( subState )
+ discardedStates.add( subState )
+ state.removeSubstate( subState )
+ }
+ }
+ }
+
+ /**
+ * Auxiliary methods
+ */
+
+ // TODO: check that the new name doesn't clash with an existing name
+ private def String getNewFreshName() {
+ freshNameCounter ++
+ return GlobalConstants.FRESH_NAME_PREFIX + freshNameCounter
+ }
+
+ private def String getNewFreshEntryPointName() {
+ freshEntryPointNameCounter ++
+ return GlobalConstants.FRESH_ENTRYPOINT_NAME_PREFIX + freshEntryPointNameCounter
+ }
+
+ private def String getNewFreshExitPointName() {
+ freshExitPointNameCounter ++
+ return GlobalConstants.FRESH_EXITPOINT_NAME_PREFIX + freshExitPointNameCounter
+ }
+
+ private def String getNewFreshChoicePointName() {
+ freshChoicePointNameCounter ++
+ return GlobalConstants.FRESH_CHOICEPOINT_NAME_PREFIX + freshChoicePointNameCounter
+ }
+
+ private def String getNewFreshJunctionPointName() {
+ freshJunctionPointNameCounter ++
+ return GlobalConstants.FRESH_JUNCTIONPOINT_NAME_PREFIX + freshJunctionPointNameCounter
+ }
+
+ private def String getNewFreshTransitionName() {
+ freshTransitionNameCounter ++
+ return GlobalConstants.FRESH_TRANSITION_NAME_PREFIX +freshTransitionNameCounter
+ }
+
+ private def Guard makeCheckHistoryGuard
+ (
+ CompositeState compositeState,
+ State subState
+ )
+ {
+ val checkHistory = SmflatmodelFactory.eINSTANCE.createCheckHistory
+ checkHistory.compositeState = compositeState
+ checkHistory.subState = subState
+ val guard = CommonFactory.eINSTANCE.createGuard
+ guard.body = checkHistory
+ guard
+ }
+
+ private def SaveHistory makeSaveHistoryAction
+ (
+ CompositeState compositeState,
+ State subState
+ )
+ {
+ val saveHistory = SmflatmodelFactory.eINSTANCE.createSaveHistory
+ saveHistory.compositeState = compositeState
+ saveHistory.subState = subState
+ saveHistory
+ }
+
+ private static def ActionChain copyActionChain( ActionChain actionChain )
+ {
+ val newActionChain = CommonFactory.eINSTANCE.createActionChain
+ newActionChain.name = actionChain.name
+ newActionChain.actions.addAll( actionChain.actions.map [ it.copyAction ] )
+ newActionChain
+ }
+
+ private static def ActionCode copyAction( ActionCode action )
+ {
+ val newAction = CommonFactory.eINSTANCE.createActionCode
+ newAction.source = action.source
+ newAction
+ }
+
+ private static def moveContents( CompositeState stateTo, CompositeState stateFrom )
+ {
+ for (s : stateFrom.allSubstates.clone)
+ {
+ stateFrom.removeSubstate( s )
+ stateTo.addSubstate( s )
+ }
+ for (j : stateFrom.allJunctionPoints.clone)
+ {
+ stateFrom.removeJunctionPoint( j )
+ stateTo.addJunctionPoint( j )
+ }
+ for (c : stateFrom.allChoicePoints.clone)
+ {
+ stateFrom.removeChoicePoint( c )
+ stateTo.addChoicePoint( c )
+ }
+ for (t : stateFrom.allTransitions.clone)
+ {
+ stateFrom.removeTransition( t )
+ stateTo.addTransition( t )
+ }
+ }
+
+ private static def moveContents( StateMachine stateMachineTo, CompositeState stateFrom )
+ {
+ stateMachineTo.top?.moveContents( stateFrom )
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransformationContext.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransformationContext.xtend
new file mode 100644
index 0000000..38546e3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransformationContext.xtend
@@ -0,0 +1,13 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+interface TransformationContext
+{
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransformationResult.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransformationResult.xtend
new file mode 100644
index 0000000..472237f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransformationResult.xtend
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+
+import org.eclipse.xtend.lib.annotations.Data
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import java.util.Collection
+
+@Data class TransformationResult
+{
+ boolean success
+ StateMachine stateMachine
+ Collection<State> discardedStates
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransitionDepthComparator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransitionDepthComparator.xtend
new file mode 100644
index 0000000..92dec88
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/TransitionDepthComparator.xtend
@@ -0,0 +1,32 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.util.Comparator
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+
+
+class TransitionDepthComparator implements Comparator<Transition>
+{
+
+ /**
+ * Sorts in descending order so that transitions whose source is deeper
+ * appear before transitions with shallower source state.
+ */
+ override compare( Transition o1, Transition o2 )
+ {
+ val d1 = o1.cachedDepth
+ val d2 = o2.cachedDepth
+ if (d1 < d2) 1
+ else if (d1 == d2) 0
+ else -1
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/VertexNameComparator.xtend b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/VertexNameComparator.xtend
new file mode 100644
index 0000000..864e758
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.statemachines.flat/src/org/eclipse/papyrusrt/codegen/statemachines/transformations/VertexNameComparator.xtend
@@ -0,0 +1,49 @@
+/*******************************************************************************
+* Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.statemachines.transformations
+
+import java.util.Comparator
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.InitialPoint
+import org.eclipse.papyrusrt.xtumlrt.common.DeepHistory
+import org.eclipse.papyrusrt.xtumlrt.common.EntryPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ExitPoint
+import org.eclipse.papyrusrt.xtumlrt.common.JunctionPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+
+class VertexNameComparator implements Comparator<Vertex>
+{
+
+ static val totalOrder =
+ #[
+ SimpleState,
+ CompositeState,
+ InitialPoint,
+ DeepHistory,
+ EntryPoint,
+ ExitPoint,
+ JunctionPoint,
+ ChoicePoint
+ ]
+
+ override compare( Vertex o1, Vertex o2 )
+ {
+ val pos1 = totalOrder.indexOf( o1.class )
+ val pos2 = totalOrder.indexOf( o2.class )
+ if (pos1 == pos2)
+ o1.cachedFullName.compareTo( o2.cachedFullName )
+ else
+ if (pos1 < pos2) -1
+ else 1
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/.classpath b/codegen/org.eclipse.papyrusrt.codegen.utils/.classpath
new file mode 100644
index 0000000..248b4c5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/.project b/codegen/org.eclipse.papyrusrt.codegen.utils/.project
new file mode 100644
index 0000000..14ed724
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.utils</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen.utils/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen.utils/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..11f6e46
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.utils/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..80a86ff
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Utilities
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.utils
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Require-Bundle: org.eclipse.papyrus.umlrt,
+ org.eclipse.uml2.uml,
+ org.eclipse.xtend.lib;bundle-version="2.7.2",
+ org.eclipse.uml2.uml.resources;bundle-version="5.0.0",
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrusrt.xtumlrt.platform.model,
+ org.eclipse.papyrusrt.xtumlrt.platform.cpp.model,
+ org.eclipse.papyrusrt.xtumlrt.umlrt.model
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.papyrusrt.codegen.utils
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/about.html b/codegen/org.eclipse.papyrusrt.codegen.utils/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/about.properties b/codegen/org.eclipse.papyrusrt.codegen.utils/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/build.properties b/codegen/org.eclipse.papyrusrt.codegen.utils/build.properties
new file mode 100644
index 0000000..dde7a0b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/build.properties
@@ -0,0 +1,6 @@
+source.. = xtend-gen/,\
+ src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.utils/pom.xml
new file mode 100644
index 0000000..3d93aaf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.utils</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/GeneralUtil.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/GeneralUtil.xtend
new file mode 100644
index 0000000..d741fd8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/GeneralUtil.xtend
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import org.eclipse.emf.common.util.EList
+
+/**
+ * @author eposse
+ */
+class GeneralUtil
+{
+
+ static def <T> void addIfNotNull(EList<T> elist, T eobj)
+ {
+ if (elist !== null && eobj !== null)
+ {
+ elist.add( eobj )
+ }
+ }
+
+ static def <T> void addIfNotPresent(EList<T> elist, T eobj)
+ {
+ if (elist !== null && eobj !== null && !elist.contains(eobj))
+ {
+ elist.add( eobj )
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/QualifiedNames.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/QualifiedNames.xtend
new file mode 100644
index 0000000..8cf75ee
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/QualifiedNames.xtend
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+
+import static extension java.lang.Character.isLetter
+import static extension java.lang.Character.isDigit
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.*
+
+/**
+ * This class provides utilities to manage qualified names of elements from the
+ * xtumlrt meta-model.
+ *
+ * <p>There are several methods used to obtain the fully qualified name, and the
+ * name of the method describes what kind of operation is used, as follows:
+ *
+ * <ol>
+ * <li> {@code cached}<em>XXX</em>: caches and returns the cached qualified name.
+ * <li> <em>XXX</em>{@code Of}: this is the non-static version of the static method
+ * named <em>XXX</em>.
+ * <li> <em>XXX</em>{@code SM}<em>YYY</em>: this returns the qualified named
+ * of the element within a state machine, i.e. relative to the root of a
+ * state machine.
+ * </ol>
+ *
+ * <p>The purpose of cached methods is to compute the qualified methods once and
+ * return the same name in subsequent invocations as it may be required to
+ * recall the original qualified name of an element if the element is moved
+ * around from its original container.
+ *
+ * <p>The purpose of static methods is that they can be used as extension
+ * methods on the elements themselves.
+ *
+ * <p>The qualified name uses a separator between fragments given by the
+ * 'separator' constant field.
+ *
+ * <p>If the element's simple name is not valid, i.e. is is null, empty or does
+ * not form a valid C/C++ identifier (beginning with a letter), then a new
+ * fresh identifier is given, formed by the element's class name (simple) and
+ * a counter, which is increased with every new fresh name. The counter can be
+ * reset. This is useful to ensure the same sequence of generated fresh names.
+ *
+ * @author Ernesto Posse
+ */
+class QualifiedNames
+{
+
+ static val SEPARATOR = "::"
+ static val C_SEPARATOR = "__"
+ static char C_DEFAULT_CHAR = '_'
+ static var counter = 0
+ static val DEFAULT_PREFIX = "element"
+
+ static val INSTANCE = new QualifiedNames
+
+ def String create
+ {
+ val owner = element.owner
+ new String
+ (
+ (if (owner === null) "" else cachedFullNameOf(owner) + SEPARATOR)
+ + element.validName
+ )
+ }
+ cachedFullNameOf( NamedElement element )
+ {
+ }
+
+ static def cachedFullName( NamedElement element )
+ {
+ INSTANCE.cachedFullNameOf( element )
+ }
+
+ def String create
+ {
+ val owner = element.owner
+ new String
+ (
+ (if (owner === null || owner instanceof StateMachine) "" else cachedFullSMNameOf(owner) + SEPARATOR)
+ + element.validName
+ )
+ }
+ cachedFullSMNameOf( NamedElement element )
+ {
+ }
+
+ static def cachedFullSMName( NamedElement element )
+ {
+ INSTANCE.cachedFullSMNameOf( element )
+ }
+
+ def String fullNameOf( NamedElement element )
+ {
+ val owner = element.owner
+ new String
+ (
+ (if (owner === null) "" else fullNameOf(owner) + SEPARATOR) + element.validName
+ )
+ }
+
+ static def fullName( NamedElement element )
+ {
+ INSTANCE.fullNameOf( element )
+ }
+
+ def String fullSMNameOf( NamedElement element )
+ {
+ val owner = element.owner
+ new String
+ (
+ (if (owner === null || owner instanceof StateMachine) "" else fullSMNameOf(owner) + SEPARATOR) + element.validName
+ )
+ }
+
+ static def fullSMName( NamedElement element )
+ {
+ INSTANCE.fullSMNameOf( element )
+ }
+
+ static def validName( NamedElement element )
+ {
+ val name = element.name
+ if (name !== null && name != "" && name.charAt(0).isLetter)
+ {
+ var badchar = false
+ var i = 1
+ while (!badchar && i < name.length)
+ {
+ val c = name.charAt(i)
+ if (!c.validChar) badchar = true
+ i++
+ }
+ if (!badchar) return name
+ }
+ freshName( element.eClass.name )
+ }
+
+ static def freshName( String base )
+ {
+ counter++
+ val prefix = if (base === null) DEFAULT_PREFIX else base
+ prefix + counter
+ }
+
+ static def resetCounter()
+ {
+ counter = 0
+ }
+
+ static def replaceSeparator( String name )
+ {
+ name.replaceAll( SEPARATOR, C_SEPARATOR )
+ }
+
+ static def makeValidCName( String name )
+ {
+ if (name === null)
+ return freshName( null )
+ val result = new StringBuilder( name )
+ if (!name.charAt(0).isLetter)
+ result.setCharAt(0, 'c')
+ for ( var i = 0; i < result.length; i++ )
+ {
+ val c = name.charAt(i)
+ if (!c.validChar)
+ result.setCharAt(i, C_DEFAULT_CHAR)
+ }
+ result.toString
+ }
+
+ static def validChar( char c)
+ {
+ c.isLetter || c.isDigit || (c == '_')
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UML2CppUtil.java b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UML2CppUtil.java
new file mode 100644
index 0000000..7bcbf95
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UML2CppUtil.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils;
+
+import org.eclipse.uml2.uml.Behavior;
+import org.eclipse.uml2.uml.Constraint;
+import org.eclipse.uml2.uml.OpaqueBehavior;
+import org.eclipse.uml2.uml.OpaqueExpression;
+import org.eclipse.uml2.uml.Operation;
+
+public class UML2CppUtil
+{
+ /**
+ * Return true if the given string represents an OpaqueBehavior's C++ language
+ * code and false otherwise.
+ */
+ public static boolean isCppLanguage( String lang )
+ {
+ return "C++".equals( lang )
+ || "C/C++".equals( lang )
+ || "C".equals( lang )
+ || "CPP".equals( lang );
+ }
+
+ /**
+ * Return the C++ code string associated with the given constraint. Returns null if
+ * there is no such code.
+ */
+ public static String getCppCode( Constraint constraint )
+ {
+ String code = null;
+ if( constraint.getSpecification() instanceof OpaqueExpression )
+ {
+ OpaqueExpression opaqueExpression = (OpaqueExpression)constraint.getSpecification();
+ for( int i = 0; i < opaqueExpression.getLanguages().size(); ++i )
+ {
+ String language = opaqueExpression.getLanguages().get( i );
+ if( isCppLanguage( language ) )
+ {
+ if( code != null )
+ throw new RuntimeException( "too many C++-compatible languages for " + constraint.getQualifiedName() );
+
+ code = opaqueExpression.getBodies().get( i );
+ }
+ }
+ }
+
+ return code;
+ }
+
+ /**
+ * Return the C++ code string associated with the given behaviour. Returns null if
+ * there is no such code.
+ */
+ public static String getCppCode( Behavior behaviour )
+ {
+ String code = null;
+ if( behaviour instanceof OpaqueBehavior )
+ {
+ OpaqueBehavior opaqueBehaviour = (OpaqueBehavior)behaviour;
+ for( int i = 0; i < opaqueBehaviour.getLanguages().size(); ++i )
+ {
+ String language = opaqueBehaviour.getLanguages().get( i );
+ if( isCppLanguage( language ) )
+ {
+ if( code != null )
+ throw new RuntimeException( "too many C++-compatible languages for " + behaviour.getQualifiedName() );
+
+ code = opaqueBehaviour.getBodies().get( i );
+ }
+ }
+ }
+
+ return code;
+ }
+
+ /**
+ * Return the C++ code string associated with the given operation. Returns null if
+ * there is no such code.
+ */
+ public static String getCppCode( Operation operation )
+ {
+ String code = null;
+ for( Behavior behaviour : operation.getMethods() )
+ {
+ String cppCode = getCppCode( behaviour );
+ if( cppCode != null )
+ {
+ if( code == null )
+ code = cppCode;
+ else
+ throw new RuntimeException( "too many C++-compatible behaviours for " + operation.getQualifiedName() );
+ }
+ }
+
+ return code;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UML2Util.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UML2Util.xtend
new file mode 100644
index 0000000..0f649d0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UML2Util.xtend
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import java.util.Collection
+import java.util.Comparator
+import org.eclipse.uml2.uml.Class
+import org.eclipse.uml2.uml.Model
+import org.eclipse.uml2.uml.NamedElement
+import org.eclipse.uml2.uml.StateMachine
+
+/**
+ * This class provides several static helper methods to access parts of a UML2 model.
+ *
+ * @author eposse
+ */
+class UML2Util
+{
+
+ /**
+ * Returns all class objects in the model, including nested classes.
+ *
+ * <p>Note that this will include any classifiers which specialize "Class", including
+ * StateMachine and Component instances.
+ */
+ static def Iterable<Class> getAllClasses( Model model )
+ {
+ model.allOwnedElements.filter(Class)
+ }
+
+ /**
+ * Returns all class objects in the model, including nested classes, but only those which
+ * are only actual classes, this is, those objects whose meta-class is "Class" and not
+ * other meta-class which specializes "Class", such as StateMachine and Component.
+ */
+ static def Iterable<Class> getAllOnlyClasses( Model model )
+ {
+ model.allOwnedElements.filter[it.eClass.name == "Class"].map [it as Class].toList
+ }
+
+ /**
+ * Returns a list of all top-level classes in the model.
+ */
+ static def Collection<Class> getTopUMLClasses( Model model )
+ {
+ val list = newArrayList
+ for (e : model.members)
+ {
+ if (e instanceof Class)
+ list.add(e)
+ }
+ list
+ }
+
+ /**
+ * Returns the state machine for the given class. It will first try to see if the class has
+ * a classifierBahavior state machine, and if so, it will return that. If not, it will
+ * return the first ownedBehavior which is a state machine if there is one.
+ */
+ static def StateMachine getStateMachine( Class klass )
+ {
+ val behaviour = klass.classifierBehavior
+ if (behaviour !== null && behaviour instanceof StateMachine)
+ return behaviour as StateMachine
+ if (klass.ownedBehaviors === null) return null
+ for (ownedBehaviour : klass.ownedBehaviors)
+ {
+ if (ownedBehaviour instanceof StateMachine) return ownedBehaviour
+ }
+ }
+
+ /**
+ * Returns the top-level class with the given name in the model, if there is one.
+ */
+ static def Class getUMLClass( Model model, String name )
+ {
+ for (e : model.members)
+ {
+ if (e instanceof Class && e.name == name) return e as Class
+ }
+ }
+
+ static class NameComparator implements Comparator<NamedElement>
+ {
+ override int compare( NamedElement o1, NamedElement o2 )
+ {
+ // null sorts earlier
+ if (o1 == null)
+ return if (o2 == null) 0 else -1
+ if (o2 == null)
+ return 1
+
+ val name1 = o1.name
+ val name2 = o2.name
+ if (name1 == null)
+ return if (name2 == null) 0 else -1
+ if (name2 == null)
+ return 1
+
+ return name1.compareTo(name2);
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRTSMVirtualInheritanceExtensions.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRTSMVirtualInheritanceExtensions.xtend
new file mode 100644
index 0000000..ea976d8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRTSMVirtualInheritanceExtensions.xtend
@@ -0,0 +1,830 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import java.util.Collection
+import java.util.List
+import org.eclipse.uml2.uml.Pseudostate
+import org.eclipse.uml2.uml.Region
+import org.eclipse.uml2.uml.State
+import org.eclipse.uml2.uml.StateMachine
+import org.eclipse.uml2.uml.Transition
+import org.eclipse.uml2.uml.Vertex
+import org.eclipse.uml2.uml.PseudostateKind
+
+@Deprecated
+class UMLRTSMVirtualInheritanceExtensions {
+
+ /**
+ * Returns the list of all regions extended by the given region, in order of redefinition.
+ */
+ static def List<Region> ancestors(Region region) {
+ val List<Region> list = newArrayList
+ var r = region
+ while (r !== null) {
+ list.add(r)
+ r = r.extendedRegion
+ }
+ list
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited connection points, and
+ * <li> the set of new connection points which are not inherited
+ * </ol>
+ */
+ static dispatch def Iterable<Pseudostate> getAllConnectionPoints(State state) {
+ val List<Pseudostate> allConnectionPoints = newArrayList
+ if (state !== null) {
+ if (state.composite && state.connectionPoints !== null)
+ allConnectionPoints.addAll(state.connectionPoints)
+ if (state.redefinedState !== null) {
+ val inheritedPseudostates = state.redefinedState.allConnectionPoints
+ allConnectionPoints.addAll(inheritedPseudostates)
+ }
+ }
+ allConnectionPoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited connection points, and
+ * <li> the set of new connection points which are not inherited
+ * </ol>
+ */
+ static dispatch def Iterable<Pseudostate> getAllConnectionPoints(StateMachine stateMachine) {
+ val List<Pseudostate> allConnectionPoints = newArrayList
+ if (stateMachine !== null) {
+ allConnectionPoints.addAll(stateMachine.connectionPoints)
+ if (stateMachine.extendedStateMachines !== null
+ && !stateMachine.extendedStateMachines.empty
+ ) {
+ val extendedStateMachine = stateMachine.getExtendedStateMachine(stateMachine.name)
+ if (extendedStateMachine !== null) {
+ val inheritedPseudostates = extendedStateMachine.allConnectionPoints
+ allConnectionPoints.addAll(inheritedPseudostates)
+ }
+ }
+ }
+ allConnectionPoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited incoming transitions that have not been redefined,
+ * <li> the set of incoming transitions that are redefinitions of states in the extended
+ * region, and
+ * <li> the set of new incoming transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllIncomingTransitions(State s) {
+ val List<Transition> allTransitions = newArrayList
+ if (s !== null) {
+ allTransitions.addAll(s.incomings)
+ if (s.redefinedState !== null) {
+ val inheritedTransitions = s.redefinedState.allIncomingTransitions
+ for (t : inheritedTransitions) {
+ if (!s.container.redefines(t))
+ allTransitions.add(t)
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited incoming transitions that have not been redefined,
+ * <li> the set of incoming transitions that are redefinitions of states in the extended
+ * region, and
+ * <li> the set of new incoming transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllIncomingTransitions(Pseudostate s) {
+ val List<Transition> allTransitions = newArrayList
+ if (s !== null) {
+ allTransitions.addAll(s.incomings)
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the set of all incoming transitions of the given state, including inherited ones
+ * whose owner is the given region or any of its ancestors.
+ *
+ * @see #ancestors
+ */
+ static def dispatch Iterable<Transition> getAllIncomingTransitionsInRegion(State s, Region r) {
+ val ancestors = r.ancestors
+ s.allIncomingTransitions.filter [ancestors.contains(it.owner)]
+ }
+
+ /**
+ * Returns the set of all incoming transitions of the given pseudostate, including
+ * inherited ones whose owner is the given region or any of its ancestors.
+ *
+ * @see #ancestors
+ */
+ static def dispatch Iterable<Transition> getAllIncomingTransitionsInRegion(Pseudostate s, Region r) {
+ val ancestors = r.ancestors
+ s.allIncomingTransitions.filter [ancestors.contains(it.owner)]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited (internal) pseudostates, and
+ * <li> the set of new (internal) pseudostates which are not inherited
+ * </ol>
+ */
+ static def dispatch Iterable<Pseudostate> getAllInternalPseudostates(State state) {
+ val region = state.ownedRegion
+ if (region !== null)
+ region.allRegionPseudostates
+ else
+ #[]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited (internal) pseudostates, and
+ * <li> the set of new (internal) pseudostates which are not inherited
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def dispatch Iterable<Pseudostate> getAllInternalPseudostates(StateMachine stateMachine) {
+ val region = stateMachine.ownedRegion
+ if (region !== null)
+ region.allRegionPseudostates
+ else
+ #[]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited outgoing transitions that have not been redefined,
+ * <li> the set of outgoing transitions that are redefinitions of states in the extended
+ * region, and
+ * <li> the set of new outgoing transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllOutgoingTransitions(State s) {
+ val List<Transition> allTransitions = newArrayList
+ if (s !== null) {
+ allTransitions.addAll(s.outgoings)
+ if (s.redefinedState !== null) {
+ val inheritedTransitions = s.redefinedState.allOutgoingTransitions
+ for (t : inheritedTransitions) {
+ if (!s.container.redefines(t))
+ allTransitions.add(t)
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited outgoing transitions that have not been redefined,
+ * <li> the set of outgoing transitions that are redefinitions of states in the extended
+ * region, and
+ * <li> the set of new outgoing transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllOutgoingTransitions(Pseudostate s) {
+ val List<Transition> allTransitions = newArrayList
+ if (s !== null) {
+ allTransitions.addAll(s.outgoings)
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the set of all outgoing transitions of the given state, including inherited ones
+ * whose owner is the given region or any of its ancestors.
+ *
+ * @see #ancestors
+ */
+ static def dispatch Iterable<Transition> getAllOutgoingTransitionsInRegion(State s, Region r) {
+ val ancestors = r.ancestors
+ s.allOutgoingTransitions.filter [ancestors.contains(it.owner)]
+ }
+
+ /**
+ * Returns the set of all outgoing transitions of the given pseudostate, including
+ * inherited ones whose owner is the given region or any of its ancestors.
+ *
+ * @see #ancestors
+ */
+ static def dispatch Iterable<Transition> getAllOutgoingTransitionsInRegion(Pseudostate s, Region r) {
+ val ancestors = r.ancestors
+ s.allOutgoingTransitions.filter [ancestors.contains(it.owner)]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited (internal) pseudostates, and
+ * <li> the set of new (internal) pseudostates which are not inherited
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def Iterable<Pseudostate> getAllRegionPseudostates(Region region) {
+ val List<Pseudostate> allPseudostates = newArrayList
+ if (region !== null) {
+ allPseudostates.addAll(region.pseudostates)
+ if (region.extendedRegion !== null) {
+ val inheritedPseudostates = region.extendedRegion.allRegionPseudostates
+ allPseudostates.addAll(inheritedPseudostates) // Pseudostates cannot be redefined
+ }
+ }
+ allPseudostates
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited states that have not been redefined,
+ * <li> the set of states that are redefinitions of states in the extended region, and
+ * <li> the set of new states which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def Iterable<State> getAllRegionStates(Region region) {
+ val List<State> allStates = newArrayList
+ if (region !== null) {
+ allStates.addAll(region.substates)
+ if (region.extendedRegion !== null) {
+ val inheritedStates = region.extendedRegion.allRegionStates
+ for (s : inheritedStates) {
+ if (!region.redefines(s))
+ allStates.add(s)
+ }
+ }
+ }
+ allStates
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited transitions that have not been redefined,
+ * <li> the set of transitions that are redefinitions of states in the extended region, and
+ * <li> the set of new transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def Iterable<Transition> getAllRegionTransitions(Region region) {
+ val List<Transition> allTransitions = newArrayList
+ if (region !== null) {
+ allTransitions.addAll(region.transitions)
+ if (region.extendedRegion !== null) {
+ val inheritedTransitions = region.extendedRegion.allRegionTransitions
+ for (t : inheritedTransitions) {
+ if (!region.redefines(t))
+ allTransitions.add(t)
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited (internal) vertices, and
+ * <li> the set of new (internal) vertices which are not inherited
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def Iterable<Vertex> getAllRegionVertices(Region region) {
+ val List<Vertex> allVertices = newArrayList
+ allVertices.addAll(region.allRegionStates)
+ allVertices.addAll(region.allRegionPseudostates)
+ allVertices
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited states that have not been redefined,
+ * <li> the set of states that are redefinitions of states in the extended region, and
+ * <li> the set of new states which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def dispatch Iterable<State> getAllSubstates(State state) {
+ val region = state.ownedRegion
+ if (region !== null)
+ region.allRegionStates
+ else
+ #[]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited states that have not been redefined,
+ * <li> the set of states that are redefinitions of states in the extended region, and
+ * <li> the set of new states which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def dispatch Iterable<State> getAllSubstates(StateMachine stateMachine) {
+ val region = stateMachine.ownedRegion
+ if (region !== null)
+ region.allRegionStates
+ else
+ #[]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited transitions that have not been redefined,
+ * <li> the set of transitions that are redefinitions of states in the extended region, and
+ * <li> the set of new transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllTransitions(State state) {
+ val region = state.ownedRegion
+ if (region !== null)
+ region.allRegionTransitions
+ else
+ #[]
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited transitions that have not been redefined,
+ * <li> the set of transitions that are redefinitions of states in the extended region, and
+ * <li> the set of new transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those transitions in the current region and adds all inherited states for which there is
+ * no transition in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllTransitions(StateMachine stateMachine) {
+ val region = stateMachine.ownedRegion
+ if (region !== null)
+ region.allRegionTransitions
+ else
+ #[]
+ }
+
+ /**
+ * Returns the set of all incoming transitions of the given state, including inherited ones
+ * whose owner is the given region.
+ */
+ static def dispatch Iterable<Transition> getIncomingTransitionsInRegion(State s, Region r) {
+ s.allIncomingTransitions.filter [it.owner == r]
+ }
+
+ /**
+ * Returns the set of all incoming transitions of the given pseudostate, including
+ * inherited ones whose owner is the given region.
+ */
+ static def dispatch Iterable<Transition> getIncomingTransitionsInRegion(Pseudostate s, Region r) {
+ s.allIncomingTransitions.filter [it.owner == r]
+ }
+
+ /**
+ * Returns the region of the state machine which extends the given state machine.
+ *
+ * <p>This region must be the same as the region extended by the state machine's owned
+ * region.
+ */
+ static def getInheritedRegion(StateMachine stateMachine) {
+ if (!validateExtendedRegion(stateMachine)) null
+ else stateMachine?.ownedRegion?.extendedRegion
+ }
+
+ /**
+ * Returns the set of pseudostates directly owned by the state (not inherited) which are
+ * not connection points owned by the state.
+ */
+ static def dispatch Collection<Pseudostate> getInternalPseudostates(State state) {
+ return state.ownedRegion?.pseudostates
+ }
+
+ /**
+ * Returns the set of pseudostates directly owned by the state machine (not inherited)
+ * which are not connection points owned by the state.
+ */
+ static def dispatch Collection<Pseudostate> getInternalPseudostates(StateMachine stateMachine) {
+ return stateMachine.ownedRegion?.pseudostates
+ }
+
+ /**
+ * Returns the set of all outgoing transitions of the given state, including inherited ones
+ * whose owner is the given region.
+ */
+ static def dispatch Iterable<Transition> getOutgoingTransitionsInRegion(State s, Region r) {
+ s.allOutgoingTransitions.filter [it.owner == r]
+ }
+
+ /**
+ * Returns the set of all outgoing transitions of the given pseudostate, including
+ * inherited ones whose owner is the given region.
+ */
+ static def dispatch Iterable<Transition> getOutgoingTransitionsInRegion(Pseudostate s, Region r) {
+ s.allOutgoingTransitions.filter [it.owner == r]
+ }
+
+ /**
+ * Returns the set of vertices owned by the region which are pseudostates.
+ */
+ static def Collection<Pseudostate> getPseudostates(Region region) {
+ val List<Pseudostate> pseudostates = newArrayList
+ if (region !== null) {
+ for (v : region.subvertices) {
+ if (v instanceof Pseudostate) {
+ pseudostates.add(v)
+ }
+ }
+ }
+ pseudostates
+ }
+
+ /**
+ * Returns a collection of states from the extended region that have been redefined in the
+ * given region.
+ */
+ static def Iterable<State> getRedefinedStates(Region region) {
+ region.stateRedefinitions.map [it.redefinedState]
+ }
+
+ /**
+ * Returns a collection of transitions from the extended region that have been redefined in
+ * the given region.
+ */
+ static def Iterable<Transition> getRedefinedTransitions(Region region) {
+ region.transitionRedefinitions.map [it.redefinedTransition]
+ }
+
+ /**
+ * Returns the collection of states which are redefinitions of a state in the extended
+ * region.
+ */
+ static def Collection<State> getStateRedefinitions(Region region) {
+ val List<State> states = newArrayList
+ if (region !== null) {
+ for (s : region.substates) {
+ if (s.redefinedState !== null)
+ states.add(s)
+ }
+ }
+ states
+ }
+
+ /**
+ * Returns the set of vertices owned by the region which are states.
+ */
+ static def Collection<State> getSubstates(Region region) {
+ val List<State> states = newArrayList
+ if (region !== null) {
+ for (v : region.subvertices) {
+ if (v instanceof State) {
+ states.add(v)
+ }
+ }
+ }
+ states
+ }
+
+ /**
+ * Returns the collection of transitions which are redefinitions of a transition in the
+ * extended region.
+ */
+ static def Collection<Transition> getTransitionRedefinitions(Region region) {
+ val List<Transition> transitions = newArrayList
+ if (region !== null) {
+ for (t : region.transitions) {
+ if (t.redefinedTransition !== null)
+ transitions.add(t)
+ }
+ }
+ transitions
+ }
+
+ /**
+ * Returns true is the given state from the region extended by the given region is
+ * redefined in the given region.
+ */
+ static def dispatch redefines(Region region, State state) {
+ region.redefinedStates.exists [it == state]
+ }
+
+ /**
+ * Returns true is the given transition from the region extended by the given region is
+ * redefined in the given region.
+ */
+ static def dispatch redefines(Region region, Transition transition) {
+ region.redefinedTransitions.exists [it == transition]
+ }
+
+ /**
+ * Returns the source vertex of a given transition in a given region which may be an
+ * extended region of the region containing the "real" source of the transition. This is,
+ * if transition t is in region r because it was inherited, this is, t actually belongs
+ * to a region r' redefined by r, then the real source s' of t is in r', but there may be a
+ * vertex s in r which redefines s', and therefore it should be considered the source of t
+ * in r.
+ *
+ * <p> The following diagram describes the situation: t in r is inherited from r', and its
+ * real source is s' and target is d'. This method returns s, the source of t in r.
+ * <p>
+ * <pre>
+ * <code>
+ * parent region r': s' --t--> d'
+ * ^ ^ ^
+ * | | |
+ * extended region r: s --t--> d
+ * </code>
+ * </pre>
+ */
+ static def Vertex getTransitionSourceInRegion(Transition t, Region r) {
+ // Check if the source is one of the pseudostates, owned or inherited by r
+ for (s : r.allRegionPseudostates) {
+ if (t.source === s)
+ return s
+ }
+ // Check if the source is one of the states, owned or inherited by r or a connection
+ // point for any such state
+ for (s : r.allRegionStates) {
+ var v = s
+ // Go up the chain of state redefinitions looking for the actual source.
+ while (v !== null) {
+ // Check if the source is the given state...
+ if (t.source === v)
+ return s
+ // ... or if it is one of its connection (exit) points
+ if (v.connectionPoints !== null) {
+ for (p : v.connectionPoints) {
+ if (t.source === p)
+ // p is not owned by r but we still need to report it, and since
+ // p is a pseudostate and non-redefinable, it must be inherited
+ // by s (TODO: unless it has been explicitly excluded, in which
+ // case we should report s)
+ return p
+ }
+ }
+ // If not, go up to the state that v redefines.
+ v = v.redefinedState
+ }
+ }
+ }
+
+ /**
+ * Returns the source vertex of a given transition in a given (composite) state which may
+ * be an redefined state of the state containing the "real" target of the transition. This
+ * is, if transition t is inside region r of composite state s because it was inherited,
+ * this is, t actually belongs to a region r' redefined by r, then the real source d' of t
+ * is in r', but there may be a vertex d in r which redefines d', and therefore it should
+ * be considered the source of t in r.
+ *
+ * <p> The following diagram describes the situation: t in r is inherited from r', and its
+ * real source is s' and target is d'. This method returns d, the source of t in r.
+ * <p>
+ * <pre>
+ * <code>
+ * parent region r': s' --t--> d'
+ * ^ ^ ^
+ * | | |
+ * extended region r: s --t--> d
+ * </code>
+ * </pre>
+ *
+ * <p> The source may be the state itself.
+ */
+ static def Vertex getTransitionSourceInState(Transition t, State s) {
+ if (s == null) return null
+ // First check if the source is the state itself or any state up the redefinition
+ // chain of s.
+ var State u = s
+ while (u !== null) {
+ if (t.source == u)
+ return s
+ u = u.redefinedState
+ }
+ // At this point we know that neither s nor any state it redefines is the source,
+ // So we check the connection points of s, including those inherited.
+ var Vertex v = s.allConnectionPoints.findFirst[it.allOutgoingTransitions.exists[it == t]]
+ // If none of the connection points was the source, then we look inside the state
+ // region for a source.
+ if (v == null && s.composite && s.regions !== null && !s.regions.empty) {
+ val r = s.regions.get(0)
+ v = getTransitionSourceInRegion(t, r)
+ }
+ v
+ }
+
+ /**
+ * Returns the target vertex of a given transition in a given region which may be an
+ * extended region of the region containing the "real" target of the transition. This is,
+ * if transition t is in region r because it was inherited, this is, t actually belongs
+ * to a region r' redefined by r, then the real target d' of t is in r', but there may be a
+ * vertex d in r which redefines d', and therefore it should be considered the target of t
+ * in r.
+ *
+ * <p> The following diagram describes the situation: t in r is inherited from r', and its
+ * real source is s' and target is d'. This method returns d, the target of t in r.
+ * <p>
+ * <pre>
+ * <code>
+ * parent region r': s' --t--> d'
+ * ^ ^ ^
+ * | | |
+ * extended region r: s --t--> d
+ * </code>
+ * </pre>
+ */
+ static def Vertex getTransitionTargetInRegion(Transition t, Region r) {
+ // Check if the target is one of the pseudostates, owned or inherited by r
+ for (s : r.allRegionPseudostates) {
+ if (t.target === s)
+ return s
+ }
+ // Check if the target is one of the states, owned or inherited by r or a connection
+ // point for any such state
+ for (s : r.allRegionStates) {
+ var v = s
+ // Go up the chain of state redefinitions looking for the actual target.
+ while (v !== null) {
+ // Check if the target is the given state...
+ if (t.target === v)
+ return s
+ // ... or if it is one of its connection (exit) points
+ if (v.connectionPoints !== null) {
+ for (p : v.connectionPoints) {
+ if (t.target === p)
+ // p is not owned by r but we still need to report it, and since
+ // p is a pseudostate and non-redefinable, it must be inherited
+ // by s (TODO: unless it has been explicitly excluded, in which
+ // case we should report s)
+ return p
+ }
+ }
+ // ... or if s it a composite state and the target is the history point
+ if (v.composite && v.ownedRegion !== null) {
+ for (p : v.internalPseudostates) {
+ // analogous to the previous case
+ if (t.target == p && p.kind == PseudostateKind.DEEP_HISTORY_LITERAL)
+ return p
+ }
+ }
+ // If not, go up to the state that v redefines.
+ v = v.redefinedState
+ }
+ }
+ }
+
+ /**
+ * Returns the target vertex of a given transition in a given (composite) state which may
+ * be an redefined state of the state containing the "real" target of the transition. This
+ * is, if transition t is inside region r of composite state s because it was inherited,
+ * this is, t actually belongs to a region r' redefined by r, then the real target d' of t
+ * is in r', but there may be a vertex d in r which redefines d', and therefore it should
+ * be considered the target of t in r.
+ *
+ * <p> The following diagram describes the situation: t in r is inherited from r', and its
+ * real source is s' and target is d'. This method returns d, the target of t in r.
+ * <p>
+ * <pre>
+ * <code>
+ * parent region r': s' --t--> d'
+ * ^ ^ ^
+ * | | |
+ * extended region r: s --t--> d
+ * </code>
+ * </pre>
+ *
+ * <p> The target may be the state itself.
+ */
+ static def Vertex getTransitionTargetInState(Transition t, State s) {
+ if (s == null) return null
+ // First check if the target is the state itself or any state up the redefinition
+ // chain of s.
+ var State u = s
+ while (u !== null) {
+ if (t.target == u)
+ return s
+ u = u.redefinedState
+ }
+ // At this point we know that neither s nor any state it redefines is the target,
+ // So we check the connection points of s, including those inherited.
+ var Vertex v = s.allConnectionPoints.findFirst[it.allIncomingTransitions.exists[it == t]]
+ // If none of the connection points was the source, then we look inside the state
+ // region for a source.
+ if (v == null && s.composite && s.regions !== null && !s.regions.empty) {
+ val r = s.regions.get(0)
+ v = getTransitionTargetInRegion(t, r)
+ }
+ v
+ }
+
+ /**
+ * Returns the region owned by the state machine. In UML-RT state machines own only one
+ * region.
+ */
+ static def dispatch Region ownedRegion(StateMachine stateMachine) {
+ if (stateMachine.regions !== null && !stateMachine.regions.empty)
+ stateMachine.regions.get(0) // In UML-RT a state machine has exactly one region
+ }
+
+ static def dispatch Region ownedRegion(State state) {
+ if (state.regions !== null && !state.regions.empty)
+ state.regions.get(0) // In UML-RT a state machine has exactly one region
+ }
+
+ /**
+ * Check that the region extended by the state machine's owned region is the same as
+ * the owned region of the extended state machine with the same name.
+ *
+ * <p>Note that if the extended state machine has a different name, this method will report
+ * the extension as invalid. The reason is that UML allows a state machine to extend
+ * multiple state machines, but we need to disambiguate which is the one that we are
+ * concerned with, and this is done by selecting the extended machine with the same name
+ * as the given state machine.
+ */
+ static def validateExtendedRegion(StateMachine stateMachine) {
+ val extendedStateMachine = stateMachine?.getExtendedStateMachine(stateMachine.name)
+ val extendedRegion = extendedStateMachine?.ownedRegion
+ val ownedRegion = stateMachine?.ownedRegion
+ val redefinedRegion = ownedRegion?.extendedRegion
+ extendedRegion == redefinedRegion
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRealTimeProfileUtil.java b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRealTimeProfileUtil.java
new file mode 100644
index 0000000..c52b701
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRealTimeProfileUtil.java
@@ -0,0 +1,377 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TreeSet;
+
+import org.eclipse.papyrus.umlrt.UMLRealTime.Capsule;
+import org.eclipse.papyrus.umlrt.UMLRealTime.CapsulePart;
+import org.eclipse.papyrus.umlrt.UMLRealTime.Protocol;
+import org.eclipse.papyrus.umlrt.UMLRealTime.ProtocolContainer;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTConnector;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTMessageSet;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTPort;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTRedefinedElement;
+//import org.eclipse.papyrus.umlrt.UMLRealTime.RTRExcludedElement;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Collaboration;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.EncapsulatedClassifier;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.Type;
+
+@Deprecated
+public class UMLRealTimeProfileUtil
+{
+
+ private UMLRealTimeProfileUtil()
+ {
+ }
+
+ public static boolean isCapsule(Element el) {
+ Stereotype s = el.getApplicableStereotype("UMLRealTime::Capsule");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static Capsule getCapsule(Element el) {
+ Stereotype s = el.getAppliedStereotype("UMLRealTime::Capsule");
+ if (s == null) {
+ return null;
+ }
+ return (Capsule) el.getStereotypeApplication(s);
+ }
+
+ public static boolean isCapsulePart(Element el) {
+ Stereotype s = el.getApplicableStereotype("UMLRealTime::CapsulePart");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static CapsulePart getCapsulePart(Element el) {
+ Stereotype s = el.getAppliedStereotype("UMLRealTime::CapsulePart");
+ if (s == null) {
+ return null;
+ }
+ return (CapsulePart) el.getStereotypeApplication(s);
+ }
+
+ public static boolean isProtocol(Element el) {
+ Stereotype s = el.getApplicableStereotype("UMLRealTime::Protocol");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static Protocol getProtocol(Element el) {
+ Stereotype s = el.getAppliedStereotype("UMLRealTime::Protocol");
+ if (s == null) {
+ return null;
+ }
+ return (Protocol) el.getStereotypeApplication(s);
+ }
+
+ public static Collaboration getProtocolCollaboration(Package protocolPackage) {
+ if (!isProtocolContainer(protocolPackage)) {
+ return null;
+ }
+ Collaboration collaboration = null;
+ for (Element element: protocolPackage.getOwnedElements()) {
+ if (element instanceof Collaboration && isProtocol(element)) {
+ collaboration = (Collaboration) element;
+ break;
+ }
+ }
+ return collaboration;
+ }
+
+ public static boolean isRTPort(Element el) {
+ Stereotype s = el.getApplicableStereotype("UMLRealTime::RTPort");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static RTPort getRTPort(Element el) {
+ Stereotype s = el.getAppliedStereotype("UMLRealTime::RTPort");
+ if (s == null) {
+ return null;
+ }
+ return (RTPort) el.getStereotypeApplication(s);
+ }
+
+ public static boolean isRTConnector(Connector connector) {
+ Stereotype s = connector.getApplicableStereotype("UMLRealTime::RTConnector");
+ if (s != null) {
+ return connector.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static RTConnector getRTConnector(Element el) {
+ Stereotype s = el.getAppliedStereotype("UMLRealTime::RTConnector");
+ if (s == null) {
+ return null;
+ }
+ return (RTConnector) el.getStereotypeApplication(s);
+ }
+
+ public static boolean isProtocolContainer(Element el) {
+ Stereotype s = el
+ .getApplicableStereotype("UMLRealTime::ProtocolContainer");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static ProtocolContainer getProtocolContainer(Element el) {
+ Stereotype s = el
+ .getAppliedStereotype("UMLRealTime::ProtocolContainer");
+ if (s == null) {
+ return null;
+ }
+ return (ProtocolContainer) el.getStereotypeApplication(s);
+ }
+
+ public static boolean isRTRedefinedElement(Element el) {
+ Stereotype s = el
+ .getApplicableStereotype("UMLRealTime::RTRedefinedElement");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static RTRedefinedElement getRTRedefinedElement(Element el) {
+ Stereotype s = el
+ .getAppliedStereotype("UMLRealTime::RTRedefinedElement");
+ if (s == null) {
+ return null;
+ }
+ return (RTRedefinedElement) el.getStereotypeApplication(s);
+ }
+
+ public static boolean isRTMessageSet(Element el) {
+ Stereotype s = el.getApplicableStereotype("UMLRealTime::RTMessageSet");
+ if (s != null) {
+ return el.isStereotypeApplied(s);
+ }
+ return false;
+ }
+
+ public static RTMessageSet getRTMessageSet(Element el) {
+ Stereotype s = el.getAppliedStereotype("UMLRealTime::RTMessageSet");
+ if (s == null) {
+ return null;
+ }
+ return (RTMessageSet) el.getStereotypeApplication(s);
+ }
+
+ public static Package getProtocol(Port umlPort) {
+ Type type = umlPort.getType();
+ if (type == null)
+ return null;
+
+ Package pkg = type.getPackage();
+ if (pkg == null)
+ return null;
+
+ return isProtocolContainer(pkg) ? pkg : null;
+ }
+
+ /**
+ * A filter that produces only Properties that are properly stereotyped as
+ * CapsulePart.
+ */
+ public static Iterable<Property> getCapsuleParts(
+ EncapsulatedClassifier classifier) {
+ // Ports are put into a sorted list to make sure that the order is
+ // stable between
+ // different parts of the generator (as well as between invocations).
+ final TreeSet<Property> parts = new TreeSet<Property>(
+ new UML2Util.NameComparator());
+ for (Property attr : classifier.getOwnedAttributes())
+ if (isCapsulePart(attr))
+ parts.add(attr);
+ return parts;
+ }
+
+ /**
+ * A filter that produces only Ports that are properly stereotyped as RTPort
+ * and have a UML-RT protocol.
+ */
+ public static Iterable<Port> getRTPorts(EncapsulatedClassifier classifier) {
+ // Ports are put into a sorted list to make sure that the order is
+ // stable between
+ // different parts of the generator (as well as between invocations).
+ final TreeSet<Port> ports = new TreeSet<Port>(new UML2Util.NameComparator());
+ for (Port port : classifier.getOwnedPorts())
+ if (isRTPort(port) && getProtocol(port) != null)
+ ports.add(port);
+ return ports;
+ }
+
+ /**
+ * Returns the set of all ports in the class, including those which have been inherited
+ * and those which are redefinitions of inherited ports.
+ */
+ public static Iterable<Port> getAllRTPorts(Class klass) {
+ final TreeSet<Port> allPorts = new TreeSet<Port>(new UML2Util.NameComparator());
+ if (klass != null) {
+ for (Port p : getRTPorts(klass)) {
+ allPorts.add(p);
+ }
+ Class parent = getBaseRTCapsule(klass);
+ if (parent != null) {
+ for (Port p : getAllRTPorts(parent)) {
+ if (!redefines(klass, p)) {
+ allPorts.add(p);
+ }
+ }
+ }
+ }
+ return allPorts;
+ }
+
+ /**
+ * A filter that produces only Ports that are properly stereotyped as RTPort
+ * and have a UML-RT protocol.
+ */
+ public static Iterable<Connector> getRTConnectors(EncapsulatedClassifier classifier) {
+ // Connectors are put into a sorted list to make sure that the order is
+ // stable between
+ // different parts of the generator (as well as between invocations).
+ final TreeSet<Connector> connectors = new TreeSet<Connector>(new UML2Util.NameComparator());
+ for (Connector connector : classifier.getOwnedConnectors())
+ if (isRTConnector(connector))
+ connectors.add(connector);
+ return connectors;
+ }
+
+ /**
+ * Returns the set of all ports in the class, including those which have been inherited
+ * and those which are redefinitions of inherited ports.
+ */
+ public static Iterable<Connector> getAllRTConnectors(Class klass) {
+ final TreeSet<Connector> allConnectors = new TreeSet<Connector>(new UML2Util.NameComparator());
+ if (klass != null) {
+ for (Connector c : getRTConnectors(klass)) {
+ allConnectors.add(c);
+ }
+ Class parent = getBaseRTCapsule(klass);
+ if (parent != null) {
+ for (Connector c : getAllRTConnectors(parent)) {
+ if (!redefines(klass, c)) {
+ allConnectors.add(c);
+ }
+ }
+ }
+ }
+ return allConnectors;
+ }
+
+ private static Class getBaseRTCapsule(Class klass) {
+ if (klass != null && !klass.getSuperClasses().isEmpty()) {
+ for (Class kls : klass.getSuperClasses()) {
+ if (isCapsule(kls))
+ return kls;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns true iff the given port is inherited and redefined by the given class.
+ */
+ private static boolean redefines(Class klass, Port port) {
+ if (port == null) return false;
+ for (Port p : getRedefinedPorts(klass)) {
+ if (p == port || port.equals(p)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns true iff the given port is inherited and redefined by the given class.
+ */
+ private static boolean redefines(Class klass, Connector connector) {
+ if (connector == null) return false;
+ for (Connector c : getRedefinedConnectors(klass)) {
+ if (c == connector || connector.equals(c)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns an iterable over the ports redefined by the given class.
+ */
+ private static Iterable<Port> getRedefinedPorts(Class klass) {
+ List<Port> ports = new ArrayList<Port>();
+ for (Port p : getPortRedefinitions(klass)) {
+ Port redefined = p.getRedefinedPorts().get(0); // Assume a port redefines only one port.
+ ports.add(redefined);
+ }
+ return ports;
+ }
+
+ /**
+ * Returns an iterable over the ports of the given class which redefine some inherited port.
+ */
+ private static Iterable<Port> getPortRedefinitions(Class klass) {
+ List<Port> ports = new ArrayList<Port>();
+ for (Port p : getRTPorts(klass)) {
+ if (p.getRedefinedPorts() != null && !p.getRedefinedPorts().isEmpty()) {
+ ports.add(p);
+ }
+ }
+ return ports;
+ }
+
+ /**
+ * Returns an iterable over the ports redefined by the given class.
+ */
+ private static Iterable<Connector> getRedefinedConnectors(Class klass) {
+ List<Connector> connectors = new ArrayList<Connector>();
+ for (Connector c : getConnectorRedefinitions(klass)) {
+ Connector redefined = c.getRedefinedConnectors().get(0); // Assume a port redefines only one port.
+ connectors.add(redefined);
+ }
+ return connectors;
+ }
+
+ /**
+ * Returns an iterable over the ports of the given class which redefine some inherited port.
+ */
+ private static Iterable<Connector> getConnectorRedefinitions(Class klass) {
+ List<Connector> connectors = new ArrayList<Connector>();
+ for (Connector c : getRTConnectors(klass)) {
+ if (c.getRedefinedConnectors() != null && !c.getRedefinedConnectors().isEmpty()) {
+ connectors.add(c);
+ }
+ }
+ return connectors;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRealTimeStateMachProfileUtil.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRealTimeStateMachProfileUtil.xtend
new file mode 100644
index 0000000..7b5d54e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/UMLRealTimeStateMachProfileUtil.xtend
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import org.eclipse.papyrus.umlrt.statemachine.UMLRealTimeStateMach.RTTrigger
+import org.eclipse.uml2.uml.Element
+import org.eclipse.uml2.uml.Pseudostate
+import org.eclipse.uml2.uml.State
+import org.eclipse.uml2.uml.PseudostateKind
+import org.eclipse.uml2.uml.Region
+import org.eclipse.uml2.uml.StateMachine
+import org.eclipse.uml2.uml.Transition
+
+class UMLRealTimeStateMachProfileUtil
+{
+
+ static def Iterable<Pseudostate> getChoicePoints( Region region )
+ {
+ region?.internalPseudostates?.filter[ it.kind == PseudostateKind.CHOICE_LITERAL ]
+ }
+
+ static def Iterable<Pseudostate> getChoicePoints( State state )
+ {
+ state?.ownedRegion?.choicePoints
+ }
+
+ static def Iterable<Pseudostate> getChoicePoints( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.choicePoints
+ }
+
+ static def Pseudostate getDeepHistoryPoint( Region region )
+ {
+ region?.internalPseudostates?.findFirst[ it.kind == PseudostateKind.DEEP_HISTORY_LITERAL ]
+ }
+
+ static def Pseudostate getDeepHistoryPoint( State state )
+ {
+ state?.ownedRegion?.deepHistoryPoint
+ }
+
+ static def Pseudostate getDeepHistoryPoint( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.deepHistoryPoint
+ }
+
+ static def Iterable<Pseudostate> getEntryPoints( State state )
+ {
+ state.connectionPoints.filter [ it.kind == PseudostateKind.ENTRY_POINT_LITERAL ]
+ }
+
+ static def Iterable<Pseudostate> getExitPoints( State state )
+ {
+ state.connectionPoints.filter [ it.kind == PseudostateKind.EXIT_POINT_LITERAL ]
+ }
+
+ static def Pseudostate getInitialPoint( Region region )
+ {
+ region?.internalPseudostates?.findFirst[ it.kind == PseudostateKind.INITIAL_LITERAL ]
+ }
+
+ static def Pseudostate getInitialPoint( State state )
+ {
+ state?.ownedRegion?.initialPoint
+ }
+
+ static def Pseudostate getInitialPoint( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.initialPoint
+ }
+
+ static def Iterable<Pseudostate> getInternalPseudostates( Region region )
+ {
+ region?.subvertices?.filter( Pseudostate )
+ }
+
+ static def Iterable<Pseudostate> getInternalPseudostates( State state )
+ {
+ state?.ownedRegion?.internalPseudostates
+ }
+
+ static def Iterable<Pseudostate> getInternalPseudostates( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.internalPseudostates
+ }
+
+ static def Iterable<Pseudostate> getJunctionPoints( Region region )
+ {
+ region?.internalPseudostates?.filter[ it.kind == PseudostateKind.JUNCTION_LITERAL ]
+ }
+
+ static def Iterable<Pseudostate> getJunctionPoints( State state )
+ {
+ state?.ownedRegion?.junctionPoints
+ }
+
+ static def Iterable<Pseudostate> getJunctionPoints( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.junctionPoints
+ }
+
+ static def Region getOwnedRegion( State state )
+ {
+ val regions = state?.regions
+ if (regions !== null && !regions.empty)
+ regions.get(0)
+ }
+
+ static def Region getOwnedRegion( StateMachine stateMachine )
+ {
+ val regions = stateMachine?.regions
+ if (regions !== null && !regions.empty)
+ regions.get(0)
+ }
+
+ static def RTTrigger getRTTrigger(Element el) {
+ val s = el.getAppliedStereotype("UMLRealTime::RTTrigger")
+ if (s == null)
+ {
+ return null
+ }
+ return el.getStereotypeApplication(s) as RTTrigger
+ }
+
+ static def Iterable<State> getSubstates( Region region )
+ {
+ region?.subvertices?.filter( State )
+ }
+
+ static def Iterable<State> getSubstates( State state )
+ {
+ state?.ownedRegion?.substates
+ }
+
+ static def Iterable<State> getSubstates( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.substates
+ }
+
+ static def Iterable<Transition> getTransitions( Region region )
+ {
+ region?.subvertices?.filter( Transition )
+ }
+
+ static def Iterable<Transition> getTransitions( State state )
+ {
+ state?.ownedRegion?.transitions
+ }
+
+ static def Iterable<Transition> getTransitions( StateMachine stateMachine )
+ {
+ stateMachine?.ownedRegion?.transitions
+ }
+
+ static def boolean isRTTrigger( Element el )
+ {
+ val s = el.getApplicableStereotype("UMLRealTime::RTTrigger")
+ if (s != null)
+ {
+ return el.isStereotypeApplied(s)
+ }
+ return false;
+ }
+
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTElementPrinter.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTElementPrinter.xtend
new file mode 100644
index 0000000..3802b91
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTElementPrinter.xtend
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import static extension org.eclipse.papyrusrt.codegen.utils.QualifiedNames.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+import java.util.Collection
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.Pseudostate
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTTrigger
+
+class XTUMLRTElementPrinter
+{
+
+ static def str( NamedElement element )
+ '''
+ «IF element !== null»
+ «element.class.simpleName»
+ {
+ name = «element.cachedFullName»
+ «IF element.owner !== null»
+ owner = «element.owner.cachedFullName»
+ «ENDIF»
+ «element.elemAttrStr»
+ }
+ «ELSE»
+ null
+ «ENDIF»
+ '''
+
+ static dispatch def String elemAttrStr( NamedElement e )
+ '''
+ '''
+
+ static dispatch def String elemAttrStr( StateMachine m )
+ '''
+ «IF m.top !== null»«elemAttrStr( m.top as State )»«ENDIF»
+ '''
+
+ static dispatch def String elemAttrStr( Pseudostate p )
+ '''
+ «elemAttrStrVertex( p )»
+ '''
+
+ static dispatch def String elemAttrStr( SimpleState s )
+ '''
+ «elemAttrStrState( s )»
+ '''
+
+ static dispatch def String elemAttrStr( CompositeState s )
+ '''
+ «elemAttrStrState( s )»
+ initial = «str( s.initial )»
+ deepHistory = «str( s.deepHistory )»
+ choicePoints = «listString( s.choicePoints )»
+ junctionPoints = «listString( s.junctionPoints )»
+ substates = «listString( s.substates )»
+ transitions = «listString( s.transitions )»
+ '''
+
+ static def String elemAttrStrState( State s )
+ '''
+ «elemAttrStrVertex( s )»
+ entryPoints = «listString( s.entryPoints?.toList )»
+ exitPoints = «listString( s.exitPoints?.toList )»
+ '''
+
+ static def String elemAttrStrVertex( Vertex v )
+ '''
+ incomingTransitions = «nameListString( v.directIncomingTransitions?.toList )»
+ outgoingTransitions = «nameListString( v.directOutgoingTransitions?.toList )»
+ '''
+
+ static dispatch def String elemAttrStr( Transition t )
+ '''
+ sourceVertex = «t.sourceVertex?.cachedFullName»
+ targetVertex = «t.targetVertex?.cachedFullName»
+ triggers = «listString( t.triggers )»
+ guard = «str( t.guard )»
+ chain = «nameListString( t.actionChain?.actions )»
+ '''
+
+ static dispatch def String elemAttrStr( RTTrigger t )
+ '''
+ ports = «nameListString( t.ports )»
+ signal = «t.signal?.name»
+ '''
+
+ static def listString( Collection<? extends NamedElement> l )
+ '''
+ «IF l === null || l.empty»
+ []
+ «ELSE»
+ [
+ «FOR e : l SEPARATOR ';'»
+ «str( e )»
+ «ENDFOR»
+ ]
+ «ENDIF»
+ '''
+
+ static def nameListString( Collection<? extends NamedElement> l )
+ '''
+ «IF l === null || l.empty»
+ []
+ «ELSE»
+ [«FOR e : l SEPARATOR ','»«e.cachedFullName»«ENDFOR»]
+ «ENDIF»
+ '''
+
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTSMVirtualInheritanceExtensions.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTSMVirtualInheritanceExtensions.xtend
new file mode 100644
index 0000000..7a6975f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTSMVirtualInheritanceExtensions.xtend
@@ -0,0 +1,822 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import org.eclipse.papyrusrt.xtumlrt.common.DeepHistory
+import org.eclipse.papyrusrt.xtumlrt.common.EntryPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ExitPoint
+import org.eclipse.papyrusrt.xtumlrt.common.InitialPoint
+import org.eclipse.papyrusrt.xtumlrt.common.JunctionPoint
+import org.eclipse.papyrusrt.xtumlrt.common.Pseudostate
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTStateMachineUtil.*
+import java.util.Collection
+import java.util.List
+
+/**
+ * This class provides extension methods that implement "virtual state machine
+ * inheritance" as described in the UML-RT profile. This provides operations to,
+ * for example, obtain all the states and transitions inside a composite state
+ * including those inherited and those refined, as well as operations to obtain
+ * the inherited transitions to and from a state.
+ *
+ * <p>
+ */
+class XTUMLRTSMVirtualInheritanceExtensions
+{
+
+ /**
+ * Returns the initial point of the state machine if it has one, or the
+ * inherited initial point, if there is one along the inheritance hierarchy.
+ */
+ static dispatch def InitialPoint getActualInitialPoint( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return null
+ stateMachine.top.actualInitialPoint
+ }
+
+ static dispatch def InitialPoint getActualInitialPoint( CompositeState state )
+ {
+ if (state.hasInitial) state.initial
+ else
+ {
+ val refinedState = state.redefinedState
+ if (refinedState !== null && refinedState instanceof CompositeState)
+ refinedState.actualInitialPoint
+ }
+ }
+
+ /**
+ * Returns the initial point of the state machine if it has one, or the
+ * inherited initial point, if there is one along the inheritance hierarchy.
+ */
+ static dispatch def DeepHistory getActualDeepHistory( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return null
+ stateMachine.top.actualDeepHistory
+ }
+
+ static dispatch def DeepHistory getActualDeepHistory( CompositeState state )
+ {
+ if (state.hasDeepHistory) state.deepHistory
+ else
+ {
+ val refinedState = state.redefinedState
+ if (refinedState !== null && refinedState instanceof CompositeState)
+ refinedState.actualDeepHistory
+ }
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited choice points,
+ * <li> the set of new choice points which are neither inherited, not redefinitions
+ * </ol>
+ */
+ static def dispatch Iterable<ChoicePoint> getAllChoicePoints( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return #[];
+ stateMachine.top.allChoicePoints
+ }
+
+ static def dispatch Iterable<ChoicePoint> getAllChoicePoints( State state )
+ {
+ #[]
+ }
+
+ static def dispatch Iterable<ChoicePoint> getAllChoicePoints( CompositeState state )
+ {
+ val List<ChoicePoint> allChoicePoints = newArrayList
+ if (state !== null)
+ {
+ allChoicePoints.addAll( state.choicePoints )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ allChoicePoints.addAll( redefinedState.allChoicePoints )
+ }
+ }
+ allChoicePoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited connection points, and
+ * <li> the set of new connection points which are not inherited
+ * </ol>
+ */
+ static def Iterable<Pseudostate> getAllConnectionPoints( State state )
+ {
+ val List<Pseudostate> allConnectionPoints = newArrayList
+ if (state !== null)
+ {
+ if (state.connectionPoints !== null)
+ allConnectionPoints.addAll( state.connectionPoints )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedPseudostates = redefinedState.allConnectionPoints
+ allConnectionPoints.addAll( inheritedPseudostates )
+ }
+ }
+ allConnectionPoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited incoming transitions that have not been
+ * redefined,
+ * <li> the set of incoming transitions that are redefinitions of states
+ * in the extended composite state, and
+ * <li> the set of new incoming transitions which are neither inherited,
+ * not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the vertex container,
+ * so this method takes those transitions in that container and adds all
+ * inherited transitions for which there is no transition in the container
+ * redefining them.
+ */
+ static def Iterable<Transition> getAllDirectIncomingTransitions( Vertex v )
+ {
+ val List<Transition> allTransitions = newArrayList
+ if (v !== null)
+ {
+ allTransitions.addAll( v.directIncomingTransitions )
+ if (v instanceof State)
+ {
+ val redefinedState = v.redefines as State
+ if (redefinedState !== null)
+ {
+ val inheritedTransitions = redefinedState.allDirectIncomingTransitions
+ for (t : inheritedTransitions)
+ {
+ val container = v.ownerState as CompositeState
+ if ( container !== null && !container.redefines(t) )
+ allTransitions.add(t)
+ }
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited outgoing transitions that have not been
+ * redefined,
+ * <li> the set of outgoing transitions that are redefinitions of states
+ * in the extended composite state, and
+ * <li> the set of new outgoing transitions which are neither inherited,
+ * not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the vertex container,
+ * so this method takes those transitions in that container and adds all
+ * inherited transitions for which there is no transition in the container
+ * redefining them.
+ */
+ static def Iterable<Transition> getAllDirectOutgoingTransitions( Vertex v )
+ {
+ val List<Transition> allTransitions = newArrayList
+ if (v !== null)
+ {
+ allTransitions.addAll( v.directOutgoingTransitions )
+ if (v instanceof State)
+ {
+ val redefinedState = v.redefines as State
+ if (redefinedState !== null)
+ {
+ val inheritedTransitions = redefinedState.allDirectOutgoingTransitions
+ for (t : inheritedTransitions)
+ {
+ val container = v.ownerState as CompositeState
+ if ( container !== null && !container.redefines(t) )
+ allTransitions.add(t)
+ }
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited entry points, and
+ * <li> the set of new entry points which are not inherited
+ * </ol>
+ */
+ static def Iterable<EntryPoint> getAllEntryPoints( State state )
+ {
+ val List<EntryPoint> allEntryPoints = newArrayList
+ if (state !== null)
+ {
+ if (state.entryPoints !== null)
+ allEntryPoints.addAll( state.entryPoints )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedPseudostates = redefinedState.allEntryPoints
+ allEntryPoints.addAll( inheritedPseudostates )
+ }
+ }
+ allEntryPoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited entry points, and
+ * <li> the set of new entry points which are not inherited
+ * </ol>
+ */
+ static def Iterable<ExitPoint> getAllExitPoints( State state )
+ {
+ val List<ExitPoint> allExitPoints = newArrayList
+ if (state !== null)
+ {
+ if (state.entryPoints !== null)
+ allExitPoints.addAll( state.exitPoints )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedPseudostates = redefinedState.allExitPoints
+ allExitPoints.addAll( inheritedPseudostates )
+ }
+ }
+ allExitPoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited incoming transitions that have not been
+ * redefined,
+ * <li> the set of incoming transitions that are redefinitions of states
+ * in the extended composite state, and
+ * <li> the set of new incoming transitions which are neither inherited,
+ * not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the vertex container,
+ * so this method takes those transitions in that container and adds all
+ * inherited transitions for which there is no transition in the container
+ * redefining them.
+ */
+ static def Iterable<Transition> getAllIncomingTransitions( State s )
+ {
+ val List<Transition> transitions = newArrayList
+ transitions.addAll( s.allDirectIncomingTransitions )
+ transitions.addAll( s.allIndirectIncomingTransitions )
+ transitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited incoming transitions that have not been
+ * redefined,
+ * <li> the set of incoming transitions that are redefinitions of states
+ * in the extended composite state, and
+ * <li> the set of new incoming transitions which are neither inherited,
+ * not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the vertex container,
+ * so this method takes those transitions in that container and adds all
+ * inherited transitions for which there is no transition in the container
+ * redefining them.
+ */
+ static def Iterable<Transition> getAllIndirectIncomingTransitions( State s )
+ {
+ val List<Transition> allTransitions = newArrayList
+ if (s !== null)
+ {
+ allTransitions.addAll( s.indirectIncomingTransitions )
+ val redefinedState = s.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedTransitions = redefinedState.allIndirectIncomingTransitions
+ for (t : inheritedTransitions)
+ {
+ val container = s.ownerState as CompositeState
+ if ( container !== null && !container.redefines(t) )
+ allTransitions.add(t)
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited outgoing transitions that have not been
+ * redefined,
+ * <li> the set of outgoing transitions that are redefinitions of states
+ * in the extended composite state, and
+ * <li> the set of new outgoing transitions which are neither inherited,
+ * not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the vertex container,
+ * so this method takes those transitions in that container and adds all
+ * inherited transitions for which there is no transition in the container
+ * redefining them.
+ */
+ static def Iterable<Transition> getAllIndirectOutgoingTransitions( State s )
+ {
+ val List<Transition> allTransitions = newArrayList
+ if (s !== null)
+ {
+ allTransitions.addAll( s.indirectOutgoingTransitions )
+ val redefinedState = s.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedTransitions = redefinedState.allIndirectOutgoingTransitions
+ for (t : inheritedTransitions)
+ {
+ val container = s.ownerState as CompositeState
+ if ( container !== null && !container.redefines(t) )
+ allTransitions.add(t)
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited junction points,
+ * <li> the set of new junction points which are neither inherited, not redefinitions
+ * </ol>
+ */
+ static def dispatch Iterable<JunctionPoint> getAllJunctionPoints( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return #[];
+ stateMachine.top.allJunctionPoints
+ }
+
+ static def dispatch Iterable<JunctionPoint> getAllJunctionPoints( State state )
+ {
+ #[]
+ }
+
+ static def dispatch Iterable<JunctionPoint> getAllJunctionPoints( CompositeState state )
+ {
+ val List<JunctionPoint> allJunctionPoints = newArrayList
+ if (state !== null)
+ {
+ allJunctionPoints.addAll( state.junctionPoints )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ allJunctionPoints.addAll( redefinedState.allJunctionPoints )
+ }
+ }
+ allJunctionPoints
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited outgoing transitions that have not been
+ * redefined,
+ * <li> the set of outgoing transitions that are redefinitions of states
+ * in the extended composite state, and
+ * <li> the set of new outgoing transitions which are neither inherited,
+ * not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the vertex container,
+ * so this method takes those transitions in that container and adds all
+ * inherited transitions for which there is no transition in the container
+ * redefining them.
+ */
+ static def Iterable<Transition> getAllOutgoingTransitions( State s )
+ {
+ val List<Transition> transitions = newArrayList
+ transitions.addAll( s.allDirectOutgoingTransitions )
+ transitions.addAll( s.allIndirectOutgoingTransitions )
+ transitions
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited (internal) pseudostates, and
+ * <li> the set of new (internal) pseudostates which are not inherited
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static dispatch def Iterable<Pseudostate> getAllPseudostates( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return #[];
+ stateMachine.top.allPseudostates
+ }
+
+ static dispatch def Iterable<Pseudostate> getAllPseudostates( State state )
+ {
+ #[]
+ }
+
+ static dispatch def Iterable<Pseudostate> getAllPseudostates( CompositeState state )
+ {
+ val List<Pseudostate> allPseudostates = newArrayList
+ if (state !== null)
+ {
+ allPseudostates.addAll( state.pseudostates )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedPseudostates = redefinedState.allPseudostates
+ allPseudostates.addAll( inheritedPseudostates )
+ }
+ }
+ allPseudostates
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited states that have not been redefined,
+ * <li> the set of states that are redefinitions of states in the extended region, and
+ * <li> the set of new states which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def dispatch Iterable<State> getAllSubstates( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return #[];
+ stateMachine.top.allSubstates
+ }
+
+ static def dispatch Iterable<State> getAllSubstates( State state )
+ {
+ #[]
+ }
+
+ static def dispatch Iterable<State> getAllSubstates( CompositeState state )
+ {
+ val List<State> allStates = newArrayList
+ if (state !== null)
+ {
+ allStates.addAll( state.substates )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedStates = redefinedState.allSubstates
+ for (s : inheritedStates)
+ {
+ if (!state.redefines(s))
+ allStates.add(s)
+ }
+ }
+ }
+ allStates
+ }
+
+ /**
+ * Returns the union of:
+ *
+ * <ol>
+ * <li> the set inherited transitions that have not been redefined,
+ * <li> the set of transitions that are redefinitions of states in the extended region, and
+ * <li> the set of new transitions which are neither inherited, not redefinitions
+ * </ol>
+ *
+ * <p> The last two sets are already present in the given region, so this method takes
+ * those states in the current region and adds all inherited states for which there is
+ * no state in the given region redefining them.
+ */
+ static def dispatch Iterable<Transition> getAllTransitions( StateMachine stateMachine )
+ {
+ if (stateMachine.top === null) return #[];
+ stateMachine.top.allTransitions
+ }
+
+ static def dispatch Iterable<Transition> getAllTransitions( State state )
+ {
+ #[]
+ }
+
+ static def dispatch Iterable<Transition> getAllTransitions( CompositeState state )
+ {
+ val List<Transition> allTransitions = newArrayList
+ if (state !== null)
+ {
+ allTransitions.addAll( state.transitions )
+ val redefinedState = state.redefinedState
+ if (redefinedState !== null)
+ {
+ val inheritedStates = redefinedState.allTransitions
+ for (s : inheritedStates)
+ {
+ if (!state.redefines(s))
+ allTransitions.add(s)
+ }
+ }
+ }
+ allTransitions
+ }
+
+ /**
+ * Returns the state redefined by the given state or null if it doesn't
+ * redefine any.
+ */
+ static def State getRedefinedState( State s )
+ {
+ if (s === null || s.redefines === null || !(s.redefines instanceof State))
+ null
+ else
+ s.redefines as State
+ }
+
+ /**
+ * Returns a collection of states from the extended composite state that
+ * have been redefined in the given composite state.
+ */
+ static def Iterable<State> getRedefinedStates( CompositeState state )
+ {
+ state.stateRedefinitions.map [ it.redefinedState ]
+ }
+
+ /**
+ * Returns the state redefined by the given state or null if it doesn't
+ * redefine any.
+ */
+ static def Transition getRedefinedTransition( Transition t )
+ {
+ if (t === null || t.redefines === null || !(t.redefines instanceof Transition))
+ null
+ else
+ t.redefines as Transition
+ }
+
+
+ /**
+ * Returns a collection of transitions from the extended composite state
+ * that have been redefined in the given composite state.
+ */
+ static def Iterable<Transition> getRedefinedTransitions( CompositeState state )
+ {
+ state.transitionRedefinitions.map [ it.redefinedTransition ]
+ }
+
+ /**
+ * Returns the collection of states which are redefinitions of a state in
+ * the extended composite state. In other words, it returns the collection
+ * of substates of the given composite state which redefine some state.
+ */
+ static def Collection<State> getStateRedefinitions( CompositeState state )
+ {
+ val List<State> states = newArrayList
+ if (state !== null)
+ {
+ for (s : state.substates)
+ {
+ if (s.redefinedState !== null)
+ states.add(s)
+ }
+ }
+ states
+ }
+
+ /**
+ * Returns the collection of transitions which are redefinitions of a
+ * transition in the extended composite state. In other words, it returns
+ * the collection of transitions of the given composite state that redefine
+ * some transition.
+ */
+ static def Collection<Transition> getTransitionRedefinitions( CompositeState state )
+ {
+ val List<Transition> transitions = newArrayList
+ if (state !== null)
+ {
+ for (t : state.transitions)
+ {
+ if (t.redefinedTransition !== null)
+ transitions.add(t)
+ }
+ }
+ transitions
+ }
+
+ /**
+ * Returns the source vertex of a given transition inside a given composite
+ * state which may be an extended state of the state containing the "real"
+ * source of the transition. This is, if transition t is inside (composite)
+ * state r because it was inherited, this is, t is defined in and actually
+ * belongs to a (composite) state r' redefined by r, then the real source s'
+ * of t is in r', but there may be a vertex s in r which redefines s', and
+ * therefore it should be considered the source of t in r.
+ *
+ * <p> The following diagram describes the situation: t in r is inherited
+ * from r', and its real source is s' and target is d'. This method returns
+ * s, the source of t in r.
+ * <p>
+ * <pre>
+ * <code>
+ * parent state r': s' --t--> d'
+ * ^ ^ ^
+ * | | |
+ * extended state r: s --t--> d
+ * </code>
+ * </pre>
+ *
+ */
+ static def Vertex getTransitionSourceInState( Transition t, CompositeState r )
+ {
+ // Check if the source is one of the pseudostates, owned or inherited by r
+ for (s : r.allPseudostates)
+ {
+ if (t.sourceVertex === s)
+ return s
+ }
+ // Check if the source is one of the states, owned or inherited by r or a connection
+ // point for any such state
+ val statesToConsider = newArrayList
+ statesToConsider.add( r )
+ statesToConsider.addAll( r.allSubstates )
+ for (s : statesToConsider )
+ {
+ var v = s
+ // Go up the chain of state redefinitions looking for the actual source.
+ while (v !== null)
+ {
+ // Check if the source is the given state...
+ if (t.sourceVertex === v)
+ return s
+ // Check if it is the deep history pseudostate if the state is composite
+ if (v instanceof CompositeState)
+ {
+ val h = v.deepHistory
+ if (t.sourceVertex === h)
+ return h
+
+ }
+ // ... or if it is one of its connection (exit) points
+ if (v.connectionPoints !== null)
+ {
+ for (p : v.connectionPoints)
+ {
+ if (t.sourceVertex === p)
+ // p is not owned by r but we still need to report it, and since
+ // p is a pseudostate and non-redefinable, it must be inherited
+ // by s (TODO: unless it has been explicitly excluded, in which
+ // case we should report s)
+ return p
+ }
+ }
+ // If not, go up to the state that v redefines.
+ v = v.redefinedState
+ }
+ }
+ }
+
+ /**
+ * Returns the target vertex of a given transition inside a given composite
+ * state which may be an extended state of the state containing the "real"
+ * target of the transition. This is, if transition t is inside (composite)
+ * state r because it was inherited, this is, t is defined in and actually
+ * belongs to a (composite) state r' redefined by r, then the real target s'
+ * of t is in r', but there may be a vertex s in r which redefines s', and
+ * therefore it should be considered the target of t in r.
+ *
+ * <p> The following diagram describes the situation: t in r is inherited
+ * from r', and its real target is s' and target is d'. This method returns
+ * s, the target of t in r.
+ * <p>
+ * <pre>
+ * <code>
+ * parent state r': s' --t--> d'
+ * ^ ^ ^
+ * | | |
+ * extended state r: s --t--> d
+ * </code>
+ * </pre>
+ *
+ */
+ static def Vertex getTransitionTargetInState( Transition t, CompositeState r )
+ {
+ // Check if the source is one of the pseudostates, owned or inherited by r
+ for (s : r.allPseudostates)
+ {
+ if (t.targetVertex === s)
+ return s
+ }
+ // Check if the target is one of the states, owned or inherited by r or a connection
+ // point for any such state
+ val statesToConsider = newArrayList
+ statesToConsider.add( r )
+ statesToConsider.addAll( r.allSubstates )
+ for (s : statesToConsider )
+ {
+ var v = s
+ // Go up the chain of state redefinitions looking for the actual target.
+ while (v !== null)
+ {
+ // Check if the source is the given state...
+ if (t.targetVertex === v)
+ return s
+ // Check if it is the deep history pseudostate if the state is composite
+ if (v instanceof CompositeState)
+ {
+ val h = v.deepHistory
+ if (t.targetVertex === h)
+ return h
+
+ }
+ // ... or if it is one of its connection (exit) points
+ if (v.connectionPoints !== null)
+ {
+ for (p : v.connectionPoints)
+ {
+ if (t.targetVertex === p)
+ // p is not owned by r but we still need to report it, and since
+ // p is a pseudostate and non-redefinable, it must be inherited
+ // by s (TODO: unless it has been explicitly excluded, in which
+ // case we should report s)
+ return p
+ }
+ }
+ // If not, go up to the state that v redefines.
+ v = v.redefinedState
+ }
+ }
+ }
+
+ /**
+ * Returns true is the given state from the region extended by the given region is
+ * redefined in the given region.
+ *
+ * @param compositeState - A {@link CompositeState}
+ * @param state - A {@link State}
+ * @return {@code true} iff:
+ * <ol>
+ * <li> {@code state} is a substate of the composite state that
+ * is extended by the given {@code compositeState} and
+ * <li> {@code state} is redefined by some state in the given
+ * {@code compositeState}
+ * </ol>
+ */
+ static def dispatch redefines( CompositeState compositeState, State state )
+ {
+ compositeState.redefinedStates.exists [it == state]
+ }
+
+ /**
+ * Returns true is the given transition from the region extended by the given region is
+ * redefined in the given region.
+ *
+ * @param compositeState - A {@link CompositeState}
+ * @param transition - A {@link Transition}
+ * @return {@code true} iff:
+ * <ol>
+ * <li> {@code transition} is a transition in the composite state
+ * extended by the given {@code compositeState} and
+ * <li> {@code transition} is redefined by some transition in the
+ * given {@code compositeState}
+ * </ol>
+ */
+ static def dispatch redefines(CompositeState compositeState, Transition transition)
+ {
+ compositeState.redefinedTransitions.exists [it == transition]
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTStateMachineUtil.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTStateMachineUtil.xtend
new file mode 100644
index 0000000..9a2ba86
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTStateMachineUtil.xtend
@@ -0,0 +1,486 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import org.eclipse.papyrusrt.xtumlrt.common.ActionChain
+import org.eclipse.papyrusrt.xtumlrt.common.ActionCode
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import org.eclipse.papyrusrt.xtumlrt.common.DeepHistory
+import org.eclipse.papyrusrt.xtumlrt.common.EntryPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ExitPoint
+import org.eclipse.papyrusrt.xtumlrt.common.Guard
+import org.eclipse.papyrusrt.xtumlrt.common.JunctionPoint
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.Pseudostate
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Trigger
+import org.eclipse.papyrusrt.xtumlrt.common.Vertex
+import static extension org.eclipse.papyrusrt.codegen.utils.XTUMLRTUtil.*
+import java.util.List
+
+class XTUMLRTStateMachineUtil
+{
+
+ static val INSTANCE = new XTUMLRTStateMachineUtil
+
+ static def void addChoicePoint( CompositeState state, ChoicePoint point )
+ {
+ state.choicePoints.add( point )
+ }
+
+ static def void addEntryPoint( State state, EntryPoint point )
+ {
+ state.entryPoints.add( point )
+ }
+
+ static def void addExitPoint( State state, ExitPoint point )
+ {
+ state.exitPoints.add( point )
+ }
+
+ static def void addFirstAction( ActionChain chain, ActionCode action )
+ {
+ chain.actions.add( action )
+ }
+
+ static def void addJunctionPoint( CompositeState state, JunctionPoint point )
+ {
+ state.junctionPoints.add( point )
+ }
+
+ static def void addLastAction( ActionChain chain, ActionCode action )
+ {
+ chain.actions.add( action )
+ }
+
+ static def void addSubstate( CompositeState state, State s )
+ {
+ state.substates.add( s )
+ }
+
+ static def void addTransition( CompositeState state, Transition t )
+ {
+ state.transitions.add( t )
+ }
+
+ /**
+ * Returns the nesting depth of an element inside a state machine.
+ *
+ * @param element a {@link NamedElement}
+ * @return
+ * <ul>
+ * <li>-1 if element is not a state machine element
+ * <li> 0 if element is null
+ * <li> > 0 the nesting depth of the state machine element
+ * </ul>
+ */
+ def int create
+ {
+ if (element === null) 0
+ else if (!element.isStateMachineElement ) -1
+ else getCachedDepthOf( element.ownerState ) + 1
+ }
+ getCachedDepthOf( NamedElement element )
+ {
+ }
+
+ static def getCachedDepth( NamedElement element )
+ {
+ INSTANCE.getCachedDepthOf( element )
+ }
+
+ /**
+ * Returns the union of the state's owned exit and entry points.
+ */
+ static def Iterable<Pseudostate> getConnectionPoints( State state )
+ {
+ val List<Pseudostate> connectionPoints = newArrayList
+ connectionPoints.addAll( state.entryPoints )
+ connectionPoints.addAll( state.exitPoints )
+ connectionPoints
+ }
+
+ /**
+ * Returns the nesting depth of an element inside a state machine.
+ */
+ static def int getDepth( NamedElement element )
+ {
+ if (element == null || !element.isStateMachineElement ) 0
+ else element.ownerState.depth + 1
+ }
+
+ /**
+ * Returns the transitions that end directly on the state, rather than one
+ * of its entry points.
+ *
+ * <p>Note: this includes transitions owned by the state.
+ */
+ static dispatch def Iterable<Transition> getDirectIncomingTransitions( State state )
+ {
+ val List<Transition> transitions = newArrayList
+ val owner = state.ownerState as CompositeState
+ // Look for transitions in the container state if it's not the top state
+ if (owner !== null)
+ {
+ for (t : owner.transitions)
+ {
+ if (t.targetVertex == state)
+ transitions.add( t )
+ }
+ }
+ // Look for inner transitions if it's a composite state
+ if (state instanceof CompositeState)
+ {
+ for (t : state.transitions)
+ {
+ if (t.targetVertex == state)
+ transitions.add( t )
+ }
+ }
+ transitions
+ }
+
+ static dispatch def Iterable<Transition> getDirectIncomingTransitions( Pseudostate pseudostate )
+ {
+ val List<Transition> transitions = newArrayList
+ val owner = pseudostate.ownerState as CompositeState
+ if (owner !== null)
+ {
+ // Look for transitions in the container state that end in the
+ // pseudostate
+ if (owner instanceof CompositeState)
+ {
+ for (t : owner.transitions)
+ {
+ if (t.targetVertex == pseudostate)
+ transitions.add( t )
+ }
+ }
+ // If it is a connection point, look for 'outside' transitions, i.e.
+ // transitions in the composite state that contains the pseudostate's
+ // owner.
+ if (pseudostate.isConnectionPoint || pseudostate instanceof DeepHistory)
+ {
+ val ownersOwner = owner.ownerState as CompositeState
+ if (ownersOwner !== null)
+ {
+ for (t : ownersOwner.transitions)
+ {
+ if (t.targetVertex == pseudostate)
+ transitions.add( t )
+ }
+ }
+ }
+ }
+ transitions
+ }
+
+ /**
+ * Returns the transitions that leave directly from the state, rather than
+ * from one of its exit points.
+ *
+ * <p>Note: this includes transitions owned by the state.
+ */
+ static dispatch def Iterable<Transition> getDirectOutgoingTransitions( State state )
+ {
+ val List<Transition> transitions = newArrayList
+ val owner = state.ownerState as CompositeState
+ // Look for transitions in the container state if it's not the top state
+ if (owner !== null)
+ {
+ for (t : owner.transitions)
+ {
+ if (t.sourceVertex == state)
+ transitions.add( t )
+ }
+ }
+ // Look for inner transitions if it's a composite state
+ if (state instanceof CompositeState)
+ {
+ for (t : state.transitions)
+ {
+ if (t.sourceVertex == state)
+ transitions.add( t )
+ }
+ }
+ transitions
+ }
+
+ static dispatch def Iterable<Transition> getDirectOutgoingTransitions( Pseudostate pseudostate )
+ {
+ val List<Transition> transitions = newArrayList
+ val owner = pseudostate.ownerState as CompositeState
+ if (owner !== null)
+ {
+ // Look for transitions in the container state that leave the
+ // pseudostate
+ if (owner instanceof CompositeState)
+ {
+ for (t : owner.transitions)
+ {
+ if (t.sourceVertex == pseudostate)
+ transitions.add( t )
+ }
+ }
+ // If it is a connection point, look for 'outside' transitions, i.e.
+ // transitions in the composite state that contains the pseudostate's
+ // owner.
+ if (pseudostate.isConnectionPoint)
+ {
+ val ownersOwner = owner.ownerState as CompositeState
+ if (ownersOwner !== null)
+ {
+ for (t : ownersOwner.transitions)
+ {
+ if (t.sourceVertex == pseudostate)
+ transitions.add( t )
+ }
+ }
+ }
+ }
+ transitions
+ }
+
+
+ /**
+ * Returns the transitions that end in one of the entry points of the state
+ * rather than directly on the state itself.
+ *
+ * <p>Note: this includes transitions owned by the state.
+ */
+ static def Iterable<Transition> getIndirectIncomingTransitions( State state )
+ {
+ val List<Transition> transitions = newArrayList
+ for (p : state.connectionPoints)
+ {
+ transitions.addAll( p.directIncomingTransitions )
+ }
+ transitions
+ }
+
+ /**
+ * Returns the transitions that leave from one of the exit points of the
+ * state rather than directly from the state itself.
+ *
+ * <p>Note: this includes transitions owned by the state.
+ */
+ static def Iterable<Transition> getIndirectOutgoingTransitions( State state )
+ {
+ val List<Transition> transitions = newArrayList
+ for (p : state.connectionPoints)
+ {
+ transitions.addAll( p.directOutgoingTransitions )
+ }
+ transitions
+ }
+
+ static def Iterable<Pseudostate> getInnerPseudostates( CompositeState state )
+ {
+ val List<Pseudostate> pseudostates = newArrayList
+ if (state !== null)
+ {
+ pseudostates.add( state.initial )
+ pseudostates.add( state.deepHistory )
+ pseudostates.addAll( state.choicePoints )
+ pseudostates.addAll( state.junctionPoints )
+ }
+ pseudostates
+ }
+
+ static dispatch def State getOwnerState( Trigger trigger )
+ {
+ if (trigger !== null
+ && trigger.owner !== null
+ && trigger.owner.owner != null
+ && trigger.owner.owner instanceof State)
+ trigger.owner.owner as State
+ else
+ null
+ }
+
+ static dispatch def State getOwnerState( Guard guard )
+ {
+ if (guard !== null
+ && guard.owner !== null
+ && guard.owner.owner != null
+ && guard.owner.owner instanceof State)
+ guard.owner.owner as State
+ else
+ null
+ }
+
+ static dispatch def State getOwnerState( ActionChain actionChain )
+ {
+ if (actionChain !== null
+ && actionChain.owner !== null
+ && actionChain.owner.owner != null
+ && actionChain.owner.owner instanceof State)
+ actionChain.owner.owner as State
+ else
+ null
+ }
+
+ static dispatch def State getOwnerState( Vertex v )
+ {
+ if (v !== null && v.owner !== null && v.owner instanceof State)
+ v.owner as State
+ else
+ null
+ }
+
+ static dispatch def CompositeState getOwnerState( Transition t )
+ {
+ if (t !== null && t.owner !== null && t.owner instanceof CompositeState)
+ t.owner as CompositeState
+ else
+ null
+ }
+
+ static def Iterable<Pseudostate> getPseudostates( CompositeState state )
+ {
+ val List<Pseudostate> pseudostates = newArrayList
+ if (state !== null)
+ {
+ pseudostates.addAll( state.innerPseudostates )
+ pseudostates.addAll( state.connectionPoints )
+ }
+ pseudostates
+ }
+
+ /**
+ * Returns the source state of a transition: if the source vertex is a state
+ * it returns this vertex, but if it is a connection point, it returns the
+ * state that owns the connection point.
+ */
+ static def State getSourceState( Transition transition )
+ {
+ val v = transition.sourceVertex
+ if (v === null)
+ null
+ else if (v instanceof State)
+ v as State
+ else
+ v.ownerState
+ }
+
+ /**
+ * Returns the source state of a transition: if the source vertex is a state
+ * it returns this vertex, but if it is a connection point, it returns the
+ * state that owns the connection point.
+ */
+ static def State getTargetState( Transition transition )
+ {
+ val v = transition.targetVertex
+ if (v === null)
+ null
+ else if (v instanceof State)
+ v as State
+ else
+ v.ownerState
+ }
+
+ static def boolean hasDeepHistory( CompositeState state )
+ {
+ state !== null && state.deepHistory !== null
+ }
+
+ static def boolean hasInitial( CompositeState state )
+ {
+ state !== null && state.initial !== null
+ }
+
+ static def boolean isConnectionPoint( NamedElement element )
+ {
+ element instanceof EntryPoint || element instanceof ExitPoint
+ }
+
+ static def boolean isStateMachineElement( NamedElement element )
+ {
+ element instanceof Vertex
+ || element instanceof Transition
+ || element instanceof ActionChain
+ || element instanceof ActionCode
+ || element instanceof Trigger
+ || element instanceof Guard
+ }
+
+ static def void removeChoicePoint( CompositeState state, ChoicePoint choicePoint )
+ {
+ state.choicePoints.remove( choicePoint )
+ }
+
+ static dispatch def void removeConnectionPoint( State state, EntryPoint connectionPoint )
+ {
+ state.entryPoints.remove( connectionPoint )
+ }
+
+ static dispatch def void removeConnectionPoint( State state, ExitPoint connectionPoint )
+ {
+ state.exitPoints.remove( connectionPoint )
+ }
+
+ static def void removeDeepHistory( CompositeState state )
+ {
+ state.deepHistory = null
+ }
+
+ static def void removeEntryPoint( State state, EntryPoint point )
+ {
+ state.entryPoints.remove( point )
+ }
+
+ static def void removeExitPoint( State state, ExitPoint point )
+ {
+ state.exitPoints.remove( point )
+ }
+
+
+ static def void removeGuard( Transition transition )
+ {
+ transition.guard = null
+ }
+
+ static def void removeInitial( CompositeState state )
+ {
+ state.initial = null
+ }
+
+ static def void removeJunctionPoint( CompositeState state, JunctionPoint junctionPoint )
+ {
+ state.junctionPoints.remove( junctionPoint )
+ }
+
+ static def void removeTransition( CompositeState state, Transition transition )
+ {
+ state.transitions.remove( transition )
+ }
+
+ static def void removeTriggers( Transition transition )
+ {
+ for (trigger : transition.triggers.clone)
+ {
+ transition.triggers.remove( trigger )
+ }
+ }
+
+ static def void removeSubstate( CompositeState state, State subState )
+ {
+ state.substates.remove( subState )
+ }
+
+ static def void removeState( StateMachine stateMachine, State subState )
+ {
+ stateMachine.top.removeSubstate( subState )
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTUtil.xtend b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTUtil.xtend
new file mode 100644
index 0000000..7b906de
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.utils/src/org/eclipse/papyrusrt/codegen/utils/XTUMLRTUtil.xtend
@@ -0,0 +1,315 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen.utils
+
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart
+import org.eclipse.papyrusrt.xtumlrt.common.Connector
+import org.eclipse.papyrusrt.xtumlrt.common.DirectionKind
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.Model
+import org.eclipse.papyrusrt.xtumlrt.common.MultiplicityElement
+import org.eclipse.papyrusrt.xtumlrt.common.Package
+import org.eclipse.papyrusrt.xtumlrt.common.Port
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol
+import org.eclipse.papyrusrt.xtumlrt.common.Signal
+import org.eclipse.papyrusrt.xtumlrt.common.VisibilityKind
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPort
+import java.util.Comparator
+import java.util.TreeSet
+import org.eclipse.papyrusrt.xtumlrt.umlrt.PortRegistration
+
+class XTUMLRTUtil
+{
+
+ static class NameComparator implements Comparator<NamedElement>
+ {
+ override int compare( NamedElement o1, NamedElement o2 )
+ {
+ // null sorts earlier
+ if (o1 == null)
+ return if (o2 == null) 0 else -1
+ if (o2 == null)
+ return 1
+
+ val name1 = o1.name
+ val name2 = o2.name
+ if (name1 == null)
+ return if (name2 == null) 0 else -1
+ if (name2 == null)
+ return 1
+
+ return name1.compareTo(name2);
+ }
+ }
+
+ static dispatch def Iterable<Capsule> getAllCapsules( Model model )
+ {
+ val set = new TreeSet<Capsule>( new NameComparator )
+ set.addAll( model.topEntities.filter( Capsule ) )
+ for ( pkg : model.rootPackages )
+ {
+ set.addAll( pkg.allCapsules )
+ }
+ set
+ }
+
+ static dispatch def Iterable<Capsule> getAllCapsules( Package packge )
+ {
+ val set = new TreeSet<Capsule>( new NameComparator )
+ set.addAll( packge.entities.filter( Capsule ) )
+ set
+ }
+
+ /**
+ * Returns the set of all ports in the class, including those which have been inherited
+ * and those which are redefinitions of inherited ports.
+ */
+ static def Iterable<CapsulePart> getAllCapsuleParts( Capsule capsule )
+ {
+ val allParts = new TreeSet<CapsulePart>( new NameComparator() )
+ if (capsule !== null)
+ {
+ allParts.addAll( capsule.parts )
+ val parentElement = capsule.redefines
+ if (parentElement !== null && parentElement instanceof Capsule)
+ {
+ val parent = parentElement as Capsule
+ allParts.addAll( parent.allCapsuleParts.filter [ !redefines( capsule, it) ] )
+ }
+ }
+ allParts
+ }
+
+ /**
+ * Returns the set of all ports in the class, including those which have been inherited
+ * and those which are redefinitions of inherited ports.
+ */
+ static def Iterable<Connector> getAllConnectors( Capsule capsule )
+ {
+ val allConnectors = new TreeSet<Connector>( new NameComparator() )
+ if (capsule !== null)
+ {
+ allConnectors.addAll( capsule.connectors )
+ val parentElement = capsule.redefines
+ if (parentElement !== null && parentElement instanceof Capsule)
+ {
+ val parent = parentElement as Capsule
+ allConnectors.addAll( parent.allConnectors )
+ }
+ }
+ allConnectors
+ }
+
+ /**
+ * Returns the set of all ports in the class, including those which have been inherited
+ * and those which are redefinitions of inherited ports.
+ */
+ static def Iterable<Port> getAllRTPorts( Capsule capsule )
+ {
+ val allPorts = new TreeSet<Port>( new NameComparator() )
+ if (capsule !== null)
+ {
+ allPorts.addAll( capsule.RTPorts )
+ val parentElement = capsule.redefines
+ if (parentElement !== null && parentElement instanceof Capsule)
+ {
+ val parent = parentElement as Capsule
+ allPorts.addAll( parent.allRTPorts.filter [ !redefines( capsule, it) ] )
+ }
+ }
+ allPorts
+ }
+
+ /**
+ * A filter that produces only Parts that are properly stereotyped as RTCapsulePart
+ * and have a Capsule as type
+ */
+ static def Iterable<CapsulePart> getCapsuleParts( Capsule capsule ) {
+ // Ports are put into a sorted list to make sure that the order is
+ // stable between
+ // different parts of the generator (as well as between invocations).
+ val parts = new TreeSet<CapsulePart>( new NameComparator() )
+ parts.addAll( capsule.parts.filter [ it.type !== null ] )
+ parts
+ }
+
+ static def Iterable<Signal> getInSignals( Protocol protocol )
+ {
+ protocol.protocolBehaviourFeatures
+ .filter [ it instanceof Signal && it.kind == DirectionKind.IN ]
+ .map [it as Signal]
+ }
+
+ static def Iterable<Signal> getInOutSignals( Protocol protocol )
+ {
+ protocol.protocolBehaviourFeatures
+ .filter [ it instanceof Signal && it.kind == DirectionKind.IN_OUT ]
+ .map [it as Signal]
+ }
+
+ /**
+ * Find and return the given element's lower bound. Throws an exception is the
+ * element has an invalid lower bound.
+ */
+ static def <T extends MultiplicityElement & NamedElement> int getLowerBound( T element )
+ {
+ // published ports always have a lower-bound of 0
+ if (element instanceof RTPort && (element as RTPort).isPublish)
+ return 0
+ val bound = element.getLowerBound()
+ if (bound < 0)
+ throw new RuntimeException( "lower bound must be specified for " + QualifiedNames.fullName( element ) )
+ return bound
+ }
+
+ static def Iterable<Signal> getOutSignals( Protocol protocol )
+ {
+ protocol.protocolBehaviourFeatures
+ .filter [ it instanceof Signal && it.kind == DirectionKind.OUT ]
+ .map [it as Signal]
+ }
+
+ static def NamedElement getOwner( NamedElement element )
+ {
+ element.eContainer as NamedElement
+ }
+
+ static def Model getModel( NamedElement element )
+ {
+ var elem = element
+ while ( elem !== null && !(elem instanceof Model) && elem.owner !== null )
+ elem = elem.owner
+ elem as Model
+ }
+
+ /**
+ * Returns an iterable over the ports of the given class which redefine some inherited port.
+ */
+ static def Iterable<CapsulePart> getPartRedefinitions( Capsule capsule )
+ {
+ capsule.parts.filter[ it.redefines !== null && it.redefines instanceof CapsulePart ]
+ }
+
+ /**
+ * Returns an iterable over the ports of the given class which redefine some inherited port.
+ */
+ static def Iterable<Port> getPortRedefinitions( Capsule capsule )
+ {
+ capsule.ports.filter[ it.redefines !== null && it.redefines instanceof Port ]
+ }
+
+ /**
+ * Returns an iterable over the ports redefined by the given class.
+ */
+ static def Iterable<CapsulePart> getRedefinedParts( Capsule capsule )
+ {
+ capsule.partRedefinitions.map [ it.redefines as CapsulePart ]
+ }
+
+ /**
+ * Returns an iterable over the ports redefined by the given class.
+ */
+ static def Iterable<Port> getRedefinedPorts( Capsule capsule )
+ {
+ capsule.portRedefinitions.map [ it.redefines as Port ]
+ }
+
+ /**
+ * A filter that produces only Ports that are properly stereotyped as RTPort
+ * and have a UML-RT protocol.
+ */
+ static def Iterable<Port> getRTPorts( Capsule capsule ) {
+ // Ports are put into a sorted list to make sure that the order is
+ // stable between
+ // different parts of the generator (as well as between invocations).
+ val ports = new TreeSet<Port>( new NameComparator() )
+ ports.addAll( capsule.ports.filter [ it.type !== null ] )
+ ports
+ }
+
+ static def Iterable<Signal> getSignals( Protocol protocol )
+ {
+ protocol.protocolBehaviourFeatures.map [ it as Signal ]
+ }
+
+ /**
+ * Find and return the given element's upper bound. Throws an exception is the
+ * element has an invalid upper bound.
+ */
+ static def <T extends MultiplicityElement & NamedElement> int getUpperBound( T element )
+ {
+ val bound = element.getUpperBound()
+ if ( bound < 0 )
+ throw new RuntimeException( "upper bound must be specified for " + QualifiedNames.fullName( element ) );
+ return bound
+ }
+
+ static def isInternalPort( Port port )
+ {
+ ! (port.getVisibility() == VisibilityKind.PUBLIC)
+ || (port instanceof RTPort && (port as RTPort).isPublish);
+ }
+
+ static def isWired( Port port )
+ {
+ port instanceof RTPort && (port as RTPort).wired
+ }
+
+ /** True if the port should be registered as SAP/SPP at startup or during creation. */
+ static def isAutomatic( Port port )
+ {
+ port instanceof RTPort && (port as RTPort).registration == PortRegistration.AUTOMATIC;
+ }
+
+ /** True if the port is application-locked. */
+ static def isApplicationLocked( Port port )
+ {
+ port instanceof RTPort && (port as RTPort).registration == PortRegistration.APPLICATIONLOCKED;
+ }
+
+ /** True when user requested binding notification. */
+ static def isNotification( Port port )
+ {
+ port instanceof RTPort && (port as RTPort).notification
+ }
+
+ /** Return the model-supplied registered name override. */
+ static def getRegistrationOverride( Port port )
+ {
+ if( ! ( port instanceof RTPort ) )
+ null
+ else
+ (port as RTPort).registrationOverride
+ }
+
+ /**
+ * Return true if the element is replicated and false otherwise.
+ */
+ static def <T extends MultiplicityElement & NamedElement> boolean isReplicated( T element )
+ {
+ element.getLowerBound() != 1 || element.getUpperBound() != 1
+ }
+
+ /**
+ * Returns true iff the given port is inherited and redefined by the given class.
+ */
+ private static dispatch def redefines( Capsule capsule, Port port )
+ {
+ capsule.redefinedPorts.exists[ it == port ]
+ }
+
+ /**
+ * Returns true iff the given port is inherited and redefined by the given class.
+ */
+ private static dispatch def redefines( Capsule capsule, CapsulePart part )
+ {
+ capsule.redefinedParts.exists[ it == part ]
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/.classpath b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/.classpath
new file mode 100644
index 0000000..30d130d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="xtend-gen"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/.project b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/.project
new file mode 100644
index 0000000..dae736f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen.xtumlrt.trans</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b211a0b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: UML2-to-xtUMLrt translator
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen.xtumlrt.trans
+Bundle-Version: 0.5.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-Vendor: Zeligsoft (2009) Limited
+Require-Bundle: org.eclipse.core.runtime;bundle-version="3.11.0",
+ org.eclipse.papyrus.cpp.profile,
+ org.eclipse.papyrus.umlrt;bundle-version="1.0.1",
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.utils,
+ org.eclipse.papyrusrt.codegen.statemachines.flat.model,
+ org.eclipse.papyrusrt.xtumlrt.common.model,
+ org.eclipse.papyrusrt.xtumlrt.umlrt.model,
+ org.eclipse.papyrusrt.xtumlrt.platform.cpp.model,
+ org.eclipse.uml2.types,
+ org.eclipse.uml2.uml;bundle-version="4.1.0",
+ org.eclipse.xtend.lib;bundle-version="2.7.2"
+Export-Package: org.eclipse.papyrusrt.codegen.xtumlrt.trans
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/about.html b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/about.properties b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/build.properties b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/build.properties
new file mode 100644
index 0000000..08373bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/pom.xml b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/pom.xml
new file mode 100644
index 0000000..e537ba2
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen.xtumlrt.trans</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtCppProfileTranslator.xtend b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtCppProfileTranslator.xtend
new file mode 100644
index 0000000..0130182
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtCppProfileTranslator.xtend
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+package org.eclipse.papyrusrt.codegen.xtumlrt.trans
+
+import org.eclipse.papyrus.C_Cpp.Include
+import org.eclipse.papyrus.C_Cpp.Ptr
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.PlatformcppmodelFactory
+import org.eclipse.papyrusrt.xtumlrt.platformmodel.PlatformElement
+import org.eclipse.emf.common.util.EList
+import org.eclipse.emf.common.util.BasicEList
+import org.eclipse.papyrus.C_Cpp.C_CppPackage
+import org.eclipse.papyrus.C_Cpp.NoCodeGen
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.CppInclude
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.CppPtr
+import org.eclipse.papyrusrt.xtumlrt.platformcppmodel.GenerationProperties
+
+/**
+ * This class translates stereotypes from the Papyrus C++ profile into
+ * PlatformElements from xtumlrt.platform.cpp.model
+ *
+ * @author Ernesto Posse
+ */
+class UML2xtumlrtCppProfileTranslator
+{
+
+ static val INSTANCE = new UML2xtumlrtCppProfileTranslator
+
+ static def EList<PlatformElement> getPlatformElements( NamedElement element )
+ {
+ INSTANCE.getCachedPlatformElements( element )
+ }
+
+ /**
+ * Given a UML2 NamedElement we translate each of its C++ stereotypes (from
+ * the Papyrus C++ profile) into corresponding {@link PlatformElement}s in the
+ * xtumlrt.platform.cpp.model.
+ *
+ * <p>We add a reference from each new {@link PlatformElement} to the
+ * (translated xtumlrt) {@link NamedElement}, more precisely the
+ * {@link NamedElement} is added to the {@link PlatformElement}'s list of
+ * {@code referredElements}.
+ *
+ * <p>We also add the newly created {@link PlatformElement} to the list of
+ * platform elements associated to the {@link NamedElement}. Since the
+ * {@link NamedElement} doesn't actually hold this list, we keep an internal
+ * cache with these associations. The list of platform elements of a given
+ * {@link NamedElement} can be accessed with the static
+ * {@link #getPlatformElements} method.
+ */
+ static def translateStereotypedElement
+ (
+ org.eclipse.uml2.uml.NamedElement element,
+ NamedElement newElement
+ )
+ {
+ if (element === null || newElement === null || element.applicableStereotypes === null)
+ return;
+ for (stereotype : element.appliedStereotypes)
+ {
+ switch (stereotype.profile.name)
+ {
+ case "RTCppProperties":
+ translateRTCppProfileStereotype( element, newElement, stereotype )
+ case "C_Cpp":
+ translatePapyrusCppProfileStereotype( element, newElement, stereotype )
+ }
+ }
+ }
+ dispatch def create PlatformcppmodelFactory.eINSTANCE.createCppInclude
+ translateStereotype( Include include )
+ {
+ header = include.header
+ body = include.body
+ }
+
+ dispatch def create PlatformcppmodelFactory.eINSTANCE.createCppPtr
+ translateStereotype( Ptr ptr )
+ {
+ declaration = ptr.declaration
+ }
+
+ dispatch def create PlatformcppmodelFactory.eINSTANCE.createGenerationProperties
+ translateStereotype( NoCodeGen nocodegen )
+ {
+ generate = false
+ }
+
+ def EList<PlatformElement>
+ create new BasicEList<PlatformElement>
+ getCachedPlatformElements( NamedElement element )
+ {
+ }
+
+ static def translatePapyrusCppProfileStereotype
+ (
+ org.eclipse.uml2.uml.NamedElement element,
+ NamedElement newElement,
+ org.eclipse.uml2.uml.Stereotype stereotype
+ )
+ {
+ var PlatformElement platformElement = null
+ switch (stereotype.definition.classifierID)
+ {
+ case C_CppPackage.INCLUDE:
+ {
+ val include = element.getStereotypeApplication( stereotype ) as Include
+ if (include !== null)
+ platformElement = INSTANCE.translateStereotype( include )
+ }
+ case C_CppPackage.PTR:
+ {
+ val ptr = element.getStereotypeApplication( stereotype ) as Ptr
+ if (ptr !== null)
+ platformElement = INSTANCE.translateStereotype( ptr )
+ }
+ case C_CppPackage.NO_CODE_GEN:
+ {
+ val nocodegen = element.getStereotypeApplication( stereotype ) as NoCodeGen
+ if (nocodegen !== null)
+ platformElement = INSTANCE.translateStereotype( nocodegen )
+ }
+ }
+ if (platformElement !== null)
+ {
+ platformElement.referredElements.add( newElement )
+ INSTANCE.getCachedPlatformElements( newElement ).add( platformElement )
+ }
+ }
+
+ static def translateRTCppProfileStereotype
+ (
+ org.eclipse.uml2.uml.NamedElement element,
+ NamedElement newElement,
+ org.eclipse.uml2.uml.Stereotype stereotype
+ )
+ {
+ throw new UnsupportedOperationException("TODO: auto-generated method stub")
+ }
+
+ static def getCppInclude( NamedElement element )
+ {
+ val annotations = UML2xtumlrtCppProfileTranslator.getPlatformElements(element);
+ if( annotations == null || annotations.isEmpty() )
+ return null
+ annotations.findFirst[ it instanceof CppInclude ] as CppInclude
+ }
+
+ static def getCppPtr( NamedElement element )
+ {
+ val annotations = UML2xtumlrtCppProfileTranslator.getPlatformElements(element);
+ if( annotations == null || annotations.isEmpty() )
+ return null
+ annotations.findFirst[ it instanceof CppPtr ] as CppPtr
+ }
+
+ static def getGenerationProperties( NamedElement element )
+ {
+ val annotations = UML2xtumlrtCppProfileTranslator.getPlatformElements(element);
+ if( annotations == null || annotations.isEmpty() )
+ return null
+ annotations.findFirst[ it instanceof GenerationProperties ] as GenerationProperties
+ }
+
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtModelTranslator.xtend b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtModelTranslator.xtend
new file mode 100644
index 0000000..3995314
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtModelTranslator.xtend
@@ -0,0 +1,817 @@
+/*******************************************************************************
+* Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.xtumlrt.trans
+
+import java.io.IOException
+import java.nio.file.Path
+import java.nio.file.Paths
+import java.util.Collection
+import java.util.Collections
+import java.util.List
+import java.util.Set
+
+import com.google.common.collect.BiMap
+import com.google.common.collect.HashBiMap
+import org.eclipse.core.runtime.IStatus
+import org.eclipse.core.runtime.MultiStatus
+import org.eclipse.emf.common.util.URI
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.emf.ecore.resource.ResourceSet
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTMessageKind
+import org.eclipse.papyrusrt.codegen.CodeGenPlugin
+import org.eclipse.papyrusrt.codegen.utils.UML2CppUtil
+import org.eclipse.papyrusrt.xtumlrt.common.Attribute
+import org.eclipse.papyrusrt.xtumlrt.common.Capsule
+import org.eclipse.papyrusrt.xtumlrt.common.CapsuleKind
+import org.eclipse.papyrusrt.xtumlrt.common.CapsulePart
+import org.eclipse.papyrusrt.xtumlrt.common.CommonFactory
+import org.eclipse.papyrusrt.xtumlrt.common.Connector
+import org.eclipse.papyrusrt.xtumlrt.common.ConnectorEnd
+import org.eclipse.papyrusrt.xtumlrt.common.DirectionKind
+import org.eclipse.papyrusrt.xtumlrt.common.Entity
+import org.eclipse.papyrusrt.xtumlrt.common.Model
+import org.eclipse.papyrusrt.xtumlrt.common.MultiplicityElement
+import org.eclipse.papyrusrt.xtumlrt.common.NamedElement
+import org.eclipse.papyrusrt.xtumlrt.common.Operation
+import org.eclipse.papyrusrt.xtumlrt.common.Package
+import org.eclipse.papyrusrt.xtumlrt.common.Parameter
+import org.eclipse.papyrusrt.xtumlrt.common.Port
+import org.eclipse.papyrusrt.xtumlrt.common.PrimitiveType
+import org.eclipse.papyrusrt.xtumlrt.common.Protocol
+import org.eclipse.papyrusrt.xtumlrt.common.ProtocolBehaviourFeatureKind
+import org.eclipse.papyrusrt.xtumlrt.common.RedefinableElement
+import org.eclipse.papyrusrt.xtumlrt.common.Signal
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.StructMember
+import org.eclipse.papyrusrt.xtumlrt.common.StructType
+import org.eclipse.papyrusrt.xtumlrt.common.Type
+import org.eclipse.papyrusrt.xtumlrt.common.VisibilityKind
+import org.eclipse.papyrusrt.xtumlrt.umlrt.PortRegistration
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPassiveClass
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPort
+import org.eclipse.papyrusrt.xtumlrt.umlrt.UmlrtFactory
+import static extension org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.GeneralUtil.*
+import org.eclipse.emf.common.util.Enumerator
+
+/**
+ * This class translates models from the UML2 meta-model (org.eclipse.uml2) into the xtUMLrt
+ * meta-model (org.eclipse.papyrusrt.xtumlrt).
+ *
+ * <p>Each element is mapped to the corresponding element by a method. There are a few cases where
+ * the same input element may be mapped into more than one kind of output element. For example
+ * a UML2 Package may be mapped to an xtUMLrt Package, but a UML2 Package which is a protocol
+ * container, as defined in the UML-RT profile, is mapped to an xtUMLrt protocol. Similarly,
+ * a UML2 Class may be mapped to a Capsule, an rtPassiveClass or a xtClass. In these cases, the
+ * output type of the corresponding method is the least-common ancestor in the (meta-class)
+ * type hierarchy.
+ *
+ * <p>The translation is recursive on the structure of elements, this is, the translation of
+ * composite elements (elements which may contain other elements), also translates its
+ * contained elements. This rule applies not only for "Composition" references: for example,
+ * when translating a capsule, we need to translate its ports, which have a protocol as type,
+ * so we need to get the translation of the protocol as well, even though it is not owned by
+ * neither the port nor the capsule. In order to avoid translating the same elements twice, and
+ * to avoid generation cycles, many of these methods are 'create' methods, which only create
+ * the relevant element the first time and cache the result so that future invocations of the
+ * translate method return the same translated element.
+ *
+ * @author Ernesto Posse
+ */
+ @SuppressWarnings( "deprecated" )
+class UML2xtumlrtModelTranslator extends UML2xtumlrtTranslator
+{
+
+ static val XTUMLRT_EXTENSION = "xtumlrt"
+ List<EObject> targets
+ Path outputPath
+ BiMap<EObject, NamedElement> generated
+ Set<EObject> changed
+ UML2xtumlrtSMTranslator stateMachineTranslator
+ static val RTS_MODEL_LIB_CLASSES =
+ #[
+ "UMLRTSignal",
+ "UMLRTMessage",
+ "UMLRTCommsPort",
+ "UMLRTCapsulePart",
+ "UMLRTCapsuleId",
+ "UMLRTTimerId",
+ "UMLRTTimeSpec"
+ ]
+ static val RTS_MODEL_LIB_PROTOCOLS =
+ #[
+ "UMLRTBaseCommProtocol",
+ "UMLRTFrameProtocol",
+ "UMLRTLogProtocol",
+ "UMLRTTimerProtocol"
+ ]
+ static val RTS_MODEL_LIB_DATATYPES =
+ #[
+ "UMLRTCommsPort",
+ "UMLRTCapsulePart"
+ ]
+ static val RTS_MODEL_LIB_ENUMS =
+ #[
+ "Priorities"
+ ]
+
+ new ()
+ {
+ this.generated = HashBiMap.create
+ this.changed = newHashSet
+ this.stateMachineTranslator = new UML2xtumlrtSMTranslator( this )
+ init
+ }
+
+ new ( List<EObject> targets, Path outputPath )
+ {
+ this()
+ this.targets = targets
+ this.outputPath = outputPath
+ }
+
+ private static def init()
+ {
+ val registry = Resource.Factory.Registry.INSTANCE
+ registry.extensionToFactoryMap.put( XTUMLRT_EXTENSION, new XMIResourceFactoryImpl )
+ }
+
+ def setChangeSet( Collection<EObject> changedElements )
+ {
+ changed.addAll( changedElements )
+ }
+
+ def setTargets( List<EObject> targets )
+ {
+ this.targets = targets
+ }
+
+ def setOutputPath( Path outputPath )
+ {
+ this.outputPath = outputPath
+ }
+
+ def IStatus generate()
+ {
+ var MultiStatus result = new MultiStatus( CodeGenPlugin.ID, IStatus.INFO, "UML-RT to xtUMLrt translator invoked", null );
+ try
+ {
+ for (element : changed)
+ {
+ resetTranslateCache( element )
+ }
+ var start = System.currentTimeMillis();
+ for (target : targets)
+ {
+ if ( !(target instanceof org.eclipse.uml2.uml.Element) )
+ {
+ result.add( CodeGenPlugin.info( "Ignoring element " + target.toString() + ": it is not a UML2 element." ) )
+ }
+ else
+ {
+ generated.put( target, translate( target as org.eclipse.uml2.uml.Element ) as NamedElement )
+ }
+ }
+ changed = newHashSet
+ result.add( CodeGenPlugin.info("Translated model to xtUMLrt sucessfully " + (System.currentTimeMillis() - start) + "ms") )
+ }
+ catch (Exception e)
+ {
+ result.add( CodeGenPlugin.error("Error while translating model to xtUMLrt", e) )
+ }
+ result
+ }
+
+ def List<EObject> getAllGenerated()
+ {
+ generated.values.map[ it as EObject ].toList
+ }
+
+ def NamedElement getGenerated( EObject eObject )
+ {
+ generated.get( eObject )
+ }
+
+ def EObject getSource( NamedElement element )
+ {
+ generated.inverse.get( element )
+ }
+
+ def boolean write()
+ {
+ var boolean success = true
+ val ResourceSet resourceSet = new ResourceSetImpl
+ for (target : targets)
+ {
+ val uri = target.eResource().getURI();
+ val elementPath = Paths.get( uri.path() );
+ val fileName = elementPath.fileName.toString
+ val fileNameWithoutExt = fileName.substring(0, fileName.lastIndexOf('.'))
+ val newFileName = fileNameWithoutExt + "." + XTUMLRT_EXTENSION
+ val fullPath = outputPath.resolve( newFileName ).toString
+ val resource = resourceSet.createResource( URI.createFileURI( fullPath ))
+ resource.contents.add( generated.get( target ) )
+ try
+ {
+ resource.save( Collections.EMPTY_MAP )
+ }
+ catch (IOException e)
+ {
+ success = false
+ }
+ }
+ success
+ }
+
+ override EObject translateElement( org.eclipse.uml2.uml.Element umlElement )
+ {
+ val translated = translate( umlElement )
+ if (!(translated instanceof EObject))
+ throw new TranslationException( umlElement, "-", org.eclipse.uml2.uml.Element, EObject, umlElement.class, translated.class, "The result of translating this element did not yield an EMF object")
+ translated as EObject
+ }
+
+ override def Enumerator translateKind( Enum<?> kind )
+ {
+ val translated = translateEnum( kind )
+ if (!(translated instanceof Enumerator))
+ throw new TranslationException( kind, "-", Enum , Enumerator, kind.class, translated?.class, "The result of translating this element did not yield an EMF Enumerator")
+ translated as Enumerator
+ }
+
+
+ /**
+ * Sets the 'redefines' reference of a RedefinableElement in the target meta-model to the
+ * translation of the element it redefines (assuming it's only one at most).
+ *
+ * <p>This method does not create the RedefinableElement in the target meta-model. That
+ * instance is created by any of the other {@code translate} methods, and this one just
+ * updates the {@code refines} reference to the (translated) element being refined.
+ */
+ protected def translateRedefinableElement
+ (
+ org.eclipse.uml2.uml.RedefinableElement element,
+ RedefinableElement newElement
+ )
+ {
+ if (element.redefinedElements !== null && !element.redefinedElements.empty)
+ {
+ val redefinedElement = element.redefinedElements.get(0)
+ newElement.redefines = translate( redefinedElement ) as RedefinableElement
+ }
+ }
+
+ protected def translateMultiplicityElement
+ (
+ org.eclipse.uml2.uml.MultiplicityElement element,
+ MultiplicityElement newElement
+ )
+ {
+ newElement.unique = element.unique
+ newElement.ordered = element.ordered
+ newElement.lowerBound = element.lowerBound
+ newElement.upperBound = element.upperBound
+ }
+
+ /**
+ * Translates a package.
+ *
+ * <p>In UML-RT, protocols are represented as a collection of elements (a collaboration,
+ * some interfaces, etc.) grouped together in a package container. This method decides
+ * whether it is dealing with a "normal" package, or a "protocol container" package, and
+ * invokes the relevant translation.
+ *
+ * @param packge - A {@link org.eclipse.uml2.uml.Package}
+ * @return Either an xtUMLrt {@link Package} or a {@link Protocol} if the input is a
+ * protocol container.
+ */
+ dispatch def NamedElement
+ create
+ if (packge.isRTSModelLibraryProtocolContainer)
+ translateRTSLibraryProtocolContainer( packge )
+ else if (packge instanceof org.eclipse.uml2.uml.Model)
+ translateModel( packge )
+ else if (packge.isProtocolContainer)
+ translateProtocolContainer( packge )
+ else
+ translatePackage( packge )
+ translate( org.eclipse.uml2.uml.Package packge )
+ {
+ name = packge.name
+ UML2xtumlrtCppProfileTranslator.translateStereotypedElement( packge, it )
+ }
+
+ def boolean isRTSModelLibraryProtocolContainer( org.eclipse.uml2.uml.Package packge )
+ {
+ RTS_MODEL_LIB_PROTOCOLS.contains( packge.name )
+ }
+
+ protected def Protocol translateRTSLibraryProtocolContainer( org.eclipse.uml2.uml.Package packge )
+ {
+ val it = CommonFactory.eINSTANCE.createProtocol
+ name = packge.name
+ it
+ }
+
+ protected def Model translateModel( org.eclipse.uml2.uml.Model model )
+ {
+ val it = CommonFactory.eINSTANCE.createModel
+ for (element : model.packagedElements)
+ {
+ if (element instanceof org.eclipse.uml2.uml.Class)
+ topEntities.addIfNotPresent( translate(element) as Entity )
+ else if (element.isProtocolContainer)
+ topProtocols.addIfNotPresent( translate(element) as Protocol )
+ else if (element instanceof org.eclipse.uml2.uml.Package)
+ rootPackages.addIfNotPresent( translate(element) as Package )
+ }
+ it
+ }
+
+ protected def Protocol translateProtocolContainer( org.eclipse.uml2.uml.Package packge )
+ {
+ translate( packge.protocolCollaboration ) as Protocol
+ }
+
+ protected def Package translatePackage( org.eclipse.uml2.uml.Package packge )
+ {
+ val it = CommonFactory.eINSTANCE.createPackage
+ for (element : packge.packagedElements)
+ {
+ if (element instanceof org.eclipse.uml2.uml.Class)
+ entities.addIfNotPresent( translate(element) as Entity )
+ else if (element.isProtocolContainer)
+ protocols.addIfNotPresent( translate(element) as Protocol )
+ else if (element instanceof org.eclipse.uml2.uml.Package)
+ packages.addIfNotPresent( translate(element) as Package )
+ }
+ it
+ }
+
+ /**
+ * @param collaboration - A {@link org.eclipse.uml2.uml.Collaboration}
+ * @return A {@link Protocol} if the collaboration is a protocol, {@code null} otherwise
+ */
+ dispatch def Protocol
+ create
+ if (collaboration.isRTSModelLibraryProtocol)
+ translateRTSModelLibraryProtocol( collaboration )
+ else if (collaboration.isProtocol)
+ translateProtocol( collaboration )
+ translate( org.eclipse.uml2.uml.Collaboration collaboration )
+ {
+ name = collaboration.name
+ translateRedefinableElement( collaboration, it )
+ }
+
+ def boolean isRTSModelLibraryProtocol( org.eclipse.uml2.uml.Collaboration collaboration )
+ {
+ RTS_MODEL_LIB_PROTOCOLS.contains( collaboration.name )
+ }
+
+ protected def translateRTSModelLibraryProtocol( org.eclipse.uml2.uml.Collaboration collaboration )
+ {
+ translateProtocol( collaboration )
+ }
+
+ protected def Protocol translateProtocol( org.eclipse.uml2.uml.Collaboration collaboration )
+ {
+ val it = CommonFactory.eINSTANCE.createProtocol
+ name = collaboration.name
+ for (iface : collaboration.allRealizedInterfaces) // Q: what's the difference between this and allImplementedInterfaces?
+ {
+ if (iface.isRTMessageSet)
+ {
+ val rtMsgKind = iface.getRTMessageSet.rtMsgKind
+ if (rtMsgKind == RTMessageKind.IN || rtMsgKind == RTMessageKind.IN_OUT)
+ {
+ for (operation : iface.ownedOperations)
+ {
+ protocolBehaviourFeatures.add( translate(operation) as Signal )
+ }
+ }
+ }
+ }
+ for (iface : collaboration.allUsedInterfaces())
+ {
+ if (iface.isRTMessageSet)
+ {
+ val rtMsgKind = iface.getRTMessageSet.rtMsgKind
+ if (rtMsgKind == RTMessageKind.OUT || rtMsgKind == RTMessageKind.IN_OUT)
+ {
+ for (operation : iface.ownedOperations)
+ {
+ protocolBehaviourFeatures.add( translate(operation) as Signal )
+ }
+ }
+ }
+ }
+ it
+ }
+
+ /**
+ * @param operation - A {@link org.eclipse.uml2.uml.Operation}
+ * @return A {@link Operation}
+ */
+ dispatch def NamedElement
+ create
+ if (operation.interface.isRTMessageSet)
+ translateSignal( operation )
+ else
+ translateOperation( operation )
+ translate( org.eclipse.uml2.uml.Operation operation )
+ {
+ name = operation.name
+ UML2xtumlrtCppProfileTranslator.translateStereotypedElement( operation, it )
+ }
+
+ protected def Operation translateOperation( org.eclipse.uml2.uml.Operation operation )
+ {
+ val it = CommonFactory.eINSTANCE.createOperation
+ for (parameter : operation.ownedParameters)
+ {
+ parameters.add( translate(parameter) as Parameter )
+ }
+ returnType = translateFeature( operation, "type", org.eclipse.uml2.uml.Type, Type ) as Type
+ val actionCode = CommonFactory.eINSTANCE.createActionCode
+ actionCode.source = UML2CppUtil.getCppCode( operation )
+ body = actionCode
+ it
+ }
+
+ protected def translateSignal( org.eclipse.uml2.uml.Operation operation )
+ {
+ val it = CommonFactory.eINSTANCE.createSignal
+ for (parameter : operation.ownedParameters)
+ {
+ parameters.add( translate(parameter) as Parameter )
+ }
+ if (operation.interface.isRTMessageSet)
+ {
+ val rtMsgKind = operation.interface.getRTMessageSet.rtMsgKind
+ switch (rtMsgKind)
+ {
+ case RTMessageKind.IN: kind = ProtocolBehaviourFeatureKind.IN
+ case RTMessageKind.OUT: kind = ProtocolBehaviourFeatureKind.OUT
+ case RTMessageKind.IN_OUT: kind = ProtocolBehaviourFeatureKind.INOUT
+ }
+ }
+ it
+ }
+
+ /**
+ * @param klass - A {@link org.eclipse.uml2.uml.Class}
+ * @return An {@link Entity}: either a {@link Capsule}, {@link RTPassiveClass} or
+ * {@link xtClass}.
+ */
+ dispatch def Type
+ create
+ if (klass.isRTSModelLibraryClass)
+ translateRTSModelLibraryClass( klass ) as PrimitiveType
+ else if (klass.isCapsule)
+ translateCapsule( klass ) as Entity
+ else
+ translateRTPassiveClass( klass ) as Entity
+ translate( org.eclipse.uml2.uml.Class klass )
+ {
+ name = klass.name
+ UML2xtumlrtCppProfileTranslator.translateStereotypedElement( klass, it )
+ }
+
+ protected def boolean isRTSModelLibraryClass( org.eclipse.uml2.uml.Class klass )
+ {
+ RTS_MODEL_LIB_CLASSES.contains( klass.name )
+ }
+
+ protected def translateRTSModelLibraryClass( org.eclipse.uml2.uml.Class klass )
+ {
+ val it = CommonFactory.eINSTANCE.createPrimitiveType
+ name = klass.name
+ it
+ }
+
+ protected def translateBasicClass( org.eclipse.uml2.uml.Class klass, Entity newClass )
+ {
+ for (attribute : klass.ownedAttributes)
+ {
+ if (!attribute.isRTPort && !attribute.isCapsulePart)
+ newClass.attributes.add( translate(attribute) as Attribute )
+ }
+ for (operation : klass.ownedOperations)
+ {
+ newClass.operations.add( translate(operation) as Operation )
+ }
+ if (klass.ownedBehaviors !== null
+ && !klass.ownedBehaviors.empty
+ && klass.ownedBehaviors.get(0) instanceof org.eclipse.uml2.uml.StateMachine)
+ {
+ var org.eclipse.uml2.uml.StateMachine stateMachine =
+ klass.ownedBehaviors.get(0) as org.eclipse.uml2.uml.StateMachine
+ newClass.behaviour = translate( stateMachine ) as StateMachine
+ }
+ }
+
+ protected def Capsule translateCapsule( org.eclipse.uml2.uml.Class klass )
+ {
+ val it = CommonFactory.eINSTANCE.createCapsule
+ translateBasicClass( klass, it )
+ translateRedefinableElement( klass, it )
+ for (part : klass.capsuleParts)
+ {
+ parts.add( translate(part) as CapsulePart )
+ }
+ for (port : klass.RTPorts)
+ {
+ ports.add( translate(port) as Port )
+ }
+ for (connector : klass.RTConnectors)
+ {
+ connectors.add( translate(connector) as Connector )
+ }
+ it
+ }
+
+ protected def RTPassiveClass translateRTPassiveClass( org.eclipse.uml2.uml.Class klass )
+ {
+ val it = UmlrtFactory.eINSTANCE.createRTPassiveClass
+ translateBasicClass( klass, it )
+ translateRedefinableElement( klass, it )
+ it
+ }
+
+ /**
+ * @param property - A {@link org.eclipse.uml2.uml.Property}
+ * @return An {@link Attribute} or {@link CapsulePart}
+ */
+ dispatch def NamedElement
+ create
+ {
+ val newProperty =
+ if (property.isCapsulePart)
+ translateCapsulePart( property )
+ else if (property.isRTPort)
+ translateRTPort( property )
+ else
+ translateAttribute( property )
+ newProperty as NamedElement
+ }
+ translate( org.eclipse.uml2.uml.Property property )
+ {
+ name = property.name
+ translateMultiplicityElement( property, it as MultiplicityElement )
+ UML2xtumlrtCppProfileTranslator.translateStereotypedElement( property, it )
+ }
+
+ protected def Attribute translateAttribute( org.eclipse.uml2.uml.Property property )
+ {
+ val it = CommonFactory.eINSTANCE.createAttribute
+ type = translateFeature( property, "type", org.eclipse.uml2.uml.Type, Type ) as Type
+ visibility = translateEnumFeature( property, "visibility", org.eclipse.uml2.uml.VisibilityKind, VisibilityKind ) as VisibilityKind
+ it
+ }
+
+ protected def CapsulePart translateCapsulePart( org.eclipse.uml2.uml.Property property )
+ {
+ val it = CommonFactory.eINSTANCE.createCapsulePart
+ type = translateFeature( property, "type", org.eclipse.uml2.uml.Class, Capsule ) as Capsule
+ if (property.lower == 0)
+ {
+ if (property.aggregation == org.eclipse.uml2.uml.AggregationKind.SHARED_LITERAL)
+ {
+ kind = CapsuleKind.PLUGIN
+ }
+ else
+ {
+ kind = CapsuleKind.OPTIONAL
+ }
+ }
+ else
+ {
+ kind = CapsuleKind.FIXED
+ }
+ it
+ }
+
+ protected def Port translatePort( org.eclipse.uml2.uml.Property property )
+ {
+ val it = CommonFactory.eINSTANCE.createPort
+ type = translateFeature( property, "type", org.eclipse.uml2.uml.Collaboration, Protocol ) as Protocol
+ conjugate = (property as org.eclipse.uml2.uml.Port).conjugated
+ it
+ }
+
+ protected def RTPort translateRTPort( org.eclipse.uml2.uml.Property property )
+ {
+ val it = UmlrtFactory.eINSTANCE.createRTPort
+ type = translateFeature( property, "type", org.eclipse.uml2.uml.Collaboration, Protocol ) as Protocol
+ conjugate = (property as org.eclipse.uml2.uml.Port).conjugated
+ val rtPort = property.getRTPort
+ if (rtPort !== null)
+ {
+ notification = rtPort.notification
+ publish = rtPort.publish
+ wired = rtPort.wired
+ switch ( rtPort.registration )
+ {
+ case AUTOMATIC: registration = PortRegistration.AUTOMATIC
+ case APPLICATION: registration = PortRegistration.APPLICATION
+ case APPLICATION_LOCKED: registration = PortRegistration.APPLICATIONLOCKED
+ }
+ }
+ it
+ }
+
+ /**
+ * @param connector - A {@link org.eclipse.uml2.uml.Connector}
+ * @return A {@link Connector}
+ */
+ dispatch def Connector translate( org.eclipse.uml2.uml.Connector connector )
+ {
+ val it = CommonFactory.eINSTANCE.createConnector
+ name = connector.name
+ for (end : connector.ends)
+ {
+ ends.add( translate(end) as ConnectorEnd )
+ }
+ it
+ }
+
+ /**
+ * @param connectorEnd - A {@link org.eclipse.uml2.uml.ConnectorEnd}
+ * @return A {@link ConnectorEnd}
+ */
+ dispatch def ConnectorEnd translate( org.eclipse.uml2.uml.ConnectorEnd connectorEnd )
+ {
+ val it = CommonFactory.eINSTANCE.createConnectorEnd
+ role = translateFeature( connectorEnd, "role", org.eclipse.uml2.uml.Port, Port ) as Port
+ partWithPort =
+ if (connectorEnd.partWithPort === null)
+ null
+ else
+ translateFeature( connectorEnd, "partWithPort", org.eclipse.uml2.uml.Property, CapsulePart ) as CapsulePart
+ it
+ }
+
+ /**
+ * @param parameter - A {@link org.eclipse.uml2.uml.Parameter}
+ * @return A {@link Parameter}
+ */
+ dispatch def Parameter
+ create CommonFactory.eINSTANCE.createParameter
+ translate( org.eclipse.uml2.uml.Parameter parameter )
+ {
+ name = parameter.name
+ type = translateFeature( parameter, "type", org.eclipse.uml2.uml.Type, Type ) as Type
+ direction = translateEnumFeature( parameter, "direction", org.eclipse.uml2.uml.ParameterDirectionKind, DirectionKind ) as DirectionKind
+ UML2xtumlrtCppProfileTranslator.translateStereotypedElement( parameter, it )
+ }
+
+ /**
+ * @param type - A {@link org.eclipse.uml2.uml.DataType}
+ * @return A {@link StructType} or {@link PrimitiveType}
+ */
+ dispatch def Type
+ create
+ if (dataType.isRTSModelLibraryDataType)
+ translateRTSModelLibraryDataType( dataType )
+ else if (dataType instanceof org.eclipse.uml2.uml.PrimitiveType)
+ translatePrimitiveType( dataType )
+ else
+ translateStructType( dataType )
+ translate( org.eclipse.uml2.uml.DataType dataType )
+ {
+ name = dataType.name
+ // Do not translate unknown types
+ }
+
+ def boolean isRTSModelLibraryDataType( org.eclipse.uml2.uml.DataType dataType )
+ {
+ RTS_MODEL_LIB_DATATYPES.contains( dataType )
+ }
+
+ protected def translateRTSModelLibraryDataType( org.eclipse.uml2.uml.DataType dataType )
+ {
+ val it = CommonFactory.eINSTANCE.createPrimitiveType
+ name = dataType.name
+ it
+ }
+
+ protected def PrimitiveType translatePrimitiveType
+ (
+ org.eclipse.uml2.uml.PrimitiveType primitiveType
+ )
+ {
+ val newType = CommonFactory.eINSTANCE.createPrimitiveType
+ switch (primitiveType)
+ {
+ case org.eclipse.uml2.types.TypesPackage.eINSTANCE.boolean: newType.name = "Boolean"
+ case org.eclipse.uml2.types.TypesPackage.eINSTANCE.integer: newType.name = "Integer"
+ case org.eclipse.uml2.types.TypesPackage.eINSTANCE.string: newType.name = "String"
+ case org.eclipse.uml2.types.TypesPackage.eINSTANCE.real: newType.name = "Real"
+ case org.eclipse.uml2.types.TypesPackage.eINSTANCE.unlimitedNatural: newType.name = "UnlimitedNatural"
+ default: newType.name = primitiveType.name
+ }
+ newType
+ }
+
+ protected def StructType translateStructType
+ (
+ org.eclipse.uml2.uml.DataType dataType
+ )
+ {
+ val newType = CommonFactory.eINSTANCE.createStructType
+ for ( attr : dataType.getAllAttributes )
+ {
+ newType.structMembers.add( translateStructMember( attr ) )
+ }
+ newType
+ }
+
+ protected def StructMember translateStructMember
+ (
+ org.eclipse.uml2.uml.Property attribute
+ )
+ {
+ val member = CommonFactory.eINSTANCE.createStructMember
+ member.name = attribute.name
+ member.type = translateFeature( attribute ,"type", org.eclipse.uml2.uml.Type, Type ) as Type
+ member
+ }
+
+ /**
+ * @param type - A {@link org.eclipse.uml2.uml.Type}
+ * @return A {@link Type}
+ */
+ dispatch def Type translate( org.eclipse.uml2.uml.Type type )
+ {
+ // Do not translate unknown types
+ }
+
+ /**
+ * @param stateMachine - A {@link org.eclipse.uml2.uml.StateMachine}
+ * @return A {@link StateMachine}
+ */
+ dispatch def StateMachine translate( org.eclipse.uml2.uml.StateMachine stateMachine )
+ {
+ stateMachineTranslator.translateStateMachine( stateMachine )
+ }
+
+ /**
+ * @param visibilityKind - A {@link org.eclipse.uml2.uml.VisibilityKind}
+ * @return The corresponding {@link VisibilityKind}
+ */
+ dispatch def translateEnum( org.eclipse.uml2.uml.VisibilityKind visibilityKind )
+ {
+ switch (visibilityKind)
+ {
+ case org.eclipse.uml2.uml.VisibilityKind.PUBLIC_LITERAL: VisibilityKind.PUBLIC
+ case org.eclipse.uml2.uml.VisibilityKind.PRIVATE_LITERAL: VisibilityKind.PRIVATE
+ case org.eclipse.uml2.uml.VisibilityKind.PROTECTED_LITERAL: VisibilityKind.PROTECTED
+ default: VisibilityKind.PUBLIC
+ }
+ }
+
+ /**
+ * @param directionKind - A {@link org.eclipse.uml2.uml.ParameterDirectionKind}
+ * @return The corresponding {@link DirectionKind}
+ */
+ dispatch def translateEnum
+ (
+ org.eclipse.uml2.uml.ParameterDirectionKind directionKind
+ )
+ {
+ switch (directionKind)
+ {
+ case org.eclipse.uml2.uml.ParameterDirectionKind.IN_LITERAL: DirectionKind.IN
+ case org.eclipse.uml2.uml.ParameterDirectionKind.OUT_LITERAL: DirectionKind.OUT
+ }
+ }
+
+ /**
+ * @param behavior - A {@link org.eclipse.uml2.uml.Behavior}
+ * @return An {@link ActionCode} instance.
+ */
+ protected def translateActionCode( org.eclipse.uml2.uml.Behavior behavior )
+ {
+ val it = CommonFactory.eINSTANCE.createActionCode
+ source = UML2CppUtil.getCppCode( behavior )
+ it
+ }
+
+
+ def resetTranslateCache( EObject element )
+ {
+ val key = newArrayList( element )
+ _createCache_translate.remove( key )
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtSMTranslator.xtend b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtSMTranslator.xtend
new file mode 100644
index 0000000..8697814
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtSMTranslator.xtend
@@ -0,0 +1,323 @@
+/*******************************************************************************
+* Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.xtumlrt.trans
+
+import static extension org.eclipse.papyrusrt.codegen.utils.UMLRealTimeStateMachProfileUtil.*
+import static extension org.eclipse.papyrusrt.codegen.utils.GeneralUtil.*
+import org.eclipse.papyrusrt.codegen.utils.UML2CppUtil
+import org.eclipse.papyrusrt.xtumlrt.common.CommonFactory
+import org.eclipse.papyrusrt.xtumlrt.common.CompositeState
+import org.eclipse.papyrusrt.xtumlrt.common.ChoicePoint
+import org.eclipse.papyrusrt.xtumlrt.common.DeepHistory
+import org.eclipse.papyrusrt.xtumlrt.common.EntryPoint
+import org.eclipse.papyrusrt.xtumlrt.common.ExitPoint
+import org.eclipse.papyrusrt.xtumlrt.common.InitialPoint
+import org.eclipse.papyrusrt.xtumlrt.common.JunctionPoint
+import org.eclipse.papyrusrt.xtumlrt.common.Signal
+import org.eclipse.papyrusrt.xtumlrt.common.SimpleState
+import org.eclipse.papyrusrt.xtumlrt.common.State
+import org.eclipse.papyrusrt.xtumlrt.common.StateMachine
+import org.eclipse.papyrusrt.xtumlrt.common.Transition
+import org.eclipse.papyrusrt.xtumlrt.common.Trigger
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTTrigger
+import org.eclipse.papyrusrt.xtumlrt.umlrt.RTPort
+import org.eclipse.papyrusrt.xtumlrt.umlrt.UmlrtFactory
+import org.eclipse.papyrusrt.codegen.statemachines.flat.model.smflatmodel.SmflatmodelFactory
+
+class UML2xtumlrtSMTranslator
+{
+
+ // UML2xtumlrtTranslator provides methods to translate ports and signals, used in triggers
+ UML2xtumlrtModelTranslator uml2xtumlrtTranslator
+
+ new (UML2xtumlrtModelTranslator uml2xtumlrtTranslator)
+ {
+ this.uml2xtumlrtTranslator = uml2xtumlrtTranslator
+ }
+
+ /**
+ * This is the main method. It creates a dummy composite state to be used
+ * as the State Machine's top composite state.
+ *
+ * @param originalStateMachine - A {@link org.eclipse.uml2.uml.StateMachine}
+ * @return A {@link StateMachine}
+ */
+ def StateMachine
+ create CommonFactory.eINSTANCE.createStateMachine
+ translateStateMachine( org.eclipse.uml2.uml.StateMachine originalStateMachine )
+ {
+ name = originalStateMachine.name
+ top = translateRegion( originalStateMachine.ownedRegion )
+ top.name = "top"
+ }
+
+ /**
+ * Translates a region into a composite state. This is because in UML-RT, (composite) states
+ * have exactly one region, so there is a one-to-one correspondance between them.
+ */
+ protected def CompositeState
+ create
+ if (region == null) null
+ else CommonFactory.eINSTANCE.createCompositeState
+ translateRegion( org.eclipse.uml2.uml.Region region )
+ {
+ if (region !== null)
+ {
+ initial = translateInitialPoint( region.initialPoint )
+ deepHistory = translateDeepHistory( region.deepHistoryPoint )
+ for (element : region.choicePoints)
+ {
+ choicePoints.addIfNotNull( translateChoicePoint(element) )
+ }
+ for (element : region.junctionPoints)
+ {
+ junctionPoints.addIfNotNull( translateJunctionPoint(element) )
+ }
+ for (element : region.substates)
+ {
+ substates.addIfNotNull( translateState(element) )
+ }
+ for (element : region.transitions)
+ {
+ transitions.addIfNotNull( translateTransition(element) )
+ }
+ }
+ }
+
+ /**
+ * Translates a state from the source model into a state in the internal
+ * representation.
+ *
+ * Essentially it just decides which translation to apply depending on
+ * whether the state is simple or composite (in UML-RT there are no
+ * "sub-state-machine" states.)
+ *
+ * @param originalState - the UML2 state element in the original model
+ */
+ protected def State
+ create
+ if (originalState.isSimpleState)
+ translateSimpleState( originalState )
+ else
+ translateCompositeState( originalState )
+ translateState( org.eclipse.uml2.uml.State originalState )
+ {
+ if (it !== null)
+ {
+ name = originalState.name
+ entryAction = translateEntryAction( originalState )
+ exitAction = translateExitAction( originalState )
+ for (entryPoint : originalState.entryPoints)
+ {
+ entryPoints.addIfNotNull( translateEntryPoint(entryPoint) )
+ }
+ for (exitPoint : originalState.exitPoints)
+ {
+ exitPoints.addIfNotNull( translateExitPoint(exitPoint) )
+ }
+ }
+ }
+
+ def isSimpleState( org.eclipse.uml2.uml.State originalState )
+ {
+ originalState.simple
+ || originalState.composite
+ && (originalState.regions === null
+ || originalState.regions.empty
+ || (originalState.regions.size == 1
+ && (originalState.regions.get(0) as org.eclipse.uml2.uml.Region).isEmpty))
+ }
+
+ def boolean isEmpty( org.eclipse.uml2.uml.Region region )
+ {
+ if (region.extendedRegion === null)
+ region.ownedElements === null || region.ownedElements.empty
+ else
+ (region.ownedElements === null && region.ownedElements.empty) && region.extendedRegion.isEmpty
+ }
+
+ /**
+ * Translates a simple state.
+ */
+ protected def SimpleState translateSimpleState( org.eclipse.uml2.uml.State originalState )
+ {
+ CommonFactory.eINSTANCE.createSimpleState
+ }
+
+ /**
+ * Translates a composite state by translating its sub-elements (vertices
+ * and transitions).
+ *
+ * <p>When traversing the sub-states, the translation is applied recursively.
+ */
+ protected def CompositeState
+ translateCompositeState( org.eclipse.uml2.uml.State originalState )
+ {
+ translateRegion( originalState.ownedRegion )
+ }
+
+ protected def InitialPoint
+ create
+ if (originalPseudostate === null) null
+ else CommonFactory.eINSTANCE.createInitialPoint
+ translateInitialPoint( org.eclipse.uml2.uml.Pseudostate originalPseudostate )
+ {
+ if (it !== null) name = originalPseudostate.name
+ }
+
+ protected def DeepHistory
+ create
+ if (originalPseudostate === null) null
+ else CommonFactory.eINSTANCE.createDeepHistory
+ translateDeepHistory( org.eclipse.uml2.uml.Pseudostate originalPseudostate )
+ {
+ if (it !== null) name = originalPseudostate.name
+ }
+
+ protected def EntryPoint
+ create CommonFactory.eINSTANCE.createEntryPoint
+ translateEntryPoint( org.eclipse.uml2.uml.Pseudostate originalPseudostate )
+ {
+ name = originalPseudostate?.name
+ }
+
+ protected def ExitPoint
+ create CommonFactory.eINSTANCE.createExitPoint
+ translateExitPoint( org.eclipse.uml2.uml.Pseudostate originalPseudostate )
+ {
+ name = originalPseudostate?.name
+ }
+
+ protected def ChoicePoint
+ create CommonFactory.eINSTANCE.createChoicePoint
+ translateChoicePoint( org.eclipse.uml2.uml.Pseudostate originalPseudostate )
+ {
+ name = originalPseudostate?.name
+ }
+
+ protected def JunctionPoint
+ create CommonFactory.eINSTANCE.createJunctionPoint
+ translateJunctionPoint( org.eclipse.uml2.uml.Pseudostate originalPseudostate )
+ {
+ name = originalPseudostate?.name
+ }
+
+ protected def dispatch translateVertex( org.eclipse.uml2.uml.State originalState )
+ {
+ translateState(originalState)
+ }
+
+ protected def dispatch translateVertex
+ (
+ org.eclipse.uml2.uml.Pseudostate originalPseudostate
+ )
+ {
+ switch (originalPseudostate.kind)
+ {
+ case INITIAL_LITERAL: translateInitialPoint(originalPseudostate)
+ case DEEP_HISTORY_LITERAL: translateDeepHistory(originalPseudostate)
+ case CHOICE_LITERAL: translateChoicePoint(originalPseudostate)
+ case JUNCTION_LITERAL: translateJunctionPoint(originalPseudostate)
+ case ENTRY_POINT_LITERAL: translateEntryPoint(originalPseudostate)
+ case EXIT_POINT_LITERAL: translateExitPoint(originalPseudostate)
+ default: null
+ }
+ }
+
+ protected def create
+ if (originalState.entry === null) null
+ else SmflatmodelFactory.eINSTANCE.createEntryAction
+ translateEntryAction( org.eclipse.uml2.uml.State originalState )
+ {
+ if (it !== null && originalState?.entry !== null)
+ {
+ name = originalState.entry.name
+ source = UML2CppUtil.getCppCode( originalState.entry )
+ }
+ }
+
+ protected def create
+ if (originalState.exit === null) null
+ else SmflatmodelFactory.eINSTANCE.createExitAction
+ translateExitAction( org.eclipse.uml2.uml.State originalState )
+ {
+ if (it !== null && originalState?.exit !== null)
+ {
+ name = originalState.exit.name
+ source = UML2CppUtil.getCppCode( originalState.exit )
+ }
+ }
+
+ protected def Transition
+ create CommonFactory.eINSTANCE.createTransition
+ translateTransition( org.eclipse.uml2.uml.Transition originalTransition )
+ {
+ name = originalTransition.name
+ sourceVertex = translateVertex( originalTransition.source )
+ targetVertex = translateVertex( originalTransition.target )
+ for (trigger : originalTransition.triggers)
+ {
+ triggers.addIfNotNull( translateTransitionTrigger(trigger) )
+ }
+ guard = translateTransitionGuard( originalTransition )
+ actionChain = CommonFactory.eINSTANCE.createActionChain
+ actionChain.actions.addIfNotNull( translateTransitionAction( originalTransition ) )
+ }
+
+ /**
+ * @param trigger - A {@link org.eclipse.uml2.uml.Trigger}
+ * @return A {@link Trigger}
+ */
+ protected def Trigger
+ create
+ // if (trigger.isRTTrigger) // This test should be here, but the current profile doesn't have the RTTrigger stereotype
+ translateRTTrigger( trigger )
+ translateTransitionTrigger( org.eclipse.uml2.uml.Trigger trigger )
+ {
+ name = trigger.name
+ }
+
+ protected def RTTrigger translateRTTrigger( org.eclipse.uml2.uml.Trigger trigger )
+ {
+ val it = UmlrtFactory.eINSTANCE.createRTTrigger
+ for (port : trigger.ports)
+ {
+ ports.addIfNotNull( uml2xtumlrtTranslator.translateElement(port) as RTPort)
+ }
+ val operation = (trigger.event as org.eclipse.uml2.uml.CallEvent).operation
+ signal = uml2xtumlrtTranslator.translateElement( operation ) as Signal
+ it
+ }
+
+ protected def create
+ if (originalTransition.guard === null) null
+ else CommonFactory.eINSTANCE.createGuard
+ translateTransitionGuard( org.eclipse.uml2.uml.Transition originalTransition )
+ {
+ if (it !== null)
+ {
+ name = originalTransition.guard?.name
+ body = CommonFactory.eINSTANCE.createActionCode
+ body.source = UML2CppUtil.getCppCode( originalTransition.guard )
+ }
+ }
+
+ protected def create
+ if (originalTransition.effect === null) null
+ else SmflatmodelFactory.eINSTANCE.createTransitionAction
+ translateTransitionAction( org.eclipse.uml2.uml.Transition originalTransition )
+ {
+ if (it !== null && originalTransition?.effect !== null)
+ {
+ name = originalTransition.effect?.name
+ source = UML2CppUtil.getCppCode( originalTransition.effect )
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtTranslator.xtend b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtTranslator.xtend
new file mode 100644
index 0000000..1f3222d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen.xtumlrt.trans/src/org/eclipse/papyrusrt/codegen/xtumlrt/trans/UML2xtumlrtTranslator.xtend
@@ -0,0 +1,194 @@
+/*******************************************************************************
+* Copyright (c) 2015 Zeligsoft (2009) Limited and others.
+* 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
+*******************************************************************************/
+
+package org.eclipse.papyrusrt.codegen.xtumlrt.trans
+
+import org.eclipse.xtend.lib.annotations.Data
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.common.util.Enumerator
+import org.eclipse.papyrusrt.codegen.DetailedThrowable
+
+/**
+ * This is the base class for translators from UML2 to xtUMLrt.
+ *
+ * <p> The goal of this class is to provide functionality to deal with potentially
+ * malformed input models.
+ *
+ * <p>The main idea is that a translator must provide a {@code translateElement}
+ * method which receives a UML2 model element as input and returns an xtUMLrt
+ * element as output.
+ *
+ * <p>Such a method, implemented by subclasses as visitors would normally be
+ * recursive, but instead of invoking {@code translateElement} directly, each
+ * case method should invoke the {@code translateFeature} provided by this base
+ * class, on each relevant sub-feature of the UML element being translated. This
+ * {@code translateFeature} provides the necessary sanity checks and other
+ * required generation-time validation.
+ *
+ * @author Ernesto Posse
+ */
+abstract class UML2xtumlrtTranslator
+{
+ abstract def EObject translateElement( org.eclipse.uml2.uml.Element element )
+ abstract def Enumerator translateKind( Enum<?> kind )
+
+ def translateFeature
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType
+ )
+ {
+ checkFeature( umlElement, featureName, expectedSourceType, expectedTargetType )
+ val feature = getFeature( umlElement, featureName, expectedSourceType, expectedTargetType )
+ val featureContent = umlElement.eGet( feature )
+ checkFeatureContent( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent )
+ val result = translateElement( featureContent as org.eclipse.uml2.uml.Element )
+ checkFeatureResult( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent.class, result )
+ result
+ }
+
+ def translateEnumFeature
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType
+ )
+ {
+ checkFeature( umlElement, featureName, expectedSourceType, expectedTargetType )
+ val feature = getFeature( umlElement, featureName, expectedSourceType, expectedTargetType )
+ val featureContent = umlElement.eGet( feature )
+ checkKindFeatureContent( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent )
+ val result = translateKind( featureContent as Enum<?> )
+ checkFeatureResult( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent.class, result )
+ result
+ }
+
+ def getFeature
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType
+ )
+ {
+ val feature = umlElement.eClass.EAllStructuralFeatures.findFirst[ it.name == featureName ]
+ if (feature === null)
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedSourceType, null, null, "Attempting to translate a feature which doesn't exist in a UML element")
+ feature
+ }
+
+ def checkFeature
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType
+ )
+ {
+ if (umlElement === null && featureName === null)
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, null, null, "Attempting to translate a null feature of a null UML element" )
+ if (umlElement === null && featureName !== null)
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, null, null, "Attempting to translate a feature of a null UML element" )
+ if (featureName === null)
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, null, null, "Attempting to translate a null feature of a UML element")
+ }
+
+ def checkFeatureContent
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType,
+ Object featureContent
+ )
+ {
+ if ( featureContent === null )
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, null, null, "The value of this UML element feature is null but should not be null" )
+ if ( !(featureContent instanceof org.eclipse.uml2.uml.Element) )
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent.class, null, "Feature value is not a UML element" )
+ if ( !expectedSourceType.isInstance( featureContent ))
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent.class, null, "The actual type of this feature's value does not match its expected type" )
+ }
+
+ def checkKindFeatureContent
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType,
+ Object featureContent
+ )
+ {
+ if ( featureContent === null )
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, null, null, "The value of a UML element feature is null" )
+ if ( !(featureContent instanceof org.eclipse.uml2.uml.Enumeration) && !(featureContent instanceof Enum<?>) )
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent.class, null, "Feature value is not a UML enumeration" )
+ if ( !expectedSourceType.isInstance( featureContent ))
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, featureContent.class, null, "The actual type of this feature's value does not match its expected type" )
+ }
+
+ def checkFeatureResult
+ (
+ org.eclipse.uml2.uml.Element umlElement,
+ String featureName,
+ Class<?> expectedSourceType,
+ Class<?> expectedTargetType,
+ Class<?> actualSourceType,
+ Object result
+ )
+ {
+ if (!expectedTargetType.isInstance( result ))
+ throw new TranslationException( umlElement, featureName, expectedSourceType, expectedTargetType, actualSourceType, result.class, "The translated element's type does not match the expected type")
+ }
+
+ @Data
+ static class TranslationException extends DetailedThrowable
+ {
+ Object element
+ String feature
+ Class<?> expectedSourceType
+ Class<?> expectedTargetType
+ Class<?> actualSourceType
+ Class<?> actualTargetType
+ String msg
+
+ override String toString()
+ '''
+ Translation error: «msg»
+ UML element: «getUMLElementInfoStr»
+ Feature: «feature»
+ Expected UML type: «maybeNullStr(expectedSourceType)»
+ Actual UML type: «maybeNullStr(actualSourceType)»
+ «compatibleTypes( expectedSourceType, actualSourceType, "UML element")»
+ Expected translated type: «maybeNullStr(expectedTargetType)»
+ Actual translated type: «maybeNullStr(actualTargetType)»
+ «compatibleTypes( expectedTargetType, actualTargetType, "translated element")»
+ '''
+
+ def maybeNullStr( Class<?> c )
+ '''«IF c === null»<undefined>«ELSE»«c.name»«ENDIF»'''
+
+ def String getUMLElementInfoStr()
+ {
+ if (element === null) return "null UML element"
+ if (element instanceof org.eclipse.uml2.uml.NamedElement)
+ return element.qualifiedName
+ if (element instanceof Enum<?>)
+ return element.name
+ return "non-UML element: " + element.toString
+ }
+
+ def compatibleTypes( Class<?> source, Class<?> target, String item )
+ '''«IF source !== null && target !== null»«IF source.isAssignableFrom(target)»[OK] «ELSE»[ERROR] «ENDIF»The actual «item» type is «IF !source.isAssignableFrom(target)»NOT «ENDIF»compatible with the expected «item» type«ENDIF»'''
+
+ }
+
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.codegen/.classpath b/codegen/org.eclipse.papyrusrt.codegen/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.codegen/.project b/codegen/org.eclipse.papyrusrt.codegen/.project
new file mode 100644
index 0000000..7517119
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.codegen</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.codegen/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.codegen/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.codegen/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.codegen/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.codegen/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.codegen/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..40e76c8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT CodeGen Plugin
+Bundle-SymbolicName: org.eclipse.papyrusrt.codegen
+Bundle-Version: 0.5.0.qualifier
+Bundle-Activator: org.eclipse.papyrusrt.codegen.CodeGenPlugin
+Bundle-Vendor: Zeligsoft (2009) Limited
+Require-Bundle: org.eclipse.core.runtime;visibility:=reexport,
+ org.eclipse.xtext.xbase.lib
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.papyrusrt.codegen
diff --git a/codegen/org.eclipse.papyrusrt.codegen/about.html b/codegen/org.eclipse.papyrusrt.codegen/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.codegen/about.properties b/codegen/org.eclipse.papyrusrt.codegen/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.codegen/build.properties b/codegen/org.eclipse.papyrusrt.codegen/build.properties
new file mode 100644
index 0000000..17daa5b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.codegen/pom.xml b/codegen/org.eclipse.papyrusrt.codegen/pom.xml
new file mode 100644
index 0000000..f891278
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.codegen</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.codegen/src/org/eclipse/papyrusrt/codegen/CodeGenPlugin.java b/codegen/org.eclipse.papyrusrt.codegen/src/org/eclipse/papyrusrt/codegen/CodeGenPlugin.java
new file mode 100644
index 0000000..cb664d5
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/src/org/eclipse/papyrusrt/codegen/CodeGenPlugin.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.xtext.xbase.lib.Functions.Function0;
+
+public class CodeGenPlugin extends Plugin
+{
+ public static final String ID = "org.eclipse.papyrusrt.codegen";
+
+ private static CodeGenPlugin instance;
+ private static boolean standalone = false;
+
+ private static boolean printStackTrace;
+ private static final Logger LOGGER = Logger.getGlobal();
+
+ public static CodeGenPlugin getDefault()
+ {
+ return instance;
+ }
+
+ public CodeGenPlugin()
+ {
+ instance = this;
+ }
+
+ public static IStatus debug( String message )
+ {
+ IStatus status = new Status( IStatus.INFO, ID, "[DEBUG]" + message );
+ if( standalone )
+ {
+ getLogger().finest( message );
+ }
+ return status;
+ }
+
+ /**
+ * This method is intended to be used for debugging with large or complex
+ * messages, so the argument is an unevaluated function which will be
+ * evaluated only if the logging level is set to FINEST.
+ * @param thunk : {@code Function0<String>}
+ * a function which when applied will return the actual message.
+ * @return IStatus
+ */
+ public static IStatus debug( Function0<CharSequence> thunk )
+ {
+ if (!standalone || getLogger().getLevel().intValue() > Level.FINEST.intValue())
+ {
+ //System.out.println("[DEBUG]\n" + thunk.apply().toString() + "\n");
+ return new Status( IStatus.INFO, ID, "[DEBUG] " + thunk.toString() );
+ }
+ String message = thunk.apply().toString();
+ IStatus status = new Status( IStatus.INFO, ID, "[DEBUG]\n" + message );
+ if( standalone )
+ {
+ getLogger().finest( message );
+ }
+ return status;
+ }
+
+ public static IStatus info( String message )
+ {
+ IStatus status = new Status( IStatus.INFO, ID, message );
+ if( standalone )
+ {
+ getLogger().info( message );
+ }
+ else
+ {
+ getDefault().getLog().log( status );
+ }
+ return status;
+ }
+
+ public static IStatus error( String message )
+ {
+ return error( "Error", null );
+ }
+
+ public static IStatus error( Throwable e )
+ {
+ return error( "Error", e );
+ }
+
+ public static IStatus error( String message, Throwable e )
+ {
+ IStatus status = null;
+ if (e instanceof DetailedThrowable)
+ {
+ status = new MultiStatus( ID, IStatus.ERROR, message, null );
+ String details = e.toString();
+ for (String line : details.split( System.getProperty( "line.separator" ) ))
+ {
+ ((MultiStatus) status).add( new Status( IStatus.ERROR, ID, line) );
+ }
+ }
+ else
+ {
+ status = new Status( IStatus.ERROR, ID, message, e );
+ }
+ if( standalone )
+ {
+ getLogger().severe( status.toString() );
+ if (printStackTrace && e != null)
+ e.printStackTrace();
+ }
+ else
+ {
+ getDefault().getLog().log( status );
+ }
+ return status;
+ }
+
+ public static void setStandalone(boolean printTrace)
+ {
+ standalone = true;
+ printStackTrace = printTrace;
+ }
+
+ public static Logger getLogger()
+ {
+ return LOGGER;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.codegen/src/org/eclipse/papyrusrt/codegen/DetailedThrowable.java b/codegen/org.eclipse.papyrusrt.codegen/src/org/eclipse/papyrusrt/codegen/DetailedThrowable.java
new file mode 100644
index 0000000..0b6022f
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.codegen/src/org/eclipse/papyrusrt/codegen/DetailedThrowable.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.codegen;
+
+/**
+ * This class is used to identify Exceptions and Errors which should be reported
+ * as MultiStatus, rather than simple (single-line) Status.
+ *
+ * @author epp
+ */
+public class DetailedThrowable extends Throwable
+{
+
+ public DetailedThrowable()
+ {
+ super();
+ }
+
+ public DetailedThrowable(String message)
+ {
+ super( message );
+ }
+
+ public DetailedThrowable(Throwable cause)
+ {
+ super( cause );
+ }
+
+ public DetailedThrowable(String message, Throwable cause)
+ {
+ super( message, cause );
+ }
+
+ public DetailedThrowable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
+ {
+ super( message, cause, enableSuppression, writableStackTrace );
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/.project b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/.project
new file mode 100644
index 0000000..64955a7
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.protocoleditor-feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/build.properties b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/build.properties
new file mode 100644
index 0000000..286c0b7
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+ epl-v10.html,\
+ license.html
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/epl-v10.html b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/feature.properties b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/feature.properties
new file mode 100644
index 0000000..11ac9ed
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/feature.properties
@@ -0,0 +1,132 @@
+# NLS_MESSAGEFORMAT_VAR
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+\t- Content may be structured and packaged into modules to facilitate delivering,\n\
+\t extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+\t plug-in fragments ("Fragments"), and features ("Features").\n\
+\t- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+\t in a directory named "plugins".\n\
+\t- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+\t Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+\t Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+\t numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+\t- Features may also include other Features ("Included Features"). Within a Feature, files\n\
+\t named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+\t- The top-level (root) directory\n\
+\t- Plug-in and Fragment directories\n\
+\t- Inside Plug-ins and Fragments packaged as JARs\n\
+\t- Sub-directories of the directory named "src" of certain Plug-ins\n\
+\t- Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+\t- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+\t- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+\t- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+\t- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+\t- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+\t1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+\t the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+\t extending or updating the functionality of an Eclipse-based product.\n\
+\t2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+\t Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+\t3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+\t govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+\t Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+\t with the Specification. Such Installable Software Agreement must inform the user of the\n\
+\t terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+\t the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+\t indication of agreement by the user, the provisioning Technology will complete installation\n\
+\t of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/feature.xml b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/feature.xml
new file mode 100644
index 0000000..15ef167
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/feature.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.papyrusrt.protocoleditor-feature"
+ label="Papyrus-RT Protocol Editor"
+ version="0.5.0.qualifier"
+ provider-name="Zeligsoft (2009) Limited">
+
+ <description url="http://www.example.com/description">
+ Papyrus-RT is an industrial-grade, complete modeling environment
+for the development of complex, software intensive, real-time,
+embedded, cyber-physical systems.
+
+This feature contains the protocol editor.
+ </description>
+
+ <copyright url="http://www.example.com/copyright">
+ Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+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
+ </copyright>
+
+ <license url="https://eclipse.org/legal/epl/notice.html">
+ Eclipse Foundation Software User Agreement
+
+April 9, 2014
+
+Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.
+
+Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL, "Program" will mean the Content.
+
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").
+
+Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").
+Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".
+A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.
+Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:
+
+The top-level (root) directory
+Plug-in and Fragment directories
+Inside Plug-ins and Fragments packaged as JARs
+Sub-directories of the directory named "src" of certain Plug-ins
+Feature directories
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
+Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
+Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
+Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
+Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.
+
+Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").
+
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:
+
+A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.
+During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.
+Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.
+Cryptography
+
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.
+
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+ </license>
+
+ <url>
+ <update label="Papyrus-RT update site" url="https://umlrt.zeligsoft.com/updatesite"/>
+ </url>
+
+ <requires>
+ <import plugin="org.eclipse.ui"/>
+ <import plugin="org.eclipse.core.databinding" version="1.4.2" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.emf.transaction" version="1.8.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.emf.workspace" version="1.5.1" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.papyrus.infra.core.log"/>
+ <import plugin="org.eclipse.papyrus.infra.emf"/>
+ <import plugin="org.eclipse.papyrus.infra.widgets"/>
+ <import plugin="org.eclipse.papyrus.uml.properties"/>
+ <import plugin="org.eclipse.papyrus.uml.tools"/>
+ <import plugin="org.eclipse.papyrus.umlrt"/>
+ <import plugin="org.eclipse.papyrus.views.properties"/>
+ <import plugin="org.eclipse.papyrusrt.codegen"/>
+ <import plugin="org.eclipse.papyrusrt.codegen.utils"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.papyrusrt.protocoleditor"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"
+ unpack="false"/>
+
+</feature>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/license.html b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/license.html
new file mode 100644
index 0000000..0fd3dd1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor-feature/pom.xml b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/pom.xml
new file mode 100644
index 0000000..235e87a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor-feature/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.protocoleditor-feature</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/.classpath b/codegen/org.eclipse.papyrusrt.protocoleditor/.classpath
new file mode 100644
index 0000000..098194c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/.project b/codegen/org.eclipse.papyrusrt.protocoleditor/.project
new file mode 100644
index 0000000..a2a8545
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.protocoleditor</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.protocoleditor/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.protocoleditor/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.protocoleditor/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5950c99
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Papyrus Protocol Editor
+Bundle-SymbolicName: org.eclipse.papyrusrt.protocoleditor;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-Vendor: Zeligsoft (2009) Limited
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.databinding;bundle-version="1.4.2",
+ org.eclipse.emf.transaction;bundle-version="1.8.0",
+ org.eclipse.emf.workspace;bundle-version="1.5.1",
+ org.eclipse.papyrus.infra.core.log,
+ org.eclipse.papyrus.infra.emf,
+ org.eclipse.papyrus.infra.widgets,
+ org.eclipse.papyrus.uml.properties,
+ org.eclipse.papyrus.uml.tools,
+ org.eclipse.papyrus.umlrt,
+ org.eclipse.papyrus.views.properties,
+ org.eclipse.papyrusrt.codegen,
+ org.eclipse.papyrusrt.codegen.utils
+Export-Package: org.eclipse.papyrusrt.protocoleditor,
+ org.eclipse.papyrusrt.protocoleditor.properties
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrusrt.protocoleditor.Activator
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/about.html b/codegen/org.eclipse.papyrusrt.protocoleditor/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/about.properties b/codegen/org.eclipse.papyrusrt.protocoleditor/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/build.properties b/codegen/org.eclipse.papyrusrt.protocoleditor/build.properties
new file mode 100644
index 0000000..0cfa03a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ propertyView/,\
+ about.html
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/plugin.xml b/codegen/org.eclipse.papyrusrt.protocoleditor/plugin.xml
new file mode 100644
index 0000000..1e2fe45
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/plugin.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension point="org.eclipse.ui.commands">
+ <command
+ name="Create Protocol"
+ description="Create a protocol and all required elements"
+ categoryId="com.zeligsoft.umlrt.papyrus.commands-category"
+ id="com.zeligsoft.umlrt.papyrus.protocol"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.handlers">
+ <handler
+ commandId="com.zeligsoft.umlrt.papyrus.protocol"
+ class="org.eclipse.papyrusrt.protocoleditor.internal.UMLRTProtocolMenuHandler">
+ </handler>
+ </extension>
+
+ <extension point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="true"
+ locationURI="popup:org.eclipse.papyrus.views.modelexplorer.modelexplorer.popup">
+ <command
+ commandId="com.zeligsoft.umlrt.papyrus.protocol">
+ <visibleWhen checkEnabled="true"/>
+ </command>
+ </menuContribution>
+ </extension>
+ <extension
+ point="org.eclipse.emf.transaction.listeners">
+ <listener
+ class="org.eclipse.papyrusrt.protocoleditor.listeners.UMLRTProtocolListener">
+ </listener>
+ </extension>
+ <extension
+ point="org.eclipse.ui.startup">
+ <startup class="org.eclipse.papyrusrt.protocoleditor.UMLRTModelElementSelectionService"/>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.views.properties.context">
+ <context
+ contextModel="propertyView/umlrt-codegen.ctx"
+ isCustomizable="true">
+ </context>
+ </extension>
+<!--
+ <extension point="org.eclipse.ui.bindings">
+ <key
+ commandId="com.zeligsoft.umlrt.papyrus.codegen"
+ sequence=""
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
+ </extension>
+ -->
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/pom.xml b/codegen/org.eclipse.papyrusrt.protocoleditor/pom.xml
new file mode 100644
index 0000000..d7fcbde
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.protocoleditor</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/ui/ProtocolEditorNameSection.xwt b/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/ui/ProtocolEditorNameSection.xwt
new file mode 100644
index 0000000..9ca7166
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/ui/ProtocolEditorNameSection.xwt
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.views.properties.widgets.layout"
+ xmlns="http://www.eclipse.org/xwt/presentation" xmlns:ppe="clr-namespace:org.eclipse.papyrus.views.properties.widgets"
+ xmlns:x="http://www.eclipse.org/xwt">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite>
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:StringEditor property="UML:NamedElement:name"
+ input="{Binding}" customLabel="Name"></ppe:StringEditor>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/ui/ProtocolEditorOperationSection.xwt b/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/ui/ProtocolEditorOperationSection.xwt
new file mode 100644
index 0000000..8a07f66
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/ui/ProtocolEditorOperationSection.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns:x="http://www.eclipse.org/xwt"
+ xmlns:ppe="clr-namespace:org.eclipse.papyrus.views.properties.widgets"
+ xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.views.properties.widgets.layout">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Composite xmlns="http://www.eclipse.org/xwt/presentation"
+ x:Class="org.eclipse.papyrusrt.protocoleditor.properties.ProtocolContainerOperationSection"
+ xmlns:y="clr-namespace:org.eclipse.papyrusrt.protocoleditor.properties"
+ xmlns:x="http://www.eclipse.org/xwt">
+ <Composite.layout>
+ <GridLayout numColumns="1"></GridLayout>
+ </Composite.layout>
+ </Composite>
+</Composite>
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/umlrt-codegen.ctx b/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/umlrt-codegen.ctx
new file mode 100644
index 0000000..ab6cba3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/propertyView/umlrt-codegen.ctx
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="ASCII"?>
+<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" name="UMLRTCodeGen">
+ <dependencies href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#/"/>
+ <tabs label="Protocol Editor" id="umlrtcodegenprotocoleditor" priority="101">
+ <sections name="ProtocolEditorNameSection" sectionFile="ui/ProtocolEditorNameSection.xwt">
+ <widget href="ui/ProtocolEditorNameSection.xwt#/"/>
+ </sections>
+ <sections name="ProtocolEditorOperationSection" sectionFile="ui/ProtocolEditorOperationSection.xwt">
+ <widget href="ui/ProtocolEditorOperationSection.xwt#/"/>
+ </sections>
+ </tabs>
+ <views name="UMLRTCodeGenProtocolEditor" sections="//@tabs.0/@sections.0 //@tabs.0/@sections.1">
+ <constraints xsi:type="constraints:SimpleConstraint" name="isSingleProtocolContainer">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.uml.properties/Model/Environment.xmi#//@constraintTypes.1"/>
+ <properties xsi:type="constraints:ValueProperty" name="stereotypeName" value="UMLRealTime::ProtocolContainer"/>
+ </constraints>
+ </views>
+</contexts:Context>
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/Activator.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/Activator.java
new file mode 100644
index 0000000..21c0732
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/Activator.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrusrt.protocoleditor"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+ * )
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+
+ // register the login helper
+ log = new LogHelper(plugin);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+ * )
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/UMLRTModelElementSelectionService.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/UMLRTModelElementSelectionService.java
new file mode 100644
index 0000000..12c3a2e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/UMLRTModelElementSelectionService.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Change listener server for model element change in papyrus model explorer.
+ *
+ * @author ysroh
+ *
+ */
+public class UMLRTModelElementSelectionService implements IStartup,
+ ISelectionListener {
+
+ private static ISelection selection;
+
+ private static Set<IModelExplorerSelectionChangeListener> listeners = new HashSet<IModelExplorerSelectionChangeListener>();
+
+ @Override
+ public void earlyStartup() {
+ final IWorkbench workbench = PlatformUI.getWorkbench();
+ workbench.addWindowListener(new IWindowListener() {
+
+ @Override
+ public void windowOpened(IWorkbenchWindow window) {
+ addSelectionListener(window);
+ }
+
+ @Override
+ public void windowClosed(IWorkbenchWindow window) {
+ removeSelectionListener(window);
+ }
+
+ @Override
+ public void windowActivated(IWorkbenchWindow arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void windowDeactivated(IWorkbenchWindow arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+
+ workbench.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ for (IWorkbenchWindow window : workbench.getWorkbenchWindows()) {
+ addSelectionListener(window);
+ }
+ }
+ });
+ }
+
+ private void addSelectionListener(IWorkbenchWindow window) {
+ if (window != null) {
+ window.getSelectionService().addSelectionListener(
+ "org.eclipse.papyrus.views.modelexplorer.modelexplorer",
+ this);
+ }
+ }
+
+ private void removeSelectionListener(IWorkbenchWindow window) {
+ if (window != null) {
+ window.getSelectionService().removeSelectionListener(
+ "org.eclipse.papyrus.views.modelexplorer.modelexplorer",
+ this);
+ }
+ }
+
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ UMLRTModelElementSelectionService.selection = selection;
+ fireSelectionChangedEvent(selection);
+
+ }
+
+ private synchronized void fireSelectionChangedEvent(ISelection selection) {
+ for (IModelExplorerSelectionChangeListener l : listeners) {
+ l.selectionChanged(selection);
+ }
+ }
+
+ public static void addListener(
+ IModelExplorerSelectionChangeListener listener) {
+ listeners.add(listener);
+ }
+
+ public static void removeListener(
+ IModelExplorerSelectionChangeListener listener) {
+ listeners.remove(listener);
+ }
+
+ public static EObject getSelectedEObject() {
+ if (!selection.isEmpty()
+ && ((IStructuredSelection) selection).getFirstElement() instanceof IAdaptable) {
+ return (EObject) ((IAdaptable) ((IStructuredSelection) selection)
+ .getFirstElement()).getAdapter(EObject.class);
+ }
+ return null;
+ }
+
+ /**
+ * Change listener interface
+ *
+ * @author ysroh
+ *
+ */
+ public interface IModelExplorerSelectionChangeListener {
+
+ public void selectionChanged(ISelection selection);
+
+ }
+}
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/internal/UMLRTProtocolMenuHandler.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/internal/UMLRTProtocolMenuHandler.java
new file mode 100644
index 0000000..241165d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/internal/UMLRTProtocolMenuHandler.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor.internal;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.uml2.uml.Package;
+
+public class UMLRTProtocolMenuHandler extends AbstractHandler {
+
+ private TransactionalEditingDomain editingDomain;
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection sel = HandlerUtil.getCurrentSelection(event);
+ if (!(sel instanceof IStructuredSelection))
+ return null;
+
+ Package selectedPackage = null;
+ if (((IStructuredSelection) sel).getFirstElement() instanceof IAdaptable) {
+ EObject eObject = (EObject) ((IAdaptable) ((IStructuredSelection) sel)
+ .getFirstElement()).getAdapter(EObject.class);
+ if (eObject instanceof Package) {
+ selectedPackage = (Package) eObject;
+ }
+ }
+ if (selectedPackage == null) {
+ return null;
+ }
+
+ editingDomain = TransactionUtil.getEditingDomain(selectedPackage);
+ if (editingDomain == null) {
+ throw new IllegalStateException("Editing domain not found.");
+ }
+ final Package container = selectedPackage;
+
+ IInputValidator validator = new IInputValidator() {
+
+ @Override
+ public String isValid(String name) {
+ Package pkg = container.getNestedPackage(name);
+ if (pkg != null) {
+ return "Invalid name. Name already exist.";
+ }
+ return null;
+ }
+ };
+ InputDialog nameDialog = new InputDialog(Display.getCurrent()
+ .getActiveShell(), "Create Protocol", "Enter protocol name",
+ "protocol", validator);
+ int result = nameDialog.open();
+ if (result == Window.OK) {
+ final String name = nameDialog.getValue();
+ Command command = new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ createProtocolContainer(container, name);
+ }
+ };
+ editingDomain.getCommandStack().execute(command);
+ }
+ return null;
+ }
+
+ /**
+ * Create protocol container.
+ *
+ * @param container
+ * @param name
+ * @return
+ */
+ private Package createProtocolContainer(final Package container,
+ final String name) {
+
+ Package pContainer = container.createNestedPackage(name);
+ UMLRTProtocolUtil.applyStereoType(pContainer,
+ "UMLRealTime::ProtocolContainer");
+
+ return pContainer;
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/internal/UMLRTProtocolUtil.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/internal/UMLRTProtocolUtil.java
new file mode 100644
index 0000000..51945dc
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/internal/UMLRTProtocolUtil.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor.internal;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTMessageKind;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTMessageSet;
+import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.uml2.uml.Collaboration;
+import org.eclipse.uml2.uml.Dependency;
+import org.eclipse.uml2.uml.DirectedRelationship;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PackageableElement;
+import org.eclipse.uml2.uml.Realization;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * Utility class for UMLRT protocol
+ *
+ * @author ysroh
+ *
+ */
+public class UMLRTProtocolUtil {
+ /**
+ * Create or repair protocol container elements. Child element name must
+ * follow the name of the protocol container.
+ *
+ * @param container
+ * protocol container
+ * @param oldName
+ * name of the old protocol in case this is rename
+ * @param newName
+ * name of the protocol
+ */
+ public static void createProtocolContainerContent(Package pContainer,
+ String oldName, String newName) {
+
+ // Setup protocol
+ PackageableElement protocol = (Collaboration) pContainer
+ .getPackagedElement(oldName, false,
+ UMLPackage.Literals.COLLABORATION, false);
+
+ if (protocol == null) {
+ protocol = pContainer.getPackagedElement(newName, false,
+ UMLPackage.Literals.COLLABORATION, true);
+ } else {
+ protocol.setName(newName);
+ }
+ applyStereoType(protocol, "UMLRealTime::Protocol");
+
+ // setup message sets
+ addRtMessageSet(pContainer, protocol, oldName, newName,
+ RTMessageKind.IN);
+ addRtMessageSet(pContainer, protocol,
+ getMessageSetName(oldName, RTMessageKind.OUT),
+ getMessageSetName(newName, RTMessageKind.OUT),
+ RTMessageKind.OUT);
+ addRtMessageSet(pContainer, protocol,
+ getMessageSetName(oldName, RTMessageKind.IN_OUT),
+ getMessageSetName(newName, RTMessageKind.IN_OUT),
+ RTMessageKind.IN_OUT);
+
+ // Setup any receive event
+ pContainer.getPackagedElement("*", false,
+ UMLPackage.Literals.ANY_RECEIVE_EVENT, true);
+
+ pContainer.setName(newName);
+
+ }
+
+ private static Interface addRtMessageSet(Package container,
+ PackageableElement protocol, String oldName, String newName,
+ RTMessageKind kind) {
+
+ Interface messageSet = getMessageSet(container, kind);
+ if (messageSet != null) {
+ messageSet.setName(newName);
+ return messageSet;
+ }
+ messageSet = (Interface) container.getPackagedElement(oldName, false,
+ UMLPackage.Literals.INTERFACE, false);
+ if (messageSet == null) {
+ messageSet = (Interface) container.getPackagedElement(newName,
+ false, UMLPackage.Literals.INTERFACE, true);
+ } else {
+ messageSet.setName(newName);
+ }
+ applyStereoType(messageSet, "UMLRealTime::RTMessageSet");
+ RTMessageSet rtMessageSet = UMLRealTimeProfileUtil
+ .getRTMessageSet(messageSet);
+ rtMessageSet.setRtMsgKind(kind);
+
+ // setup relations
+ if (kind.equals(RTMessageKind.IN)) {
+ addProtocolDependency(container,
+ "ProtocolRealizesIncomingInterface",
+ UMLPackage.Literals.REALIZATION, protocol, messageSet);
+ } else if (kind.equals(RTMessageKind.OUT)) {
+ addProtocolDependency(container, "ProtocolUsesOutgoingInterface",
+ UMLPackage.Literals.USAGE, protocol, messageSet);
+ } else if (kind.equals(RTMessageKind.IN_OUT)) {
+ addProtocolDependency(container, "ProtocolRealizesSymInterface",
+ UMLPackage.Literals.REALIZATION, protocol, messageSet);
+ addProtocolDependency(container, "ProtocolUsesSymInterface",
+ UMLPackage.Literals.USAGE, protocol, messageSet);
+ }
+
+ return messageSet;
+ }
+
+ /**
+ * Create or modify existing dependency to add dependency between client and
+ * supplier
+ *
+ * @param container
+ * @param name
+ * @param eClass
+ * @param client
+ * @param supplier
+ */
+ private static void addProtocolDependency(Package container, String name,
+ EClass eClass, NamedElement client, NamedElement supplier) {
+ for (Element e : container.getOwnedElements()) {
+ if (e.eClass().equals(eClass)) {
+ Dependency d = (Dependency) e;
+ if (d.getClients().contains(client)
+ && d.getSuppliers().contains(supplier)) {
+ d.setName(name);
+ return;
+ }
+ }
+ }
+ Dependency dependency = (Dependency) container.getPackagedElement(name,
+ false, eClass, true);
+ EList<NamedElement> clients = dependency.getClients();
+ EList<NamedElement> suppliers = dependency.getSuppliers();
+
+ clients.clear();
+ clients.add(client);
+
+ suppliers.clear();
+ suppliers.add(supplier);
+ }
+
+ /**
+ * Add stereotype with given qualified name of the stereotype if not already
+ * applied.
+ *
+ * @param element
+ * @param qualifiedName
+ */
+ public static void applyStereoType(Element element, String qualifiedName) {
+ Stereotype protocolStereotype = element
+ .getAppliedStereotype(qualifiedName);
+ if (protocolStereotype == null) {
+ protocolStereotype = element.getApplicableStereotype(qualifiedName);
+ element.applyStereotype(protocolStereotype);
+ }
+ }
+
+ /**
+ * Queries the protocol container
+ *
+ * @param eObject
+ * @return
+ */
+ public static Package getProtocolContainer(EObject eObject) {
+ if (eObject == null) {
+ return null;
+ }
+ if (eObject instanceof Element
+ && UMLRealTimeProfileUtil
+ .isProtocolContainer((Element) eObject)) {
+ return (Package) eObject;
+ }
+
+ return getProtocolContainer(eObject.eContainer());
+ }
+
+ /**
+ * Queries message set
+ *
+ * @param protocolContainer
+ * @param kind
+ * @return
+ */
+ public static Interface getMessageSet(Package protocolContainer,
+ RTMessageKind kind) {
+ String protocolName = protocolContainer.getName();
+ Collaboration protocol = (Collaboration) protocolContainer
+ .getPackagedElement(protocolName, false,
+ UMLPackage.Literals.COLLABORATION, false);
+ if (protocol == null) {
+ return null;
+ }
+ if (kind.equals(RTMessageKind.IN)) {
+ EList<Interface> provides = getProvideds(protocol);
+ if (!provides.isEmpty()) {
+ return provides.get(0);
+ }
+ } else if (kind.equals(RTMessageKind.OUT)) {
+ EList<Interface> requires = getRequireds(protocol);
+ if (!requires.isEmpty()) {
+ return requires.get(0);
+ }
+ } else {
+ EList<Interface> provides = getProvideds(protocol);
+ EList<Interface> requires = getRequireds(protocol);
+ for (Interface p : provides) {
+ if (requires.contains(p)) {
+ return p;
+ }
+ }
+ }
+ return null;
+ }
+
+ private static String getMessageSetName(String protocolName,
+ RTMessageKind kind) {
+ if (kind.equals(RTMessageKind.OUT)) {
+ return protocolName + "~";
+ } else if (kind.equals(RTMessageKind.IN_OUT)) {
+ return protocolName + "Sym";
+ }
+ return protocolName;
+ }
+
+ public static EList<Interface> getProvideds(Collaboration source) {
+ EList<Interface> provideds = new BasicEList<Interface>();
+ for (DirectedRelationship directedRelation : ((Collaboration) source)
+ .getSourceDirectedRelationships()) {
+ if (directedRelation instanceof Realization) {
+ EList<NamedElement> suppliers = ((Realization) directedRelation)
+ .getSuppliers();
+ if (suppliers.size() > 0) {
+ NamedElement supplier = suppliers.get(0);
+ if (supplier instanceof Interface) {
+ provideds.add((Interface) supplier);
+ }
+ }
+ }
+ }
+ return provideds;
+ }
+
+ public static EList<Interface> getRequireds(Collaboration source) {
+ return ((Collaboration) source).getUsedInterfaces();
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/listeners/UMLRTProtocolListener.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/listeners/UMLRTProtocolListener.java
new file mode 100644
index 0000000..1257abd
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/listeners/UMLRTProtocolListener.java
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor.listeners;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.ResourceSetChangeEvent;
+import org.eclipse.emf.transaction.ResourceSetListenerImpl;
+import org.eclipse.emf.transaction.RollbackException;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.uml.tools.listeners.PapyrusStereotypeListener;
+import org.eclipse.papyrus.umlrt.UMLRealTime.ProtocolContainer;
+import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.papyrusrt.protocoleditor.internal.UMLRTProtocolUtil;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.CallEvent;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.Operation;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PackageableElement;
+import org.eclipse.uml2.uml.Parameter;
+import org.eclipse.uml2.uml.ParameterDirectionKind;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+/**
+ * UMLRT resource set listener
+ *
+ * @author ysroh
+ *
+ */
+public class UMLRTProtocolListener extends ResourceSetListenerImpl {
+
+ @Override
+ public void resourceSetChanged(ResourceSetChangeEvent event) {
+ for (Notification n : event.getNotifications()) {
+ n.getNotifier();
+ }
+ super.resourceSetChanged(event);
+ }
+
+ @Override
+ public Command transactionAboutToCommit(ResourceSetChangeEvent event)
+ throws RollbackException {
+
+ for (Notification notification : event.getNotifications()) {
+
+ if (!(notification.getNotifier() instanceof Element)) {
+ continue;
+ }
+
+ Element notifier = (Element) notification.getNotifier();
+
+ // create protocol container contents
+ if (notification instanceof PapyrusStereotypeListener.StereotypeCustomNotification
+ && PapyrusStereotypeListener.APPLIED_STEREOTYPE == notification
+ .getEventType()) {
+ Object newValue = notification.getNewValue();
+ if (newValue instanceof ProtocolContainer) {
+ Package protocolContainer = (Package) notifier;
+ return getCommandForNameChange(event.getEditingDomain(),
+ protocolContainer, protocolContainer.getName(),
+ protocolContainer.getName());
+ }
+ }
+
+ // handle protocol name change
+ if (notification.getEventType() == Notification.SET
+ && (UMLRealTimeProfileUtil.isProtocol(notifier) || UMLRealTimeProfileUtil
+ .isProtocolContainer(notifier))
+ && notification.getFeature().equals(
+ UMLPackage.Literals.NAMED_ELEMENT__NAME)) {
+ Package protocolContainer = UMLRTProtocolUtil
+ .getProtocolContainer(notifier);
+ if (protocolContainer != null
+ && !UML2Util.isEmpty(notification.getOldStringValue())) {
+ return getCommandForNameChange(event.getEditingDomain(),
+ protocolContainer,
+ notification.getOldStringValue(),
+ notification.getNewStringValue());
+ }
+ }
+
+ // handle operation name change
+ if (notification.getEventType() == Notification.SET
+ && notification.getFeature().equals(
+ UMLPackage.Literals.NAMED_ELEMENT__NAME)
+ && notifier instanceof Operation
+ && notifier.eContainer() instanceof Element
+ && UMLRealTimeProfileUtil.isRTMessageSet((Element) notifier
+ .eContainer())) {
+ return getCommandForOperationNameChange(
+ event.getEditingDomain(), (Operation) notifier,
+ notification.getOldStringValue(),
+ notification.getNewStringValue());
+ }
+
+ // handle delete operation
+ if (notification.getEventType() == Notification.SET
+ && notification.getFeature().equals(
+ UMLPackage.Literals.OPERATION__INTERFACE)
+ && notification.getOldValue() instanceof Element
+ && notification.getNewValue() == null
+ && UMLRealTimeProfileUtil
+ .isRTMessageSet((Element) notification
+ .getOldValue())) {
+ boolean isMove = false;
+ for (Notification notification2 : event.getNotifications()) {
+ // handle delete operation
+ if (!(notification2.getNotifier() instanceof Element)) {
+ continue;
+ }
+ Element notifier2 = (Element) notification2.getNotifier();
+
+ if (!notifier.equals(notifier2)) {
+ continue;
+ }
+
+ if (notification2.getEventType() == Notification.SET
+ && notification2.getFeature().equals(
+ UMLPackage.Literals.OPERATION__INTERFACE)
+ && notification2.getNewValue() instanceof Element
+ && notification2.getOldValue() == null
+ && UMLRealTimeProfileUtil
+ .isRTMessageSet((Element) notification2
+ .getNewValue())) {
+ isMove = true;
+ break;
+ }
+ }
+ if (!isMove) {
+ return getCommandForRemoveOperation(
+ event.getEditingDomain(),
+ (Element) notification.getOldValue(),
+ (Operation) notifier);
+ }
+ return null;
+ }
+ // handle add operation
+ if (notification.getEventType() == Notification.ADD
+ && notification.getFeature().equals(
+ UMLPackage.Literals.INTERFACE__OWNED_OPERATION)
+ && !UML2Util.isEmpty(((Operation) notification
+ .getNewValue()).getName())
+ && UMLRealTimeProfileUtil.isRTMessageSet(notifier)) {
+ // see if this is a move
+ return getCommandForOperationNameChange(
+ event.getEditingDomain(),
+ (Operation) notification.getNewValue(),
+ UMLUtil.EMPTY_STRING,
+ ((Operation) notification.getNewValue()).getName());
+ }
+ // handle new parameter
+ if (notification.getFeature().equals(
+ UMLPackage.Literals.BEHAVIORAL_FEATURE__OWNED_PARAMETER)
+ && notifier instanceof Operation) {
+ Operation op = (Operation) notifier;
+ Interface intf = op.getInterface();
+ if (intf != null && UMLRealTimeProfileUtil.isRTMessageSet(intf)) {
+ return getCommandForOperationNameChange(
+ event.getEditingDomain(), op, op.getName(),
+ op.getName());
+ }
+ }
+
+ // handle parameter change in order to change call event name
+ if (notification.getEventType() == Notification.SET
+ && notification.getFeature().equals(
+ UMLPackage.Literals.TYPED_ELEMENT__TYPE)
+ && notifier instanceof Parameter) {
+ Operation op = ((Parameter) notifier).getOperation();
+ if (op == null) {
+ continue;
+ }
+ Interface intf = op.getInterface();
+ if (intf != null && UMLRealTimeProfileUtil.isRTMessageSet(intf)) {
+ return getCommandForOperationNameChange(
+ event.getEditingDomain(), op, op.getName(),
+ op.getName());
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Handle operation change
+ *
+ * @param editingDomain
+ * @param messageSet
+ * @param operation
+ * @return
+ */
+ private Command getCommandForRemoveOperation(
+ TransactionalEditingDomain editingDomain, final Element messageSet,
+ final Operation operation) {
+ return new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ Package protocolContainer = UMLRTProtocolUtil
+ .getProtocolContainer(messageSet);
+ if (protocolContainer == null) {
+ return;
+ }
+ CallEvent callEvent = (CallEvent) protocolContainer
+ .getPackagedElement(operation.getName(), false,
+ UMLPackage.Literals.CALL_EVENT, false);
+ if (callEvent != null) {
+ EcoreUtil.delete(callEvent);
+ }
+ }
+ };
+ }
+
+ /**
+ * Handle operation name change
+ *
+ * @param editingDomain
+ * @param operation
+ * @param oldName
+ * @param newName
+ * @return
+ */
+ private Command getCommandForOperationNameChange(
+ TransactionalEditingDomain editingDomain,
+ final Operation operation, final String oldName,
+ final String newName) {
+
+ return new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ Package protocolContainer = UMLRTProtocolUtil
+ .getProtocolContainer(operation);
+ if (protocolContainer == null) {
+ return;
+ }
+ StringBuilder postfix = new StringBuilder();
+ for (Parameter p : operation.getOwnedParameters()) {
+ if (ParameterDirectionKind.IN_LITERAL.equals(p
+ .getDirection()) && p.getType() != null) {
+ postfix.append("_");
+ postfix.append(p.getType().getName());
+ }
+ }
+ String postfixString = postfix.toString();
+ CallEvent callEvent = null;
+ for (PackageableElement e : protocolContainer
+ .getPackagedElements()) {
+ if (e instanceof CallEvent
+ && operation.equals(((CallEvent) e).getOperation())) {
+ e.setName(newName + postfixString);
+ return;
+ }
+ }
+
+ String oldEventName = oldName + postfixString;
+ String newEventName = newName + postfixString;
+ if (!UML2Util.isEmpty(oldEventName)) {
+ callEvent = (CallEvent) protocolContainer
+ .getPackagedElement(oldEventName, false,
+ UMLPackage.Literals.CALL_EVENT, false);
+ }
+ if (callEvent == null) {
+ callEvent = (CallEvent) protocolContainer
+ .getPackagedElement(newEventName, false,
+ UMLPackage.Literals.CALL_EVENT, true);
+ }
+ if (callEvent != null) {
+ callEvent.setOperation(operation);
+ callEvent.setName(newEventName);
+ }
+ }
+ };
+ }
+
+ /**
+ * Handle protocol name change
+ *
+ * @param editingDomain
+ * @param protocolContainer
+ * @param oldStringValue
+ * @param newStringValue
+ * @return
+ */
+ private Command getCommandForNameChange(
+ TransactionalEditingDomain editingDomain,
+ final Package protocolContainer, final String oldStringValue,
+ final String newStringValue) {
+
+ return new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ UMLRTProtocolUtil.createProtocolContainerContent(
+ protocolContainer, oldStringValue, newStringValue);
+
+ }
+ };
+ }
+
+}
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/properties/ProtocolContainerOperationSection.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/properties/ProtocolContainerOperationSection.java
new file mode 100644
index 0000000..589b2be
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/properties/ProtocolContainerOperationSection.java
@@ -0,0 +1,225 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor.properties;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.emf.workspace.EMFCommandOperation;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.papyrus.uml.properties.modelelement.UMLModelElement;
+import org.eclipse.papyrus.umlrt.UMLRealTime.RTMessageKind;
+import org.eclipse.papyrus.views.properties.creation.EcorePropertyEditorFactory;
+import org.eclipse.papyrus.views.properties.widgets.layout.PropertiesLayout;
+import org.eclipse.papyrusrt.codegen.utils.UMLRealTimeProfileUtil;
+import org.eclipse.papyrusrt.protocoleditor.Activator;
+import org.eclipse.papyrusrt.protocoleditor.UMLRTModelElementSelectionService;
+import org.eclipse.papyrusrt.protocoleditor.internal.UMLRTProtocolUtil;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Operation;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PackageableElement;
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * MessageSet interface section for protocol editor. Allow drag drop operations
+ * between interfaces.
+ *
+ * @author ysroh
+ *
+ */
+public class ProtocolContainerOperationSection extends Composite {
+
+ private Composite listArea;
+
+ public ProtocolContainerOperationSection(final Composite parent, int style) {
+ super(parent, style);
+ EObject selectedElement = UMLRTModelElementSelectionService
+ .getSelectedEObject();
+ listArea = createListArea(parent, style, selectedElement);
+ final UMLRTModelElementSelectionService.IModelExplorerSelectionChangeListener listener = new UMLRTModelElementSelectionService.IModelExplorerSelectionChangeListener() {
+
+ @Override
+ public void selectionChanged(ISelection selection) {
+ if (selection.isEmpty()) {
+ return;
+ }
+ if (((IStructuredSelection) selection).getFirstElement() instanceof IAdaptable) {
+ EObject selectedElement = (EObject) ((IAdaptable) ((IStructuredSelection) selection)
+ .getFirstElement()).getAdapter(EObject.class);
+ if (selectedElement instanceof Element
+ && UMLRealTimeProfileUtil
+ .isProtocolContainer((Element) selectedElement)) {
+ if (listArea != null && !listArea.isDisposed()) {
+ listArea.dispose();
+ }
+ if (getParent() != null && !getParent().isDisposed()) {
+ listArea = createListArea(getParent(), getParent()
+ .getStyle(), selectedElement);
+ getParent().layout(true);
+ }
+ }
+ }
+ }
+ };
+ UMLRTModelElementSelectionService.addListener(listener);
+ parent.addDisposeListener(new DisposeListener() {
+
+ @Override
+ public void widgetDisposed(DisposeEvent arg0) {
+ UMLRTModelElementSelectionService.removeListener(listener);
+ }
+ });
+
+ }
+
+ private Composite createListArea(final Composite parent, int style,
+ EObject selectedElement) {
+ Composite composite = new Composite(parent, style);
+ composite.setLayout(new PropertiesLayout(1, true));
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ if (selectedElement == null) {
+ return composite;
+ }
+
+ Package protocolContainer = (Package) selectedElement;
+ final PackageableElement inMessageSet = UMLRTProtocolUtil
+ .getMessageSet(protocolContainer, RTMessageKind.IN);
+ final PackageableElement outMessageSet = UMLRTProtocolUtil
+ .getMessageSet(protocolContainer, RTMessageKind.OUT);
+ final PackageableElement inOutMessageSet = UMLRTProtocolUtil
+ .getMessageSet(protocolContainer, RTMessageKind.IN_OUT);
+
+ EcorePropertyEditorFactory factory = new EcorePropertyEditorFactory(
+ UMLPackage.Literals.INTERFACE__OWNED_OPERATION);
+
+ if (inMessageSet != null) {
+ IObservableList observable = (IObservableList) new UMLModelElement(
+ inMessageSet).getObservable("ownedOperation");
+ UMLRTMultiReferenceEditor editor = new UMLRTMultiReferenceEditor(
+ composite, style, "In", inMessageSet, observable, factory);
+ TreeViewer inMessageTreeViewer = editor.getViewer();
+ addDnDSupport(inMessageTreeViewer);
+ }
+
+ if (outMessageSet != null) {
+ IObservableList observable = (IObservableList) new UMLModelElement(
+ outMessageSet).getObservable("ownedOperation");
+ UMLRTMultiReferenceEditor editor = new UMLRTMultiReferenceEditor(
+ composite, style, "Out", outMessageSet, observable, factory);
+ TreeViewer outMessageTreeViewer = editor.getViewer();
+ addDnDSupport(outMessageTreeViewer);
+ }
+
+ if (inOutMessageSet != null) {
+ IObservableList observable = (IObservableList) new UMLModelElement(
+ inOutMessageSet).getObservable("ownedOperation");
+ UMLRTMultiReferenceEditor editor = new UMLRTMultiReferenceEditor(
+ composite, style, "InOut", inOutMessageSet, observable,
+ factory);
+ TreeViewer inOutMessageTreeViewer = editor.getViewer();
+ addDnDSupport(inOutMessageTreeViewer);
+ }
+
+ return composite;
+ }
+
+ /**
+ * Add drag and drop support for viewer
+ *
+ * @param viewer
+ */
+ private void addDnDSupport(final TreeViewer viewer) {
+ viewer.addDragSupport(DND.DROP_MOVE,
+ new Transfer[] { LocalSelectionTransfer.getTransfer() },
+ new DragSourceAdapter() {
+
+ public void dragSetData(DragSourceEvent event) {
+ final LocalSelectionTransfer transfer = LocalSelectionTransfer
+ .getTransfer();
+ if (transfer.isSupportedType(event.dataType)) {
+ transfer.setSelection(viewer.getSelection());
+ transfer.setSelectionSetTime(event.time & 0xFFFF);
+ }
+ }
+ });
+ viewer.addDropSupport(DND.DROP_MOVE,
+ new Transfer[] { LocalSelectionTransfer.getTransfer() },
+ new ViewerDropAdapter(viewer) {
+
+ @Override
+ public boolean performDrop(Object data) {
+ final LocalSelectionTransfer transfer = LocalSelectionTransfer
+ .getTransfer();
+ final IStructuredSelection selection = (IStructuredSelection) transfer
+ .getSelection();
+ if (selection.isEmpty()) {
+ return false;
+ }
+ if (!(selection.getFirstElement() instanceof Operation)) {
+ return false;
+ }
+ final EObject element = (EObject) selection
+ .getFirstElement();
+ if (!(viewer.getInput() instanceof IObservableList)) {
+ return false;
+ }
+ final IObservableList observable = (IObservableList) viewer
+ .getInput();
+ TransactionalEditingDomain editingDomain = TransactionUtil
+ .getEditingDomain(element);
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(
+ editingDomain, "Move Element") {
+
+ @Override
+ protected void doExecute() {
+ observable.add(element);
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory()
+ .execute(command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to move element", e1);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean validateDrop(Object target, int operation,
+ TransferData transferType) {
+ final LocalSelectionTransfer transfer = LocalSelectionTransfer
+ .getTransfer();
+ final int location = getCurrentLocation();
+ final boolean valid = (location == LOCATION_NONE || location == LOCATION_ON)
+ && transfer.isSupportedType(transferType);
+ return valid;
+ }
+ });
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/properties/UMLRTMultiReferenceEditor.java b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/properties/UMLRTMultiReferenceEditor.java
new file mode 100644
index 0000000..4660c32
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.protocoleditor/src/org/eclipse/papyrusrt/protocoleditor/properties/UMLRTMultiReferenceEditor.java
@@ -0,0 +1,400 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Zeligsoft (2009) Limited and others.
+ * 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
+ *******************************************************************************/
+package org.eclipse.papyrusrt.protocoleditor.properties;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.databinding.observable.ChangeEvent;
+import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.databinding.observable.list.IObservableList;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.emf.workspace.EMFCommandOperation;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.papyrus.infra.widgets.creation.IAtomicOperationExecutor;
+import org.eclipse.papyrus.infra.widgets.providers.TreeCollectionContentProvider;
+import org.eclipse.papyrus.uml.tools.providers.UMLLabelProvider;
+import org.eclipse.papyrus.views.properties.creation.EcorePropertyEditorFactory;
+import org.eclipse.papyrusrt.protocoleditor.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Tree;
+
+/**
+ * Editor for multi-valued reference property
+ *
+ * @author ysroh
+ *
+ */
+public class UMLRTMultiReferenceEditor extends Composite implements
+ ISelectionChangedListener, IChangeListener {
+
+ protected Composite buttonSection;
+
+ protected TreeViewer treeViewer;
+
+ protected EcorePropertyEditorFactory factory;
+
+ protected EObject context;
+
+ protected IAtomicOperationExecutor executor;
+
+ protected TransactionalEditingDomain editingDomain;
+
+ protected Button up;
+
+ protected Button down;
+
+ protected Button add;
+
+ protected Button remove;
+
+ protected Button edit;
+
+ IObservableList observable;
+
+ /**
+ * Constructor
+ *
+ * @param parent
+ * @param style
+ * @param label
+ * @param context
+ * @param reference
+ * @param ownerReferenceFeature
+ */
+ public UMLRTMultiReferenceEditor(Composite parent, int style, String label,
+ EObject context, IObservableList observable,
+ EcorePropertyEditorFactory propertyFactory) {
+ super(parent, style);
+ this.context = context;
+ this.observable = observable;
+ observable.addChangeListener(this);
+ this.editingDomain = TransactionUtil.getEditingDomain(context);
+ executor = (IAtomicOperationExecutor) Platform.getAdapterManager()
+ .getAdapter(context, IAtomicOperationExecutor.class);
+
+ this.factory = propertyFactory;
+
+ setLayout(new GridLayout(label == null ? 1 : 2, false));
+ if (label != null) {
+ Label labelWidget = new Label(this, SWT.NONE);
+ labelWidget.setText(label);
+ }
+
+ buttonSection = new Composite(this, SWT.NONE);
+ buttonSection.setLayout(new FillLayout());
+ buttonSection.setLayoutData(new GridData(SWT.END, SWT.CENTER, false,
+ false));
+
+ Tree tree = new Tree(this, style | SWT.MULTI | SWT.V_SCROLL
+ | SWT.H_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);
+ GridData treeData = new GridData(SWT.FILL, SWT.NONE, true, true);
+ treeData.horizontalSpan = 2;
+ treeData.heightHint = 80;
+ tree.setLayoutData(treeData);
+
+ treeViewer = new TreeViewer(tree);
+ treeViewer.addSelectionChangedListener(this);
+ treeViewer.setContentProvider(TreeCollectionContentProvider.instance);
+ // treeViewer.setContentProvider(new MultiValueTreeContentProvider());
+ treeViewer.setLabelProvider(new UMLLabelProvider());
+ treeViewer.setInput(observable);
+ treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ @Override
+ public void doubleClick(final DoubleClickEvent e) {
+ final EObject selectedElement = getSelectedElement();
+ if (selectedElement != null) {
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(editingDomain,
+ "Edit Element") {
+
+ @Override
+ protected void doExecute() {
+ if (factory.canEdit()) {
+ factory.edit(treeViewer.getControl(),
+ selectedElement);
+ }
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(
+ command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to add new element", e1);
+ }
+ treeViewer.refresh(selectedElement, true);
+ }
+ }
+ });
+
+ createControlButtons();
+ }
+
+ @Override
+ public void dispose() {
+ observable.removeChangeListener(this);
+ super.dispose();
+ }
+
+ /**
+ * Get selected element
+ *
+ * @return
+ */
+ private EObject getSelectedElement() {
+ ISelection selection = treeViewer.getSelection();
+ if (selection.isEmpty()) {
+ return null;
+ }
+ return (EObject) ((IStructuredSelection) selection).getFirstElement();
+ }
+
+ /**
+ * Create control buttons
+ */
+ protected void createControlButtons() {
+ up = createButton(org.eclipse.papyrus.infra.widgets.Activator
+ .getDefault().getImage("/icons/Up_12x12.gif"), "Move up");
+ up.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final Object selectedElement = getSelectedElement();
+ if (selectedElement == null) {
+ return;
+ }
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(editingDomain,
+ "Move Element") {
+
+ @Override
+ protected void doExecute() {
+ int index = observable.indexOf(selectedElement);
+ if (index == 0) {
+ return;
+ }
+ observable.move(index - 1, index);
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(
+ command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to move element", e1);
+ }
+ treeViewer.refresh();
+ }
+ });
+ down = createButton(org.eclipse.papyrus.infra.widgets.Activator
+ .getDefault().getImage("/icons/Down_12x12.gif"), "Move down");
+ down.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final Object selectedElement = getSelectedElement();
+ if (selectedElement == null) {
+ return;
+ }
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(editingDomain,
+ "Move Element") {
+
+ @Override
+ protected void doExecute() {
+ int index = observable.indexOf(selectedElement);
+ if (index + 1 == observable.size()) {
+ return;
+ }
+ observable.move(index + 1, index);
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(
+ command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to move element", e1);
+ }
+ treeViewer.refresh();
+ }
+ });
+ add = createButton(org.eclipse.papyrus.infra.widgets.Activator
+ .getDefault().getImage("/icons/Add_12x12.gif"), "Add element");
+ add.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(editingDomain,
+ "Add Element") {
+
+ @Override
+ protected void doExecute() {
+ if (factory.canCreateObject()) {
+ final Object result = factory.createObject(
+ (Control) e.getSource(), context);
+ if (result != null) {
+ observable.add(result);
+ }
+ }
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(
+ command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to add new element", e1);
+ }
+ treeViewer.refresh();
+ }
+ });
+ remove = createButton(org.eclipse.papyrus.infra.widgets.Activator
+ .getDefault().getImage("/icons/Delete_12x12.gif"),
+ "Remove element");
+ remove.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ final Object selectedElement = getSelectedElement();
+ if (selectedElement == null) {
+ return;
+ }
+ treeViewer.setSelection(null);
+ treeViewer.remove(selectedElement);
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(editingDomain,
+ "Delete Element") {
+
+ @Override
+ protected void doExecute() {
+ observable.remove(selectedElement);
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(
+ command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to add new element", e1);
+ }
+ }
+ });
+ edit = createButton(org.eclipse.papyrus.infra.widgets.Activator
+ .getDefault().getImage("/icons/Edit_12x12.gif"), "Edit element");
+ edit.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ final Object selectedElement = getSelectedElement();
+ if (selectedElement == null) {
+ return;
+ }
+ EMFCommandOperation command = new EMFCommandOperation(
+ editingDomain, new RecordingCommand(editingDomain,
+ "Edit Element") {
+
+ @Override
+ protected void doExecute() {
+ if (factory.canEdit()) {
+ factory.edit((Control) e.getSource(),
+ selectedElement);
+ }
+ }
+ });
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(
+ command, null, null);
+ } catch (ExecutionException e1) {
+ Activator.log.error("Failed to add new element", e1);
+ }
+ treeViewer.refresh(selectedElement, true);
+ }
+ });
+ }
+
+ protected Button createButton(Image image, String toolTipText) {
+ Button button = new Button(buttonSection, SWT.PUSH);
+ button.setImage(image);
+ button.setToolTipText(toolTipText);
+ return button;
+ }
+
+ /**
+ * Queries the tree viewer
+ *
+ * @return
+ */
+ public TreeViewer getViewer() {
+ return treeViewer;
+ }
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent arg0) {
+ // handle selection change
+ }
+
+ @Override
+ public void handleChange(ChangeEvent arg0) {
+ if (treeViewer != null && !treeViewer.getControl().isDisposed()) {
+ treeViewer.refresh();
+ }
+ }
+
+ public class MultiReferenceEditorContentProvider implements
+ ITreeContentProvider {
+
+ @Override
+ public void dispose() {
+
+ }
+
+ @Override
+ public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
+
+ }
+
+ @Override
+ public Object[] getChildren(Object arg0) {
+ return null;
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof IObservableList) {
+ return ((IObservableList) inputElement).toArray();
+ }
+
+ return new Object[] {};
+ }
+
+ @Override
+ public Object getParent(Object arg0) {
+ return null;
+ }
+
+ @Override
+ public boolean hasChildren(Object arg0) {
+ return false;
+ }
+ }
+}
diff --git a/codegen/org.eclipse.papyrusrt.releng/.project b/codegen/org.eclipse.papyrusrt.releng/.project
new file mode 100644
index 0000000..6c38578
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.releng</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.releng/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.releng/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.releng/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.releng/about.html b/codegen/org.eclipse.papyrusrt.releng/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.releng/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.releng/about.properties b/codegen/org.eclipse.papyrusrt.releng/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.releng/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.releng/category.xml b/codegen/org.eclipse.papyrusrt.releng/category.xml
new file mode 100644
index 0000000..b83b784
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.releng/category.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+ <feature url="features/org.eclipse.papyrusrt.codegen-feature_0.5.0.qualifier.jar" id="org.eclipse.papyrusrt.codegen-feature" version="0.5.0.qualifier">
+ <category name="org.eclipse.papyrusrt.main"/>
+ </feature>
+ <feature url="features/org.eclipse.papyrusrt.protocoleditor-feature_0.5.0.qualifier.jar" id="org.eclipse.papyrusrt.protocoleditor-feature" version="0.5.0.qualifier">
+ <category name="org.eclipse.papyrusrt.main"/>
+ </feature>
+ <feature url="features/org.eclipse.papyrusrt.rts-feature_0.5.0.qualifier.jar" id="org.eclipse.papyrusrt.rts-feature" version="0.5.0.qualifier">
+ <category name="org.eclipse.papyrusrt.main"/>
+ </feature>
+ <category-def name="org.eclipse.papyrusrt.main" label="PapyrusRT">
+ <description>
+ The PapyrusRT code generator, runtime system and protocol editor.
+ </description>
+ </category-def>
+</site>
diff --git a/codegen/org.eclipse.papyrusrt.releng/pom.xml b/codegen/org.eclipse.papyrusrt.releng/pom.xml
new file mode 100644
index 0000000..cc764bd
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.releng/pom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.releng</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-repository</packaging>
+
+</project>
+
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/.project b/codegen/org.eclipse.papyrusrt.rts-feature/.project
new file mode 100644
index 0000000..60ec4f0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.rts-feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/build.properties b/codegen/org.eclipse.papyrusrt.rts-feature/build.properties
new file mode 100644
index 0000000..0cb1fcc
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = feature.xml,\
+ license.html,\
+ epl-v10.html
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/epl-v10.html b/codegen/org.eclipse.papyrusrt.rts-feature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/feature.properties b/codegen/org.eclipse.papyrusrt.rts-feature/feature.properties
new file mode 100644
index 0000000..11ac9ed
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/feature.properties
@@ -0,0 +1,132 @@
+# NLS_MESSAGEFORMAT_VAR
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+\t- Content may be structured and packaged into modules to facilitate delivering,\n\
+\t extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+\t plug-in fragments ("Fragments"), and features ("Features").\n\
+\t- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+\t in a directory named "plugins".\n\
+\t- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+\t Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+\t Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+\t numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+\t- Features may also include other Features ("Included Features"). Within a Feature, files\n\
+\t named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+\t- The top-level (root) directory\n\
+\t- Plug-in and Fragment directories\n\
+\t- Inside Plug-ins and Fragments packaged as JARs\n\
+\t- Sub-directories of the directory named "src" of certain Plug-ins\n\
+\t- Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+\t- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+\t- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+\t- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+\t- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+\t- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+\t1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+\t the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+\t extending or updating the functionality of an Eclipse-based product.\n\
+\t2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+\t Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+\t3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+\t govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+\t Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+\t with the Specification. Such Installable Software Agreement must inform the user of the\n\
+\t terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+\t the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+\t indication of agreement by the user, the provisioning Technology will complete installation\n\
+\t of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/feature.xml b/codegen/org.eclipse.papyrusrt.rts-feature/feature.xml
new file mode 100644
index 0000000..c0b0c2e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/feature.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.papyrusrt.rts-feature"
+ label="Papyrus-RT Run-Time System"
+ version="0.5.0.qualifier"
+ provider-name="Zeligsoft (2009) Limited">
+
+ <description url="http://www.example.com/description">
+ Papyrus-RT is an industrial-grade, complete modeling environment
+for the development of complex, software intensive, real-time,
+embedded, cyber-physical systems.
+
+This feature contains the run-time system (RTS) for UML-RT applications.
+ </description>
+
+ <copyright url="http://www.example.com/copyright">
+ Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
+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
+ </copyright>
+
+ <license url="https://eclipse.org/legal/epl/notice.html">
+ Eclipse Foundation Software User Agreement
+
+April 9, 2014
+
+Usage Of Content
+
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.
+
+Applicable Licenses
+
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL, "Program" will mean the Content.
+
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").
+
+Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").
+Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".
+A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.
+Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:
+
+The top-level (root) directory
+Plug-in and Fragment directories
+Inside Plug-ins and Fragments packaged as JARs
+Sub-directories of the directory named "src" of certain Plug-ins
+Feature directories
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.
+
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
+
+Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)
+Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)
+Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)
+Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)
+Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.
+
+Use of Provisioning Technology
+
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").
+
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:
+
+A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.
+During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.
+Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.
+Cryptography
+
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.
+
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+ </license>
+
+ <url>
+ <update label="Papyrus-RT update site" url="https://umlrt.zeligsoft.com/updatesite"/>
+ </url>
+
+ <requires>
+ <import plugin="org.eclipse.ui" version="3.107.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.core.runtime" version="3.10.0" match="greaterOrEqual"/>
+ <import plugin="org.eclipse.gmf.runtime.emf.core" version="1.7.0" match="greaterOrEqual"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.papyrusrt.rts"
+ download-size="0"
+ install-size="0"
+ version="0.5.0.qualifier"/>
+
+</feature>
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/license.html b/codegen/org.eclipse.papyrusrt.rts-feature/license.html
new file mode 100644
index 0000000..0fd3dd1
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.rts-feature/pom.xml b/codegen/org.eclipse.papyrusrt.rts-feature/pom.xml
new file mode 100644
index 0000000..5416fe8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts-feature/pom.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.rts-feature</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.rts/.classpath b/codegen/org.eclipse.papyrusrt.rts/.classpath
new file mode 100644
index 0000000..9e307bb
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.rts/.project b/codegen/org.eclipse.papyrusrt.rts/.project
new file mode 100644
index 0000000..965314c
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.rts</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.rts/.settings/org.eclipse.core.resources.prefs b/codegen/org.eclipse.papyrusrt.rts/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/codegen/org.eclipse.papyrusrt.rts/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.rts/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/codegen/org.eclipse.papyrusrt.rts/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.rts/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..93ba8f8
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Eclipse-BundleShape: dir
+Bundle-ManifestVersion: 2
+Bundle-Name: Papyrus-RT Run-Time System
+Bundle-SymbolicName: org.eclipse.papyrusrt.rts;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.eclipse.ui;bundle-version="3.107.0",
+ org.eclipse.core.runtime;bundle-version="3.10.0",
+ org.eclipse.gmf.runtime.emf.core;bundle-version="1.7.0"
+Bundle-Vendor: Zeligsoft (2009) Limited
diff --git a/codegen/org.eclipse.papyrusrt.rts/about.html b/codegen/org.eclipse.papyrusrt.rts/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.rts/about.properties b/codegen/org.eclipse.papyrusrt.rts/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.rts/build.properties b/codegen/org.eclipse.papyrusrt.rts/build.properties
new file mode 100644
index 0000000..ec79af9
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/build.properties
@@ -0,0 +1,9 @@
+output.. = bin/
+bin.includes = .,\
+ umlrts/,\
+ META-INF/,\
+ plugin.xml,\
+ libraries/,\
+ icons/,\
+ about.html
+src.includes = libraries/
diff --git a/codegen/org.eclipse.papyrusrt.rts/icons/UMLRTRTS.png b/codegen/org.eclipse.papyrusrt.rts/icons/UMLRTRTS.png
new file mode 100644
index 0000000..ddcab60
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/icons/UMLRTRTS.png
Binary files differ
diff --git a/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.di b/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.di
new file mode 100644
index 0000000..bf9abab
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.notation b/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.notation
new file mode 100644
index 0000000..bd9ae88
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.notation
@@ -0,0 +1,1391 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:configuration="http://www.eclipse.org/papyrus/infra/viewpoints/configuration" xmlns:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+ <css:ModelStyleSheets xmi:id="_o7lI8GXmEeS_4daqvwyFrg"/>
+ <notation:Diagram xmi:id="_AV4d8GXsEeS_4daqvwyFrg" type="PapyrusUMLClassDiagram" name="pkg | Protocols" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_-bp5kGtUEeSCmtGQ-V4nzg" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_A6JGEOhYEeSwfNwUI8sCsg" source="PapyrusHyperLink_Page" references="_U0_V0OhWEeSwfNwUI8sCsg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_A6JGEehYEeSwfNwUI8sCsg" key="tooltip_text" value="cd | UMLRTTimerProtocol"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_A6JGEuhYEeSwfNwUI8sCsg" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_A6JGE-hYEeSwfNwUI8sCsg" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_-bs84GtUEeSCmtGQ-V4nzg" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_-btj8GtUEeSCmtGQ-V4nzg" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_-btj8WtUEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-btj8mtUEeSCmtGQ-V4nzg"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_BlAjgGXsEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-bp5kWtUEeSCmtGQ-V4nzg" x="57" y="193"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_CKpGIICFEeSeANT-DfY5oA" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_iKxJUOhEEeSwfNwUI8sCsg" source="PapyrusHyperLink_Page" references="_VfOi4GtVEeSCmtGQ-V4nzg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iKxJUehEEeSwfNwUI8sCsg" key="tooltip_text" value="cd | Frame"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iKxJUuhEEeSwfNwUI8sCsg" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iKxJU-hEEeSwfNwUI8sCsg" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_CKptMICFEeSeANT-DfY5oA" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_CKptMYCFEeSeANT-DfY5oA" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_CKptMoCFEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CKptM4CFEeSeANT-DfY5oA"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_NUhyUGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CKpGIYCFEeSeANT-DfY5oA" x="57" y="53"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fpVHUOhEEeSwfNwUI8sCsg" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_m8nuwOhEEeSwfNwUI8sCsg" source="PapyrusHyperLink_Page" references="_ByDbEIeYEeSVyrlWP4nYew">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_m8nuwehEEeSwfNwUI8sCsg" key="tooltip_text" value="cd | UMLRTLogProtocol"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_m8nuwuhEEeSwfNwUI8sCsg" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_m8nuw-hEEeSwfNwUI8sCsg" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fpYKoOhEEeSwfNwUI8sCsg" type="5026"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fpYKoehEEeSwfNwUI8sCsg" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fpYKouhEEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fpYKo-hEEeSwfNwUI8sCsg"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_yx-HEIeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fpVHUehEEeSwfNwUI8sCsg" x="317" y="53"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5y93YOzeEeSRtqCWFwOf8g" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GmP8oOzfEeSRtqCWFwOf8g" source="PapyrusHyperLink_Page" references="_ARTz0OzfEeSRtqCWFwOf8g">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GmP8oezfEeSRtqCWFwOf8g" key="tooltip_text" value="cd | UMLRTGlobalProtocol"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GmP8ouzfEeSRtqCWFwOf8g" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GmP8o-zfEeSRtqCWFwOf8g" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_5y93YuzeEeSRtqCWFwOf8g" type="5026"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5y-ecOzeEeSRtqCWFwOf8g" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5y-ecezeEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5y-ecuzeEeSRtqCWFwOf8g"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#__4L-oOzdEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5y93YezeEeSRtqCWFwOf8g" x="317" y="193"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_AV4d8WXsEeS_4daqvwyFrg" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_AV4d8mXsEeS_4daqvwyFrg"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_AV4d82XsEeS_4daqvwyFrg">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_6xr1kGXrEeS_4daqvwyFrg"/>
+ <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#_7wLmpNxhEeOqHvRyiN87hA"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_6xr1kGXrEeS_4daqvwyFrg"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_VfOi4GtVEeSCmtGQ-V4nzg" type="PapyrusUMLClassDiagram" name="cd | UMLRTFrameProtocol" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_ZVRAUGtVEeSCmtGQ-V4nzg" type="2097">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ZVRnYGtVEeSCmtGQ-V4nzg" type="5157"/>
+ <element xmi:type="uml:Collaboration" href="UMLRT-RTS.uml#_TWVjwGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZVRAUWtVEeSCmtGQ-V4nzg" x="399" y="24" width="130"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_a8NI8GtVEeSCmtGQ-V4nzg" type="2004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_jP8gwGtVEeSCmtGQ-V4nzg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jP8gwWtVEeSCmtGQ-V4nzg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jP8gwmtVEeSCmtGQ-V4nzg" key="StereotypeList" value="UMLRealTime::RTMessageSet"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jP8gw2tVEeSCmtGQ-V4nzg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jP9H0GtVEeSCmtGQ-V4nzg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jP9H0WtVEeSCmtGQ-V4nzg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__Dr6YOzvEeS9Cvenl1DGlQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__DshcOzvEeS9Cvenl1DGlQ" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_a8NI8mtVEeSCmtGQ-V4nzg" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_a8NwAGtVEeSCmtGQ-V4nzg" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_a8NwAWtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_a8NwAmtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_a8NwA2tVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_a8NwBGtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_a8NwBWtVEeSCmtGQ-V4nzg" type="7007">
+ <children xmi:type="notation:Shape" xmi:id="_s-YTAICgEeSeANT-DfY5oA" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_s-Wd0ICgEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_s-YTAYCgEeSeANT-DfY5oA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xx4BwIChEeSeANT-DfY5oA" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_xx2MkIChEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xx4BwYChEeSeANT-DfY5oA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_-rDfUL6JEeSGie7nK8XKTA" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_eI-mIL6HEeSGie7nK8XKTA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_-rDfUb6JEeSGie7nK8XKTA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_-rVzML6JEeSGie7nK8XKTA" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_kLBLoL6IEeSGie7nK8XKTA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_-rVzMb6JEeSGie7nK8XKTA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_-rdvAL6JEeSGie7nK8XKTA" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_ifAgUL6JEeSGie7nK8XKTA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_-rdvAb6JEeSGie7nK8XKTA"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_a8NwBmtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_a8NwB2tVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_a8NwCGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_a8NwCWtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_a8NwCmtVEeSCmtGQ-V4nzg" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_a8NwC2tVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_a8NwDGtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_a8NwDWtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_a8NwDmtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="__DrTUOzvEeS9Cvenl1DGlQ"/>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_a74Y0GtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_a8NI8WtVEeSCmtGQ-V4nzg" x="194" y="148" width="155" height="141"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_bMgOwGtVEeSCmtGQ-V4nzg" type="2004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kgIWQGtVEeSCmtGQ-V4nzg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kgI9UGtVEeSCmtGQ-V4nzg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kgI9UWtVEeSCmtGQ-V4nzg" key="StereotypeList" value="UMLRealTime::RTMessageSet"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kgI9UmtVEeSCmtGQ-V4nzg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kgI9U2tVEeSCmtGQ-V4nzg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kgI9VGtVEeSCmtGQ-V4nzg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_bMg10GtVEeSCmtGQ-V4nzg" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bMg10WtVEeSCmtGQ-V4nzg" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bMg10mtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bMg102tVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bMg11GtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bMg11WtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bMg11mtVEeSCmtGQ-V4nzg" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bMg112tVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bMg12GtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bMg12WtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bMg12mtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bMg122tVEeSCmtGQ-V4nzg" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bMg13GtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bMg13WtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bMg13mtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bMg132tVEeSCmtGQ-V4nzg"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_bMdygGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bMgOwWtVEeSCmtGQ-V4nzg" x="579" y="148" width="155" height="141"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_bge6sGtVEeSCmtGQ-V4nzg" type="2004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mUQmUGtVEeSCmtGQ-V4nzg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mUQmUWtVEeSCmtGQ-V4nzg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mURNYGtVEeSCmtGQ-V4nzg" key="StereotypeList" value="UMLRealTime::RTMessageSet"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mURNYWtVEeSCmtGQ-V4nzg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mURNYmtVEeSCmtGQ-V4nzg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mURNY2tVEeSCmtGQ-V4nzg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_bgfhwGtVEeSCmtGQ-V4nzg" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bgfhwWtVEeSCmtGQ-V4nzg" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bgfhwmtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bgfhw2tVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bgfhxGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bgfhxWtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bgfhxmtVEeSCmtGQ-V4nzg" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bgfhx2tVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bgfhyGtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bgfhyWtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bgfhymtVEeSCmtGQ-V4nzg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bgfhy2tVEeSCmtGQ-V4nzg" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bgfhzGtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bgfhzWtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bgfhzmtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bgfhz2tVEeSCmtGQ-V4nzg"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_bgdFgGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bge6sWtVEeSCmtGQ-V4nzg" x="386" y="148" width="155" height="141"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fvdEcOzZEeSRtqCWFwOf8g" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fvdrgOzZEeSRtqCWFwOf8g" type="5038"/>
+ <element xmi:type="uml:Comment" href="UMLRT-RTS.uml#_ttT6QOhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fvdEcezZEeSRtqCWFwOf8g" x="194" y="315" width="540" height="48"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_VfOi4WtVEeSCmtGQ-V4nzg" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_VfOi4mtVEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_VfOi42tVEeSCmtGQ-V4nzg">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_NUhyUGtVEeSCmtGQ-V4nzg"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_NUhyUGtVEeSCmtGQ-V4nzg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_pVx2kGtVEeSCmtGQ-V4nzg" type="4007" source="_ZVRAUGtVEeSCmtGQ-V4nzg" target="_bMgOwGtVEeSCmtGQ-V4nzg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_pVydoGtVEeSCmtGQ-V4nzg" visible="false" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pVydoWtVEeSCmtGQ-V4nzg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_pVydomtVEeSCmtGQ-V4nzg" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pVydo2tVEeSCmtGQ-V4nzg" x="-1" y="-17"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_pVx2kWtVEeSCmtGQ-V4nzg"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#_pVpTsGtVEeSCmtGQ-V4nzg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pVx2kmtVEeSCmtGQ-V4nzg" points="[-1, 25, 0, -86]$[-6, 89, -5, -22]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1b3MsGtXEeSCmtGQ-V4nzg" id="(1.0,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pWExgGtVEeSCmtGQ-V4nzg" id="(0.3096774193548387,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_p1BXUGtVEeSCmtGQ-V4nzg" type="4007" source="_ZVRAUGtVEeSCmtGQ-V4nzg" target="_bge6sGtVEeSCmtGQ-V4nzg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_p1B-YGtVEeSCmtGQ-V4nzg" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_p1B-YWtVEeSCmtGQ-V4nzg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_p1B-YmtVEeSCmtGQ-V4nzg" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_p1B-Y2tVEeSCmtGQ-V4nzg" x="56" y="-11"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_p1BXUWtVEeSCmtGQ-V4nzg"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#_p0-7EGtVEeSCmtGQ-V4nzg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_p1BXUmtVEeSCmtGQ-V4nzg" points="[6, 4, -132, -101]$[131, 100, -7, -5]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_p1LIUGtVEeSCmtGQ-V4nzg" id="(0.7615384615384615,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rWM2MGtVEeSCmtGQ-V4nzg" id="(0.7225806451612903,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_qQzUYGtVEeSCmtGQ-V4nzg" type="4005" source="_ZVRAUGtVEeSCmtGQ-V4nzg" target="_a8NI8GtVEeSCmtGQ-V4nzg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_qQzUY2tVEeSCmtGQ-V4nzg" visible="false" type="6012">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qQz7cGtVEeSCmtGQ-V4nzg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_qQz7cWtVEeSCmtGQ-V4nzg" type="6013">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qQz7cmtVEeSCmtGQ-V4nzg" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_qQzUYWtVEeSCmtGQ-V4nzg"/>
+ <element xmi:type="uml:Realization" href="UMLRT-RTS.uml#_qQwREGtVEeSCmtGQ-V4nzg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qQzUYmtVEeSCmtGQ-V4nzg" points="[-36, 25, 108, -75]$[-137, 89, 7, -11]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s8bNIGtVEeSCmtGQ-V4nzg" id="(0.0,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qQ_hoGtVEeSCmtGQ-V4nzg" id="(0.7032258064516129,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_q2O8sGtVEeSCmtGQ-V4nzg" type="4005" source="_ZVRAUGtVEeSCmtGQ-V4nzg" target="_bge6sGtVEeSCmtGQ-V4nzg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_q2PjwGtVEeSCmtGQ-V4nzg" type="6012">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_q2PjwWtVEeSCmtGQ-V4nzg" x="10" y="116"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_q2PjwmtVEeSCmtGQ-V4nzg" type="6013">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_q2Pjw2tVEeSCmtGQ-V4nzg" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_q2O8sWtVEeSCmtGQ-V4nzg"/>
+ <element xmi:type="uml:Realization" href="UMLRT-RTS.uml#_q2MgcGtVEeSCmtGQ-V4nzg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_q2O8smtVEeSCmtGQ-V4nzg" points="[10, 11, -94, -102]$[83, 100, -21, -13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_q2Z70GtVEeSCmtGQ-V4nzg" id="(0.3230769230769231,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_q2ai4GtVEeSCmtGQ-V4nzg" id="(0.3548387096774194,0.0)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_K8vmIGtWEeSCmtGQ-V4nzg" type="PapyrusUMLClassDiagram" name="pkg | Types" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_8mNwAGtWEeSCmtGQ-V4nzg" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-9PRwGtWEeSCmtGQ-V4nzg" source="PapyrusHyperLink_Page" references="_5W7JgGtWEeSCmtGQ-V4nzg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-9PRwWtWEeSCmtGQ-V4nzg" key="tooltip_text" value="cd | General"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-9PRwmtWEeSCmtGQ-V4nzg" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-9PRw2tWEeSCmtGQ-V4nzg" key="is_default_navigation" value="false"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_8mNwAmtWEeSCmtGQ-V4nzg" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_8mNwA2tWEeSCmtGQ-V4nzg" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_8mNwBGtWEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8mNwBWtWEeSCmtGQ-V4nzg"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_1rdkYGtWEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8mNwAWtWEeSCmtGQ-V4nzg" x="25" y="47"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_G6lXAHDiEeS87_I7iwkr5g" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UjYvAHDiEeS87_I7iwkr5g" source="PapyrusHyperLink_Page" references="_RTBKcHDiEeS87_I7iwkr5g">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UjYvAXDiEeS87_I7iwkr5g" key="tooltip_text" value="cd | Communications"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UjYvAnDiEeS87_I7iwkr5g" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UjYvA3DiEeS87_I7iwkr5g" key="is_default_navigation" value="false"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_G6l-EHDiEeS87_I7iwkr5g" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_G6l-EXDiEeS87_I7iwkr5g" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G6l-EnDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G6l-E3DiEeS87_I7iwkr5g"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_G6gegHDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G6lXAXDiEeS87_I7iwkr5g" x="495" y="163"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_wntEwICNEeSeANT-DfY5oA" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_AK00YICOEeSeANT-DfY5oA" source="PapyrusHyperLink_Page" references="_3uqgYICNEeSeANT-DfY5oA">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_AK00YYCOEeSeANT-DfY5oA" key="tooltip_text" value="cd | Capsule"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_AK00YoCOEeSeANT-DfY5oA" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_AK00Y4COEeSeANT-DfY5oA" key="is_default_navigation" value="false"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_wntEwoCNEeSeANT-DfY5oA" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_wntEw4CNEeSeANT-DfY5oA" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wntExICNEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wntExYCNEeSeANT-DfY5oA"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_wnrPkICNEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wntEwYCNEeSeANT-DfY5oA" x="25" y="163"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IU-hoICqEeSYmJvm6id8mw" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_IVA94ICqEeSYmJvm6id8mw" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_IVBk8ICqEeSYmJvm6id8mw" type="7016">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_IVBk8YCqEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IVBk8oCqEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_9jdl4G6MEeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IU-hoYCqEeSYmJvm6id8mw" x="258" y="163"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_K8vmIWtWEeSCmtGQ-V4nzg" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_K8vmImtWEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_K8vmI2tWEeSCmtGQ-V4nzg">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_2XUjEGXrEeS_4daqvwyFrg"/>
+ <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#_7wLmpNxhEeOqHvRyiN87hA"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_2XUjEGXrEeS_4daqvwyFrg"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_5W7JgGtWEeSCmtGQ-V4nzg" type="PapyrusUMLClassDiagram" name="cd | General" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_9VQEoOzZEeSRtqCWFwOf8g" type="2009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Aa2joOzaEeSRtqCWFwOf8g" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Aa3KsOzaEeSRtqCWFwOf8g" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Aa3KsezaEeSRtqCWFwOf8g" key="StereotypeList" value="C_Cpp::NoCodeGen"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Aa3KsuzaEeSRtqCWFwOf8g" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Aa3Ks-zaEeSRtqCWFwOf8g" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Aa3xwOzaEeSRtqCWFwOf8g" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_9VQEouzZEeSRtqCWFwOf8g" type="5032"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_9VQrsOzZEeSRtqCWFwOf8g" type="8511">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_9VQrsezZEeSRtqCWFwOf8g" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_9VRSwOzZEeSRtqCWFwOf8g" visible="false" type="7039">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_9VRSwezZEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_9VRSwuzZEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_9VRSw-zZEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9VRSxOzZEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_9VRSxezZEeSRtqCWFwOf8g" visible="false" type="7040">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_9VRSxuzZEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_9VRSx-zZEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_9VRSyOzZEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9VRSyezZEeSRtqCWFwOf8g"/>
+ </children>
+ <element xmi:type="uml:PrimitiveType" href="UMLRT-RTS.uml#_9U77kOzZEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9VQEoezZEeSRtqCWFwOf8g" x="44" y="111"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ElqhwOzbEeSRtqCWFwOf8g" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ElqhwuzbEeSRtqCWFwOf8g" type="5038"/>
+ <element xmi:type="uml:Comment" href="UMLRT-RTS.uml#_Du2OgOzbEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ElqhwezbEeSRtqCWFwOf8g" x="160" y="111" width="539" height="50"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_5W7JgWtWEeSCmtGQ-V4nzg" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_5W7JgmtWEeSCmtGQ-V4nzg"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_5W7Jg2tWEeSCmtGQ-V4nzg">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_1rdkYGtWEeSCmtGQ-V4nzg"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_1rdkYGtWEeSCmtGQ-V4nzg"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_RTBKcHDiEeS87_I7iwkr5g" type="PapyrusUMLClassDiagram" name="cd | Communications" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_Wkg5QHDiEeS87_I7iwkr5g" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Wkg5QnDiEeS87_I7iwkr5g" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Wkg5Q3DiEeS87_I7iwkr5g" visible="false" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Wkg5RHDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Wkg5RXDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Wkg5RnDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wkg5R3DiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_WkhgUHDiEeS87_I7iwkr5g" visible="false" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WkhgUXDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WkhgUnDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WkhgU3DiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WkhgVHDiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_WkhgVXDiEeS87_I7iwkr5g" visible="false" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_WkhgVnDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WkhgV3DiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WkhgWHDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WkhgWXDiEeS87_I7iwkr5g"/>
+ </children>
+ <element xmi:type="uml:Class" href="UMLRT-RTS.uml#_WkedAHDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wkg5QXDiEeS87_I7iwkr5g" x="414" y="203" width="154" height="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_XwDfUHDiEeS87_I7iwkr5g" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_XwDfUnDiEeS87_I7iwkr5g" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_XwDfU3DiEeS87_I7iwkr5g" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_on8TYHDrEeSwWKwNKw1iAA" type="3012">
+ <element xmi:type="uml:Property" href="UMLRT-RTS.uml#_jwk70HDrEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_on8TYXDrEeSwWKwNKw1iAA"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_pL3f0HDrEeSwWKwNKw1iAA" type="3012">
+ <element xmi:type="uml:Property" href="UMLRT-RTS.uml#_pLzOYHDrEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pL3f0XDrEeSwWKwNKw1iAA"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_XwDfVHDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_XwDfVXDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_XwDfVnDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XwDfV3DiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_XwEGYHDiEeS87_I7iwkr5g" visible="false" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_XwEGYXDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_XwEGYnDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_XwEGY3DiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XwEGZHDiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_XwEGZXDiEeS87_I7iwkr5g" visible="false" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_XwEGZnDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_XwEGZ3DiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_XwEGaHDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XwEGaXDiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_XwPskHDiEeS87_I7iwkr5g" type="compartment_shape_display">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_XwPskXDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XwPsknDiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lFYaUHDlEeS87_I7iwkr5g" type="3032">
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lFYaUXDlEeS87_I7iwkr5g" x="63" y="159"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LKUKAHDmEeS87_I7iwkr5g" type="3032">
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LKUKAXDmEeS87_I7iwkr5g" x="121" y="159"/>
+ </children>
+ <element xmi:type="uml:Class" href="UMLRT-RTS.uml#_XwBDEHDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_XwDfUXDiEeS87_I7iwkr5g" x="230" y="22" height="63"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_o-KKEHDiEeS87_I7iwkr5g" type="2010">
+ <children xmi:type="notation:DecorationNode" xmi:id="_o-KKEnDiEeS87_I7iwkr5g" type="5035"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_o-KKE3DiEeS87_I7iwkr5g" visible="false" type="7020">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_o-KKFHDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_o-KKFXDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_o-KKFnDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o-KKF3DiEeS87_I7iwkr5g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_o-KKGHDiEeS87_I7iwkr5g" visible="false" type="7021">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_o-KKGXDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_o-KKGnDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_o-KKG3DiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o-KKHHDiEeS87_I7iwkr5g"/>
+ </children>
+ <element xmi:type="uml:DataType" href="UMLRT-RTS.uml#_o-Ht0HDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_o-KKEXDiEeS87_I7iwkr5g" x="230" y="203" width="154" height="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qb4uQOkxEeSLqdSmW_99jw" type="2006">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_H9QGsOm8EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_H9QtwOm8EeSU_6ltpxdizg" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_qb5VUOkxEeSLqdSmW_99jw" type="5023"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_qb5VUekxEeSLqdSmW_99jw" type="8508">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qb5VUukxEeSLqdSmW_99jw" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qb58YOkxEeSLqdSmW_99jw" type="7015">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_IDlYMOm8EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_IDlYMem8EeSU_6ltpxdizg" key="mutable" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Shape" xmi:id="_IBE2wOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_Ru19QG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBE2wem8EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IBHTAOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_USPHEG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBHTAem8EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IBH6EOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_WFw6MG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBH6Eem8EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IBIhIOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_XnDt0G6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBIhIem8EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IBJIMOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_ZYBVIG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBJIMem8EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IBJvQOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_cLTVEG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBJvQem8EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IBKWUOm8EeSU_6ltpxdizg" type="3017">
+ <element xmi:type="uml:EnumerationLiteral" href="UMLRT-RTS.uml#_fQPswG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IBKWUem8EeSU_6ltpxdizg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qb58YekxEeSLqdSmW_99jw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qb58YukxEeSLqdSmW_99jw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qb58Y-kxEeSLqdSmW_99jw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qb58ZOkxEeSLqdSmW_99jw"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="_H9PfoOm8EeSU_6ltpxdizg"/>
+ <element xmi:type="uml:Enumeration" href="UMLRT-RTS.uml#_QFZTMG6REeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qb4uQekxEeSLqdSmW_99jw" x="47" y="203"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_RTBKcXDiEeS87_I7iwkr5g" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_RTBKcnDiEeS87_I7iwkr5g"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_RTBKc3DiEeS87_I7iwkr5g">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_G6gegHDiEeS87_I7iwkr5g"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_G6gegHDiEeS87_I7iwkr5g"/>
+ <edges xmi:type="notation:Connector" xmi:id="_pMJUgOm8EeSU_6ltpxdizg" type="4001" source="_qb4uQOkxEeSLqdSmW_99jw" target="_XwDfUHDiEeS87_I7iwkr5g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_pMJ7kOm8EeSU_6ltpxdizg" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pMJ7kem8EeSU_6ltpxdizg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_pMKioOm8EeSU_6ltpxdizg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pMKioem8EeSU_6ltpxdizg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_pMKioum8EeSU_6ltpxdizg" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pMKio-m8EeSU_6ltpxdizg" x="-29" y="-33"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_pMKipOm8EeSU_6ltpxdizg" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pMKipem8EeSU_6ltpxdizg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_pMKipum8EeSU_6ltpxdizg" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pMKip-m8EeSU_6ltpxdizg" x="-13" y="-12"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_pMKiqOm8EeSU_6ltpxdizg" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pMKiqem8EeSU_6ltpxdizg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_pMJUgem8EeSU_6ltpxdizg"/>
+ <element xmi:type="uml:Association" href="UMLRT-RTS.uml#_kdf0EOm8EeSU_6ltpxdizg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_pMJUgum8EeSU_6ltpxdizg" points="[-77, -57, 143, 105]$[-143, -105, 77, 57]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yFM_4Om8EeSU_6ltpxdizg" id="(0.538961038961039,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_yFNm8Om8EeSU_6ltpxdizg" id="(0.0,0.9682539682539683)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_0SeIsOm8EeSU_6ltpxdizg" type="4001" source="_o-KKEHDiEeS87_I7iwkr5g" target="_XwDfUHDiEeS87_I7iwkr5g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0SeIs-m8EeSU_6ltpxdizg" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0SevwOm8EeSU_6ltpxdizg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Sevwem8EeSU_6ltpxdizg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0Sevwum8EeSU_6ltpxdizg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Sevw-m8EeSU_6ltpxdizg" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0SevxOm8EeSU_6ltpxdizg" x="-1" y="-57"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Sevxem8EeSU_6ltpxdizg" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0Sevxum8EeSU_6ltpxdizg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Sevx-m8EeSU_6ltpxdizg" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0SevyOm8EeSU_6ltpxdizg" x="-1" y="-26"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Sevyem8EeSU_6ltpxdizg" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0SfW0Om8EeSU_6ltpxdizg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_0SeIsem8EeSU_6ltpxdizg"/>
+ <element xmi:type="uml:Association" href="UMLRT-RTS.uml#_zE_o8Om8EeSU_6ltpxdizg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0SeIsum8EeSU_6ltpxdizg" points="[-77, 10, 143, -19]$[-128, 16, 92, -13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_01AOAOm8EeSU_6ltpxdizg" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_01AOAem8EeSU_6ltpxdizg" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_6DlywOm8EeSU_6ltpxdizg" type="4001" source="_Wkg5QHDiEeS87_I7iwkr5g" target="_XwDfUHDiEeS87_I7iwkr5g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_6DmZ0Om8EeSU_6ltpxdizg" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6DmZ0em8EeSU_6ltpxdizg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6DmZ0um8EeSU_6ltpxdizg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6DmZ0-m8EeSU_6ltpxdizg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6DmZ1Om8EeSU_6ltpxdizg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__ScdQOm8EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__ScdQem8EeSU_6ltpxdizg" key="visible" value="true"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6DmZ1em8EeSU_6ltpxdizg" x="-24" y="25"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6DmZ1um8EeSU_6ltpxdizg" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6DmZ1-m8EeSU_6ltpxdizg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6DmZ2Om8EeSU_6ltpxdizg" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6DnA4Om8EeSU_6ltpxdizg" x="-39" y="45"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6DnA4em8EeSU_6ltpxdizg" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6DnA4um8EeSU_6ltpxdizg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_6Dlywem8EeSU_6ltpxdizg"/>
+ <element xmi:type="uml:Association" href="UMLRT-RTS.uml#_5MoVkOm8EeSU_6ltpxdizg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_6Dlywum8EeSU_6ltpxdizg" points="[0, 0, 38, 130]$[-38, -130, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6kW9gOm8EeSU_6ltpxdizg" id="(0.461038961038961,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6kW9gem8EeSU_6ltpxdizg" id="(1.0,0.8095238095238095)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_xwb9gICEEeSeANT-DfY5oA" type="PapyrusUMLClassDiagram" name="pkg | RTS" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_y4d8kICEEeSeANT-DfY5oA" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_7VYF0OkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_AV4d8GXsEeS_4daqvwyFrg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7VYF0ekvEeSLqdSmW_99jw" key="tooltip_text" value="pkg | Protocols"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7VYF0ukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7VYF0-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_y4ejoICEEeSeANT-DfY5oA" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_y4ejoYCEEeSeANT-DfY5oA" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_vd3WwICsEeSYmJvm6id8mw" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vtNv4OkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_VfOi4GtVEeSCmtGQ-V4nzg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vtNv4ekvEeSLqdSmW_99jw" key="tooltip_text" value="cd | UMLRTFrameProtocol"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vtNv4ukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vtNv4-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_vd390ICsEeSYmJvm6id8mw" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_vd390YCsEeSYmJvm6id8mw" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vd390oCsEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vd3904CsEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_NUhyUGtVEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vd3WwYCsEeSYmJvm6id8mw" x="17" y="24"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_wcrIYICsEeSYmJvm6id8mw" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zPaEQOkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_U0_V0OhWEeSwfNwUI8sCsg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zPaEQekvEeSLqdSmW_99jw" key="tooltip_text" value="cd | UMLRTTimerProtocol"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zPaEQukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zPaEQ-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_wcrvcICsEeSYmJvm6id8mw" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_wcrvcYCsEeSYmJvm6id8mw" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wcrvcoCsEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wcrvc4CsEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_BlAjgGXsEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wcrIYYCsEeSYmJvm6id8mw" x="17" y="150"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_yydPQIeXEeSVyrlWP4nYew" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_0fOtYOkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_ByDbEIeYEeSVyrlWP4nYew">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_0fOtYekvEeSLqdSmW_99jw" key="tooltip_text" value="cd | UMLRTLogProtocol"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_0fOtYukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_0fOtY-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yydPQoeXEeSVyrlWP4nYew" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yydPQ4eXEeSVyrlWP4nYew" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yydPRIeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yydPRYeXEeSVyrlWP4nYew"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_yx-HEIeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yydPQYeXEeSVyrlWP4nYew" x="17" y="276"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_y4ejooCEEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y4ejo4CEEeSeANT-DfY5oA"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_6xr1kGXrEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y4d8kYCEEeSeANT-DfY5oA" x="331" y="38" width="260" height="430"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_y4vCUICEEeSeANT-DfY5oA" type="2007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6cbEkOkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_K8vmIGtWEeSCmtGQ-V4nzg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6cbEkekvEeSLqdSmW_99jw" key="tooltip_text" value="pkg | Types"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6cbEkukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6cbEk-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_y4vCUoCEEeSeANT-DfY5oA" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_y4vCU4CEEeSeANT-DfY5oA" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_yWDr4ICsEeSYmJvm6id8mw" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_1r1DYOkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_3uqgYICNEeSeANT-DfY5oA">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1r1DYekvEeSLqdSmW_99jw" key="tooltip_text" value="cd | Capsule"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1r1DYukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_1r1DY-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yWDr4oCsEeSYmJvm6id8mw" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yWDr44CsEeSYmJvm6id8mw" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yWDr5ICsEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yWDr5YCsEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_wnrPkICNEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yWDr4YCsEeSYmJvm6id8mw" x="17" y="12" width="144" height="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0Ss-wICsEeSYmJvm6id8mw" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2vT5oOkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_RTBKcHDiEeS87_I7iwkr5g">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2vT5oekvEeSLqdSmW_99jw" key="tooltip_text" value="cd | Communications"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2vT5oukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2vT5o-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Ss-woCsEeSYmJvm6id8mw" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0Ss-w4CsEeSYmJvm6id8mw" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0Ss-xICsEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0Ss-xYCsEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_G6gegHDiEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0Ss-wYCsEeSYmJvm6id8mw" x="17" y="85" width="144" height="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_1dy44ICsEeSYmJvm6id8mw" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_4TTb8OkvEeSLqdSmW_99jw" source="PapyrusHyperLink_Page" references="_5W7JgGtWEeSCmtGQ-V4nzg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4TTb8ekvEeSLqdSmW_99jw" key="tooltip_text" value="cd | General"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4TTb8ukvEeSLqdSmW_99jw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4TTb8-kvEeSLqdSmW_99jw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1dzf8ICsEeSYmJvm6id8mw" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1dzf8YCsEeSYmJvm6id8mw" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_1dzf8oCsEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1dzf84CsEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_1rdkYGtWEeSCmtGQ-V4nzg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1dy44YCsEeSYmJvm6id8mw" x="17" y="158" width="144" height="56"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_3Gc4wICsEeSYmJvm6id8mw" type="3009">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uOYeUOnHEeSdLJKftsZBhw" source="PapyrusHyperLink_Page" references="_g-_a8Om-EeSU_6ltpxdizg">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uOYeUenHEeSdLJKftsZBhw" key="tooltip_text" value="cd | time"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uOYeUunHEeSdLJKftsZBhw" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uOYeU-nHEeSdLJKftsZBhw" key="is_default_navigation" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3Gc4woCsEeSYmJvm6id8mw" type="5017"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3Gc4w4CsEeSYmJvm6id8mw" type="7010">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_3Gc4xICsEeSYmJvm6id8mw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3Gc4xYCsEeSYmJvm6id8mw"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_9jdl4G6MEeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3Gc4wYCsEeSYmJvm6id8mw" x="17" y="231" width="144" height="56"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_y4vCVICEEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y4vCVYCEEeSeANT-DfY5oA"/>
+ </children>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_2XUjEGXrEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_y4vCUYCEEeSeANT-DfY5oA" x="30" y="45" width="246" height="342"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_xwb9gYCEEeSeANT-DfY5oA" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_xwb9goCEEeSeANT-DfY5oA"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_xwb9g4CEEeSeANT-DfY5oA">
+ <owner xmi:type="uml:Model" href="UMLRT-RTS.uml#_mPjAgGXmEeS_4daqvwyFrg"/>
+ <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#_7wLmpNxhEeOqHvRyiN87hA"/>
+ </styles>
+ <element xmi:type="uml:Model" href="UMLRT-RTS.uml#_mPjAgGXmEeS_4daqvwyFrg"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_3uqgYICNEeSeANT-DfY5oA" type="PapyrusUMLClassDiagram" name="cd | Capsule" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_MLM2AICOEeSeANT-DfY5oA" type="2010">
+ <children xmi:type="notation:DecorationNode" xmi:id="_MLM2AoCOEeSeANT-DfY5oA" type="5035"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_MLM2A4COEeSeANT-DfY5oA" type="7020">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_MLM2BICOEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MLM2BYCOEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MLM2BoCOEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MLM2B4COEeSeANT-DfY5oA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_MLM2CICOEeSeANT-DfY5oA" type="7021" collapsed="true">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_MLM2CYCOEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MLM2CoCOEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MLM2C4COEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MLM2DICOEeSeANT-DfY5oA"/>
+ </children>
+ <element xmi:type="uml:DataType" href="UMLRT-RTS.uml#_MLLA0ICOEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MLM2AYCOEeSeANT-DfY5oA" x="45" y="124" width="177" height="77"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_GfzcoICSEeSeANT-DfY5oA" type="2008">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gf0DsICSEeSeANT-DfY5oA" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Gf0DsYCSEeSeANT-DfY5oA" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Gf0DsoCSEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Gf0Ds4CSEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Gf0DtICSEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Gf0DtYCSEeSeANT-DfY5oA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Gf0DtoCSEeSeANT-DfY5oA" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_sNrgwoCeEeSeANT-DfY5oA" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_X68AUICeEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sNrgw4CeEeSeANT-DfY5oA"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Gf0Dt4CSEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Gf0DuICSEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Gf0DuYCSEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Gf0DuoCSEeSeANT-DfY5oA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Gf0qwICSEeSeANT-DfY5oA" visible="false" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Gf0qwYCSEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Gf0qwoCSEeSeANT-DfY5oA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Gf0qw4CSEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Gf0qxICSEeSeANT-DfY5oA"/>
+ </children>
+ <element xmi:type="uml:Class" href="UMLRT-RTS.uml#_GfwZUICSEeSeANT-DfY5oA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GfzcoYCSEeSeANT-DfY5oA" x="45" y="22" width="177" height="77"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_3urHcICNEeSeANT-DfY5oA" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_3urHcYCNEeSeANT-DfY5oA"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_3urHcoCNEeSeANT-DfY5oA">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_wnrPkICNEeSeANT-DfY5oA"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_wnrPkICNEeSeANT-DfY5oA"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_ByDbEIeYEeSVyrlWP4nYew" type="PapyrusUMLClassDiagram" name="cd | UMLRTLogProtocol" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_DJERUIeYEeSVyrlWP4nYew" type="2097">
+ <children xmi:type="notation:DecorationNode" xmi:id="_DJERUoeYEeSVyrlWP4nYew" type="5157"/>
+ <element xmi:type="uml:Collaboration" href="UMLRT-RTS.uml#_6kIb0IeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DJERUYeYEeSVyrlWP4nYew" x="295" y="12" width="126"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_EQ7RQIeYEeSVyrlWP4nYew" type="2004">
+ <children xmi:type="notation:DecorationNode" xmi:id="_EQ74UIeYEeSVyrlWP4nYew" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_EQ74UYeYEeSVyrlWP4nYew" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_EQ74UoeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_EQ74U4eYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_EQ74VIeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EQ74VYeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_EQ74VoeYEeSVyrlWP4nYew" type="7007">
+ <children xmi:type="notation:Shape" xmi:id="_iqB9sIeYEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_ip2XgIeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_iqB9sYeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_6EZ9cIeYEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_6ET20IeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6EZ9cYeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_9bBT8IeYEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_9a5YIIeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_9bBT8YeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_IxHpgIeZEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_IxBi4IeZEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_IxHpgYeZEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_UPysQIeZEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_UPtMsIeZEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_UPysQYeZEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_YXceIIeZEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_YXWXgIeZEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YXceIYeZEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_boGWkIeZEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_boBeEIeZEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_boGWkYeZEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_7VD3kIeZEeSVyrlWP4nYew" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_7U-YAIeZEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7VD3kYeZEeSVyrlWP4nYew"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_EQ74V4eYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_EQ74WIeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_EQ74WYeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EQ74WoeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_EQ74W4eYEeSVyrlWP4nYew" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_EQ74XIeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_EQ74XYeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_EQ74XoeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EQ74X4eYEeSVyrlWP4nYew"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_6kLfIIeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EQ7RQYeYEeSVyrlWP4nYew" x="139" y="131" width="134" height="187"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_EwzrMIeYEeSVyrlWP4nYew" type="2004">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Ew0SQIeYEeSVyrlWP4nYew" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ew0SQYeYEeSVyrlWP4nYew" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ew0SQoeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ew0SQ4eYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ew0SRIeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ew0SRYeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ew0SRoeYEeSVyrlWP4nYew" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ew0SR4eYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ew0SSIeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ew0SSYeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ew0SSoeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ew0SS4eYEeSVyrlWP4nYew" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ew0STIeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ew0STYeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ew0SToeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ew0ST4eYEeSVyrlWP4nYew"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_6kTa8IeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EwzrMYeYEeSVyrlWP4nYew" x="443" y="130" width="134" height="187"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Fzw9AIeYEeSVyrlWP4nYew" type="2004">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Fzw9AoeYEeSVyrlWP4nYew" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_FzxkEIeYEeSVyrlWP4nYew" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_FzxkEYeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_FzxkEoeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_FzxkE4eYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FzxkFIeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_FzxkFYeYEeSVyrlWP4nYew" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_FzxkFoeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_FzxkF4eYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_FzxkGIeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FzxkGYeYEeSVyrlWP4nYew"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_FzxkGoeYEeSVyrlWP4nYew" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_FzxkG4eYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_FzxkHIeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_FzxkHYeYEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FzxkHoeYEeSVyrlWP4nYew"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_6kZhkIeXEeSVyrlWP4nYew"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Fzw9AYeYEeSVyrlWP4nYew" x="291" y="131" width="134" height="187"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_-owJUOzYEeSRtqCWFwOf8g" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_-owwYOzYEeSRtqCWFwOf8g" type="5038"/>
+ <element xmi:type="uml:Comment" href="UMLRT-RTS.uml#_vhZuEOhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-owJUezYEeSRtqCWFwOf8g" x="139" y="342" width="438"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_ByDbEYeYEeSVyrlWP4nYew" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_ByDbEoeYEeSVyrlWP4nYew"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_ByDbE4eYEeSVyrlWP4nYew">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_yx-HEIeXEeSVyrlWP4nYew"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_yx-HEIeXEeSVyrlWP4nYew"/>
+ <edges xmi:type="notation:Connector" xmi:id="_ItTV8IeYEeSVyrlWP4nYew" type="4005" source="_DJERUIeYEeSVyrlWP4nYew" target="_EQ7RQIeYEeSVyrlWP4nYew">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ItT9AoeYEeSVyrlWP4nYew" type="6012">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ItUkEIeYEeSVyrlWP4nYew" x="-41" y="138"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ItUkEYeYEeSVyrlWP4nYew" type="6013">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ItUkEoeYEeSVyrlWP4nYew" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ItT9AIeYEeSVyrlWP4nYew"/>
+ <element xmi:type="uml:Realization" href="UMLRT-RTS.uml#_6kRlwIeXEeSVyrlWP4nYew"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ItT9AYeYEeSVyrlWP4nYew" points="[-3, 25, 22, -267]$[-21, 242, 4, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JdRaUIeYEeSVyrlWP4nYew" id="(0.0,0.6)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JdRaUYeYEeSVyrlWP4nYew" id="(0.664179104477612,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ItXnYIeYEeSVyrlWP4nYew" type="4005" source="_DJERUIeYEeSVyrlWP4nYew" target="_Fzw9AIeYEeSVyrlWP4nYew">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ItYOcIeYEeSVyrlWP4nYew" type="6012">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ItYOcYeYEeSVyrlWP4nYew" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ItYOcoeYEeSVyrlWP4nYew" type="6013">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ItYOc4eYEeSVyrlWP4nYew" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ItXnYYeYEeSVyrlWP4nYew"/>
+ <element xmi:type="uml:Realization" href="UMLRT-RTS.uml#_6kdL8IeXEeSVyrlWP4nYew"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ItXnYoeYEeSVyrlWP4nYew" points="[31, 25, -167, -133]$[135, 107, -63, -51]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LQLiYIeYEeSVyrlWP4nYew" id="(0.30158730158730157,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_K5cdYIeYEeSVyrlWP4nYew" id="(0.3208955223880597,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ItZckIeYEeSVyrlWP4nYew" type="4007" source="_DJERUIeYEeSVyrlWP4nYew" target="_EwzrMIeYEeSVyrlWP4nYew">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ItaDoIeYEeSVyrlWP4nYew" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ItaDoYeYEeSVyrlWP4nYew" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ItaDooeYEeSVyrlWP4nYew" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ItaDo4eYEeSVyrlWP4nYew" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ItZckYeYEeSVyrlWP4nYew"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#_6kXsYIeXEeSVyrlWP4nYew"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ItZckoeYEeSVyrlWP4nYew" points="[-26, 25, 125, -121]$[-100, 96, 51, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QXbTkIeZEeSVyrlWP4nYew" id="(1.0,0.6)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QXbTkYeZEeSVyrlWP4nYew" id="(0.23880597014925373,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ItbRwIeYEeSVyrlWP4nYew" type="4007" source="_DJERUIeYEeSVyrlWP4nYew" target="_Fzw9AIeYEeSVyrlWP4nYew">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Itb40IeYEeSVyrlWP4nYew" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Itb40YeYEeSVyrlWP4nYew" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Itb40oeYEeSVyrlWP4nYew" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Itb404eYEeSVyrlWP4nYew" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ItbRwYeYEeSVyrlWP4nYew"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#_6kdzAIeXEeSVyrlWP4nYew"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ItbRwoeYEeSVyrlWP4nYew" points="[31, 25, -167, -133]$[135, 107, -63, -51]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_QXVM8IeZEeSVyrlWP4nYew" id="(0.6190476190476191,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KFMV8IeYEeSVyrlWP4nYew" id="(0.664179104477612,0.0)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_U0_V0OhWEeSwfNwUI8sCsg" type="PapyrusUMLClassDiagram" name="cd | UMLRTTimerProtocol" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_VwYAAOhWEeSwfNwUI8sCsg" type="2097">
+ <children xmi:type="notation:DecorationNode" xmi:id="_VwYnEOhWEeSwfNwUI8sCsg" type="5157"/>
+ <element xmi:type="uml:Collaboration" href="UMLRT-RTS.uml#_MxQZgGXsEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VwYAAehWEeSwfNwUI8sCsg" x="377" y="30"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Wdp8wOhWEeSwfNwUI8sCsg" type="2004">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Wdp8wuhWEeSwfNwUI8sCsg" type="5011"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Wdp8w-hWEeSwfNwUI8sCsg" type="8507">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Wdqj0OhWEeSwfNwUI8sCsg" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Wdqj0ehWEeSwfNwUI8sCsg" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Wdqj0uhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Wdqj0-hWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Wdqj1OhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdqj1ehWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Wdqj1uhWEeSwfNwUI8sCsg" type="7007">
+ <children xmi:type="notation:Shape" xmi:id="_YVKQ8OhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_Yq5LYHDsEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YVKQ8ehWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_YVK4AOhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_0ZPFQHDtEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YVK4AehWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_YVLfEOhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_IZrUwHDuEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YVLfEehWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_YVLfEuhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_QdezIHDuEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YVLfE-hWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_YVMGIOhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_D4MRIHDvEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YVMGIehWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_YVMGIuhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_MyU6kHDvEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YVMGI-hWEeSwfNwUI8sCsg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Wdqj1-hWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Wdqj2OhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Wdqj2ehWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdqj2uhWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Wdqj2-hWEeSwfNwUI8sCsg" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Wdqj3OhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Wdqj3ehWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Wdqj3uhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdqj3-hWEeSwfNwUI8sCsg"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_RQ6bsGXsEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Wdp8wehWEeSwfNwUI8sCsg" x="195" y="168" height="139"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ZNni8OhWEeSwfNwUI8sCsg" type="2004">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ZNoKAOhWEeSwfNwUI8sCsg" type="5011"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ZNoKAehWEeSwfNwUI8sCsg" type="8507">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZNoKAuhWEeSwfNwUI8sCsg" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ZNoKA-hWEeSwfNwUI8sCsg" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ZNoKBOhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ZNoKBehWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ZNoKBuhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZNoKB-hWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ZNoKCOhWEeSwfNwUI8sCsg" type="7007">
+ <children xmi:type="notation:Shape" xmi:id="_bJBfsOhWEeSwfNwUI8sCsg" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_ovCvAHDtEeSwWKwNKw1iAA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_bJBfsehWEeSwfNwUI8sCsg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ZNoKCehWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ZNoKCuhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ZNoKC-hWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZNoKDOhWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ZNoxEOhWEeSwfNwUI8sCsg" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ZNoxEehWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ZNoxEuhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ZNoxE-hWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZNoxFOhWEeSwfNwUI8sCsg"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_Rx96UGXsEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZNni8ehWEeSwfNwUI8sCsg" x="571" y="168" width="137" height="139"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_bsLQEOhWEeSwfNwUI8sCsg" type="2004">
+ <children xmi:type="notation:DecorationNode" xmi:id="_bsL3IOhWEeSwfNwUI8sCsg" type="5011"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_bsL3IehWEeSwfNwUI8sCsg" type="8507">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_bsL3IuhWEeSwfNwUI8sCsg" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bsL3I-hWEeSwfNwUI8sCsg" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bsL3JOhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bsL3JehWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bsL3JuhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bsL3J-hWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bsL3KOhWEeSwfNwUI8sCsg" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bsL3KehWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bsL3KuhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bsL3K-hWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bsL3LOhWEeSwfNwUI8sCsg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_bsL3LehWEeSwfNwUI8sCsg" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_bsL3LuhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bsL3L-hWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bsL3MOhWEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bsL3MehWEeSwfNwUI8sCsg"/>
+ </children>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#_SH2DsGXsEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bsLQEehWEeSwfNwUI8sCsg" x="365" y="168" width="137" height="139"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_dXk5AOzXEeSRtqCWFwOf8g" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_dXnVQOzXEeSRtqCWFwOf8g" type="5038"/>
+ <element xmi:type="uml:Comment" href="UMLRT-RTS.uml#_WcmqUOhKEeSwfNwUI8sCsg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dXk5AezXEeSRtqCWFwOf8g" x="110" y="325" width="647" height="53"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_U0_V0ehWEeSwfNwUI8sCsg" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_U0_V0uhWEeSwfNwUI8sCsg"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_U0_V0-hWEeSwfNwUI8sCsg">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_BlAjgGXsEeS_4daqvwyFrg"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_BlAjgGXsEeS_4daqvwyFrg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_ey6-kOhWEeSwfNwUI8sCsg" type="4007" source="_VwYAAOhWEeSwfNwUI8sCsg" target="_bsLQEOhWEeSwfNwUI8sCsg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey7loOhWEeSwfNwUI8sCsg" visible="false" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey8MsOhWEeSwfNwUI8sCsg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey8MsehWEeSwfNwUI8sCsg" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey8MsuhWEeSwfNwUI8sCsg" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ey6-kehWEeSwfNwUI8sCsg"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#_fgW88GXsEeS_4daqvwyFrg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ey6-kuhWEeSwfNwUI8sCsg" points="[-58, 17, 222, -68]$[-216, 65, 64, -20]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FDoOIOzxEeS9Cvenl1DGlQ" id="(0.6923076923076923,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FDo1MOzxEeS9Cvenl1DGlQ" id="(0.6788321167883211,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ey8zwOhWEeSwfNwUI8sCsg" type="4005" source="_VwYAAOhWEeSwfNwUI8sCsg" target="_bsLQEOhWEeSwfNwUI8sCsg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey9a0OhWEeSwfNwUI8sCsg" type="6012">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey9a0ehWEeSwfNwUI8sCsg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey9a0uhWEeSwfNwUI8sCsg" type="6013">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey9a0-hWEeSwfNwUI8sCsg" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ey8zwehWEeSwfNwUI8sCsg"/>
+ <element xmi:type="uml:Realization" href="UMLRT-RTS.uml#_gzuCQGXsEeS_4daqvwyFrg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ey8zwuhWEeSwfNwUI8sCsg" points="[-58, 17, 222, -68]$[-216, 65, 64, -20]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m9hBcOhWEeSwfNwUI8sCsg" id="(0.28205128205128205,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m9TmEOhWEeSwfNwUI8sCsg" id="(0.3284671532846715,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ey-B4OhWEeSwfNwUI8sCsg" type="4005" source="_VwYAAOhWEeSwfNwUI8sCsg" target="_Wdp8wOhWEeSwfNwUI8sCsg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey-o8OhWEeSwfNwUI8sCsg" type="6012">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey-o8ehWEeSwfNwUI8sCsg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey-o8uhWEeSwfNwUI8sCsg" type="6013">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey-o8-hWEeSwfNwUI8sCsg" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ey-B4ehWEeSwfNwUI8sCsg"/>
+ <element xmi:type="uml:Realization" href="UMLRT-RTS.uml#_gYyZwGXsEeS_4daqvwyFrg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ey-B4uhWEeSwfNwUI8sCsg" points="[3, 25, -26, -234]$[19, 166, -10, -93]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JJTzcOzYEeSRtqCWFwOf8g" id="(0.0,0.96)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JJUagOzYEeSRtqCWFwOf8g" id="(0.6861313868613139,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_ey_3EOhWEeSwfNwUI8sCsg" type="4007" source="_VwYAAOhWEeSwfNwUI8sCsg" target="_ZNni8OhWEeSwfNwUI8sCsg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey_3E-hWEeSwfNwUI8sCsg" visible="false" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey_3FOhWEeSwfNwUI8sCsg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_ey_3FehWEeSwfNwUI8sCsg" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ey_3FuhWEeSwfNwUI8sCsg" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ey_3EehWEeSwfNwUI8sCsg"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#_fE5I8GXsEeS_4daqvwyFrg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ey_3EuhWEeSwfNwUI8sCsg" points="[59, 9, -200, -34]$[198, 33, -61, -10]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hRXW8OhWEeSwfNwUI8sCsg" id="(1.0,0.94)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_hRXW8ehWEeSwfNwUI8sCsg" id="(0.32116788321167883,0.0)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_g-_a8Om-EeSU_6ltpxdizg" type="PapyrusUMLClassDiagram" name="cd | time" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_kvClIOm-EeSU_6ltpxdizg" type="2008">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mGEpgOm-EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mGEpgem-EeSU_6ltpxdizg" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kvClIum-EeSU_6ltpxdizg" type="5029"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kvDMMOm-EeSU_6ltpxdizg" type="8510">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kvDMMem-EeSU_6ltpxdizg" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kvDMMum-EeSU_6ltpxdizg" type="7017">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mH6ckOm-EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mH6ckem-EeSU_6ltpxdizg" key="mutable" value="true"/>
+ </eAnnotations>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kvDMM-m-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kvDMNOm-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kvDMNem-EeSU_6ltpxdizg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvDMNum-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kvDMN-m-EeSU_6ltpxdizg" type="7018">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mH7qsOm-EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mH7qsem-EeSU_6ltpxdizg" key="mutable" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Shape" xmi:id="_mGKwIOm-EeSU_6ltpxdizg" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_BPkNkHDlEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mGKwIem-EeSU_6ltpxdizg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kvDMOOm-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kvDMOem-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kvDMOum-EeSU_6ltpxdizg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvDMO-m-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kvDMPOm-EeSU_6ltpxdizg" visible="false" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kvDMPem-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kvDMPum-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kvDMP-m-EeSU_6ltpxdizg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvDMQOm-EeSU_6ltpxdizg"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="_mGECcOm-EeSU_6ltpxdizg" canonical="false"/>
+ <element xmi:type="uml:Class" href="UMLRT-RTS.uml#_6qkTMGXmEeS_4daqvwyFrg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvClIem-EeSU_6ltpxdizg" x="41" y="37"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kvZxgOm-EeSU_6ltpxdizg" type="2008">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_nOEMUOm-EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_nOEMUem-EeSU_6ltpxdizg" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kvZxgum-EeSU_6ltpxdizg" type="5029"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kvZxg-m-EeSU_6ltpxdizg" type="8510">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kvZxhOm-EeSU_6ltpxdizg" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kvZxhem-EeSU_6ltpxdizg" type="7017">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_neNhIOm-EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_neNhIem-EeSU_6ltpxdizg" key="mutable" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Shape" xmi:id="_nOH2sOm-EeSU_6ltpxdizg" type="3012">
+ <element xmi:type="uml:Property" href="UMLRT-RTS.uml#_7Kv94G6TEeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOH2sem-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nOIdwOm-EeSU_6ltpxdizg" type="3012">
+ <element xmi:type="uml:Property" href="UMLRT-RTS.uml#_BV8U0G6UEeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOIdwem-EeSU_6ltpxdizg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kvZxhum-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kvZxh-m-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kvZxiOm-EeSU_6ltpxdizg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvZxiem-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kvZxium-EeSU_6ltpxdizg" type="7018">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_neOvQOm-EeSU_6ltpxdizg" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_neOvQem-EeSU_6ltpxdizg" key="mutable" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Shape" xmi:id="_nOS10Om-EeSU_6ltpxdizg" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_ew0bEHDcEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOS10em-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nOTc4Om-EeSU_6ltpxdizg" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_7C_QMHDcEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOTc4em-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nOVSEOm-EeSU_6ltpxdizg" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_iXxeMHDdEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOVSEem-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nOVSEum-EeSU_6ltpxdizg" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_6y_P4HDdEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOVSE-m-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_nOV5IOm-EeSU_6ltpxdizg" type="3013">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_QzjkEHDeEeS87_I7iwkr5g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOV5Iem-EeSU_6ltpxdizg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kvZxi-m-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kvZxjOm-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kvZxjem-EeSU_6ltpxdizg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvZxjum-EeSU_6ltpxdizg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kvZxj-m-EeSU_6ltpxdizg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kvZxkOm-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kvZxkem-EeSU_6ltpxdizg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kvZxkum-EeSU_6ltpxdizg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvZxk-m-EeSU_6ltpxdizg"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="_nODlQOm-EeSU_6ltpxdizg" canonical="false"/>
+ <element xmi:type="uml:Class" href="UMLRT-RTS.uml#_IWYV4G6NEeSyDdTKostG4Q"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kvZxgem-EeSU_6ltpxdizg" x="203" y="36"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_g_ACAOm-EeSU_6ltpxdizg" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_g_ACAem-EeSU_6ltpxdizg"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_g_ACAum-EeSU_6ltpxdizg">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#_9jdl4G6MEeSyDdTKostG4Q"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#_9jdl4G6MEeSyDdTKostG4Q"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_ARTz0OzfEeSRtqCWFwOf8g" type="PapyrusUMLClassDiagram" name="cd | UMLRTGlobalProtocol" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_Ic8_kOzfEeSRtqCWFwOf8g" type="2097">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Ic9moOzfEeSRtqCWFwOf8g" type="5157"/>
+ <element xmi:type="uml:Collaboration" href="UMLRT-RTS.uml#__4DbwOzdEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ic8_kezfEeSRtqCWFwOf8g" x="370" y="24" width="166"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LBpJ4OzfEeSRtqCWFwOf8g" type="2004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DpPuEOzhEeSRtqCWFwOf8g" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DpPuEezhEeSRtqCWFwOf8g" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_LBpw8ezfEeSRtqCWFwOf8g" type="5011"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_LBpw8uzfEeSRtqCWFwOf8g" type="8507">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LBpw8-zfEeSRtqCWFwOf8g" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LBpw9OzfEeSRtqCWFwOf8g" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LBpw9ezfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LBpw9uzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LBpw9-zfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LBpw-OzfEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LBpw-ezfEeSRtqCWFwOf8g" type="7007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_QOtEoOzfEeSRtqCWFwOf8g" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_QOtEoezfEeSRtqCWFwOf8g" key="visible" value="true"/>
+ </eAnnotations>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LBpw-uzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LBpw--zfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LBpw_OzfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LBpw_ezfEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LBqYAOzfEeSRtqCWFwOf8g" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LBqYAezfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LBqYAuzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LBqYA-zfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LBqYBOzfEeSRtqCWFwOf8g"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="_DpPHAOzhEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#__4SsUOzdEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LBpw8OzfEeSRtqCWFwOf8g" x="168" y="149" width="166" height="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_RD3yEOzfEeSRtqCWFwOf8g" type="2004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FUtKUOzhEeSRtqCWFwOf8g" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_FUtKUezhEeSRtqCWFwOf8g" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_RD4ZIOzfEeSRtqCWFwOf8g" type="5011"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_RD4ZIezfEeSRtqCWFwOf8g" type="8507">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_RD4ZIuzfEeSRtqCWFwOf8g" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_RD4ZI-zfEeSRtqCWFwOf8g" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_RD4ZJOzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_RD4ZJezfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_RD4ZJuzfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RD4ZJ-zfEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_RD4ZKOzfEeSRtqCWFwOf8g" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_RD4ZKezfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_RD4ZKuzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_RD4ZK-zfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RD4ZLOzfEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_RD4ZLezfEeSRtqCWFwOf8g" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_RD4ZLuzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_RD4ZL-zfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_RD4ZMOzfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RD4ZMezfEeSRtqCWFwOf8g"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="_FUsjQOzhEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#__4eSgOzdEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RD3yEezfEeSRtqCWFwOf8g" x="569" y="149" width="166"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Tdgi8OzfEeSRtqCWFwOf8g" type="2004">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EfOT0OzhEeSRtqCWFwOf8g" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EfOT0ezhEeSRtqCWFwOf8g" key="canonical" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_TdhKAOzfEeSRtqCWFwOf8g" type="5011"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_TdhKAezfEeSRtqCWFwOf8g" type="8507">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_TdhKAuzfEeSRtqCWFwOf8g" y="5"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TdhKA-zfEeSRtqCWFwOf8g" visible="false" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TdhKBOzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_TdhKBezfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_TdhKBuzfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TdhKB-zfEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TdhKCOzfEeSRtqCWFwOf8g" type="7007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_EhDf0OzhEeSRtqCWFwOf8g" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EhDf0ezhEeSRtqCWFwOf8g" key="mutable" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Shape" xmi:id="_EfW2sOzhEeSRtqCWFwOf8g" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_PQp9cOzeEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_EfW2sezhEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_EfXdwOzhEeSRtqCWFwOf8g" type="3007">
+ <element xmi:type="uml:Operation" href="UMLRT-RTS.uml#_R-rp8OzeEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_EfXdwezhEeSRtqCWFwOf8g"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TdhKCezfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_TdhKCuzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_TdhKC-zfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TdhKDOzfEeSRtqCWFwOf8g"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TdhKDezfEeSRtqCWFwOf8g" visible="false" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TdhKDuzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_TdhKD-zfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_TdhKEOzfEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TdhKEezfEeSRtqCWFwOf8g"/>
+ </children>
+ <styles xmi:type="notation:CanonicalStyle" xmi:id="_EfNswOzhEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:Interface" href="UMLRT-RTS.uml#__4nccOzdEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Tdgi8ezfEeSRtqCWFwOf8g" x="368" y="149" width="166" height="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_OSCHIOzgEeSRtqCWFwOf8g" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_OSCHIuzgEeSRtqCWFwOf8g" type="5038"/>
+ <element xmi:type="uml:Comment" href="UMLRT-RTS.uml#_NTKrIOzgEeSRtqCWFwOf8g"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OSCHIezgEeSRtqCWFwOf8g" x="168" y="272" width="567"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_ARTz0ezfEeSRtqCWFwOf8g" name="diagram_compatibility_version" stringValue="1.0.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_ARTz0uzfEeSRtqCWFwOf8g"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_ARTz0-zfEeSRtqCWFwOf8g">
+ <owner xmi:type="uml:Package" href="UMLRT-RTS.uml#__4L-oOzdEeSRtqCWFwOf8g"/>
+ </styles>
+ <element xmi:type="uml:Package" href="UMLRT-RTS.uml#__4L-oOzdEeSRtqCWFwOf8g"/>
+ <edges xmi:type="notation:Connector" xmi:id="_fR0egOzfEeSRtqCWFwOf8g" type="4007" source="_Ic8_kOzfEeSRtqCWFwOf8g" target="_Tdgi8OzfEeSRtqCWFwOf8g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR1FkOzfEeSRtqCWFwOf8g" visible="false" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR1FkezfEeSRtqCWFwOf8g" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR1soOzfEeSRtqCWFwOf8g" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR1soezfEeSRtqCWFwOf8g" x="2" y="25"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fR0egezfEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#__4v_UOzdEeSRtqCWFwOf8g"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fR0eguzfEeSRtqCWFwOf8g" points="[0, 25, 0, -125]$[0, 100, 0, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pLHe4OzfEeSRtqCWFwOf8g" id="(0.6690140845070423,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_pK3nQOzfEeSRtqCWFwOf8g" id="(0.6643835616438356,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_fR26wOzfEeSRtqCWFwOf8g" type="4003" source="_Ic8_kOzfEeSRtqCWFwOf8g" target="_Tdgi8OzfEeSRtqCWFwOf8g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR26w-zfEeSRtqCWFwOf8g" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR26xOzfEeSRtqCWFwOf8g" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR3h0OzfEeSRtqCWFwOf8g" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR3h0ezfEeSRtqCWFwOf8g" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fR26wezfEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:InterfaceRealization" href="UMLRT-RTS.uml#__4uKIOzdEeSRtqCWFwOf8g"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fR26wuzfEeSRtqCWFwOf8g" points="[0, 25, 0, -125]$[0, 100, 0, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n7jUcOzfEeSRtqCWFwOf8g" id="(0.323943661971831,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n7VSAOzfEeSRtqCWFwOf8g" id="(0.3287671232876712,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_fR4I4OzfEeSRtqCWFwOf8g" type="4007" source="_Ic8_kOzfEeSRtqCWFwOf8g" target="_RD3yEOzfEeSRtqCWFwOf8g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR4v8OzfEeSRtqCWFwOf8g" visible="false" type="6016">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR4v8ezfEeSRtqCWFwOf8g" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR4v8uzfEeSRtqCWFwOf8g" visible="false" type="6017">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR4v8-zfEeSRtqCWFwOf8g" x="5" y="-21"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fR4I4ezfEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:Usage" href="UMLRT-RTS.uml#__4lAMOzdEeSRtqCWFwOf8g"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fR4I4uzfEeSRtqCWFwOf8g" points="[33, 25, -168, -125]$[134, 100, -67, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mkbwgOzfEeSRtqCWFwOf8g" id="(1.0,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mkroIOzfEeSRtqCWFwOf8g" id="(0.2808219178082192,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_fR5XAOzfEeSRtqCWFwOf8g" type="4003" source="_Ic8_kOzfEeSRtqCWFwOf8g" target="_LBpJ4OzfEeSRtqCWFwOf8g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR5-EOzfEeSRtqCWFwOf8g" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR5-EezfEeSRtqCWFwOf8g" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fR5-EuzfEeSRtqCWFwOf8g" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fR5-E-zfEeSRtqCWFwOf8g" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fR5XAezfEeSRtqCWFwOf8g"/>
+ <element xmi:type="uml:InterfaceRealization" href="UMLRT-RTS.uml#__4aoIOzdEeSRtqCWFwOf8g"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fR5XAuzfEeSRtqCWFwOf8g" points="[-34, 25, 166, -125]$[-134, 100, 66, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lgoKIOzfEeSRtqCWFwOf8g" id="(0.0,0.96)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lg5P4OzfEeSRtqCWFwOf8g" id="(0.6506849315068494,0.0)"/>
+ </edges>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.uml b/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.uml
new file mode 100644
index 0000000..25fbc52
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/libraries/UMLRT-RTS.uml
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:C_Cpp="http://www.eclipse.org/papyrus/C_Cpp/1" xmlns:UMLRealTime="http://www.eclipse.org/papyrus/umlrt" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:standard="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML">
+ <uml:Model xmi:id="_mPjAgGXmEeS_4daqvwyFrg" name="RTS">
+ <packagedElement xmi:type="uml:Package" xmi:id="_2XUjEGXrEeS_4daqvwyFrg" name="Types">
+ <packagedElement xmi:type="uml:Package" xmi:id="_1rdkYGtWEeSCmtGQ-V4nzg" name="General">
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_9U77kOzZEeSRtqCWFwOf8g" name="MULTIPLE">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_Du2OgOzbEeSRtqCWFwOf8g">
+ <body><font size="3"><b>Note</b>: The "MULTIPLE" type defined here is used to represent a parameter that can have multiple
+ values. This used to represent runtime services protocol messages that have multiple signatures for the same operation name
+ so that only one operation is seen.</font></body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_G6gegHDiEeS87_I7iwkr5g" name="Communications">
+ <packagedElement xmi:type="uml:Class" xmi:id="_WkedAHDiEeS87_I7iwkr5g" name="UMLRTSignal"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_XwBDEHDiEeS87_I7iwkr5g" name="UMLRTMessage">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_jwk70HDrEeSwWKwNKw1iAA" name="srcPortIndex">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_pLzOYHDrEeSwWKwNKw1iAA" name="destPortIndex">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_vLQ2cHDrEeSwWKwNKw1iAA" name="destPort" type="_o-Ht0HDiEeS87_I7iwkr5g" aggregation="composite" association="_zE_o8Om8EeSU_6ltpxdizg"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_2x53sHDrEeSwWKwNKw1iAA" name="signal" type="_WkedAHDiEeS87_I7iwkr5g" aggregation="composite" association="_5MoVkOm8EeSU_6ltpxdizg"/>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_8hrFoHDlEeS87_I7iwkr5g" name="priority" type="_QFZTMG6REeSyDdTKostG4Q" aggregation="composite" association="_kdf0EOm8EeSU_6ltpxdizg">
+ <defaultValue xmi:type="uml:InstanceValue" xmi:id="_eTABAOhZEeSwfNwUI8sCsg" instance="_WFw6MG6REeSyDdTKostG4Q"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:DataType" xmi:id="_o-Ht0HDiEeS87_I7iwkr5g" name="UMLRTCommsPort"/>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_QFZTMG6REeSyDdTKostG4Q" name="Priorities">
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_Ru19QG6REeSyDdTKostG4Q" name="PRIORITY_BACKGROUND"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_USPHEG6REeSyDdTKostG4Q" name="PRIORITY_LOW"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_WFw6MG6REeSyDdTKostG4Q" name="PRIORITY_NORMAL"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_XnDt0G6REeSyDdTKostG4Q" name="PRIORITY_HIGH"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_ZYBVIG6REeSyDdTKostG4Q" name="PRIORITY_PANIC"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_cLTVEG6REeSyDdTKostG4Q" name="PRIORITY_SYSTEM"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_fQPswG6REeSyDdTKostG4Q" name="PRIORITY_SYNCHRONOUS"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_kdf0EOm8EeSU_6ltpxdizg" name="A_priority_uMLRTMessage" memberEnd="_8hrFoHDlEeS87_I7iwkr5g _kdi3YOm8EeSU_6ltpxdizg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_kdi3YOm8EeSU_6ltpxdizg" name="uMLRTMessage" type="_XwBDEHDiEeS87_I7iwkr5g" association="_kdf0EOm8EeSU_6ltpxdizg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kdkFgOm8EeSU_6ltpxdizg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kdkskOm8EeSU_6ltpxdizg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_zE_o8Om8EeSU_6ltpxdizg" name="A_destPort_uMLRTMessage" memberEnd="_vLQ2cHDrEeSwWKwNKw1iAA _zFCsQOm8EeSU_6ltpxdizg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_zFCsQOm8EeSU_6ltpxdizg" name="uMLRTMessage" type="_XwBDEHDiEeS87_I7iwkr5g" association="_zE_o8Om8EeSU_6ltpxdizg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_zFDTUOm8EeSU_6ltpxdizg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_zFD6YOm8EeSU_6ltpxdizg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_5MoVkOm8EeSU_6ltpxdizg" name="A_signal_uMLRTMessage" memberEnd="_2x53sHDrEeSwWKwNKw1iAA _5Mqx0Om8EeSU_6ltpxdizg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_5Mqx0Om8EeSU_6ltpxdizg" name="uMLRTMessage" type="_XwBDEHDiEeS87_I7iwkr5g" association="_5MoVkOm8EeSU_6ltpxdizg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5MrY4Om8EeSU_6ltpxdizg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5Mr_8Om8EeSU_6ltpxdizg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_wnrPkICNEeSeANT-DfY5oA" name="Capsules">
+ <packagedElement xmi:type="uml:DataType" xmi:id="_MLLA0ICOEeSeANT-DfY5oA" name="UMLRTCapsulePart"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_GfwZUICSEeSeANT-DfY5oA" name="UMLRTCapsuleId">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_X68AUICeEeSeANT-DfY5oA" name="isValid">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_X68AUYCeEeSeANT-DfY5oA" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_9jdl4G6MEeSyDdTKostG4Q" name="Time">
+ <packagedElement xmi:type="uml:Class" xmi:id="_6qkTMGXmEeS_4daqvwyFrg" name="UMLRTTimerId">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_BPkNkHDlEeS87_I7iwkr5g" name="isValid">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_EPGg0HDlEeS87_I7iwkr5g" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_IWYV4G6NEeSyDdTKostG4Q" name="UMLRTTimeSpec">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_7Kv94G6TEeSyDdTKostG4Q" name="tv_sec">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_BV8U0G6UEeSyDdTKostG4Q" name="tv_nsec">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_ew0bEHDcEeS87_I7iwkr5g" name="UMLRTTimespec">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_ew0bEXDcEeS87_I7iwkr5g" name="tm" type="_IWYV4G6NEeSyDdTKostG4Q"/>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_7C_QMHDcEeS87_I7iwkr5g" name="UMLRTTimespec">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_-_ErQHDcEeS87_I7iwkr5g" name="seconds">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Ciz3wHDdEeS87_I7iwkr5g" name="nanoseconds">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_iXxeMHDdEeS87_I7iwkr5g" name="getClock" isStatic="true">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_n04nIHDdEeS87_I7iwkr5g" name="tm" type="_IWYV4G6NEeSyDdTKostG4Q" direction="inout"/>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_vIleQHDdEeS87_I7iwkr5g" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_6y_P4HDdEeS87_I7iwkr5g" name="toString">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_Ch0j0HDeEeS87_I7iwkr5g" name="buf">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_G4IcwHDeEeS87_I7iwkr5g" name="size">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_LoRK8HDeEeS87_I7iwkr5g" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_QzjkEHDeEeS87_I7iwkr5g" name="toStringRelative">
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_QzjkEXDeEeS87_I7iwkr5g" name="buf">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_QzjkEnDeEeS87_I7iwkr5g" name="size">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer"/>
+ </ownedParameter>
+ <ownedParameter xmi:type="uml:Parameter" xmi:id="_QzjkE3DeEeS87_I7iwkr5g" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_6xr1kGXrEeS_4daqvwyFrg" name="Protocols">
+ <packagedElement xmi:type="uml:Package" xmi:id="_BlAjgGXsEeS_4daqvwyFrg" name="UMLRTTimerProtocol">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_WcmqUOhKEeSwfNwUI8sCsg" annotatedElement="_RQ6bsGXsEeS_4daqvwyFrg _Rx96UGXsEeS_4daqvwyFrg">
+ <body><font size="4"><b>Note: Operation signatures are not shown in the model because of currently limitations in the code
+ generator. Valid signatures as available in comments for each of the "protocol messages" (operations).</b></font></body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Collaboration" xmi:id="_MxQZgGXsEeS_4daqvwyFrg" name="UMLRTTimerProtocol"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_RQ6bsGXsEeS_4daqvwyFrg" name="UMLRTTimerProtocol">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_Yq5LYHDsEeSwWKwNKw1iAA" name="informAt">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_HFF_sOhIEeSwfNwUI8sCsg" annotatedElement="_Yq5LYHDsEeSwWKwNKw1iAA">
+ <body>Valid operations:
+ <div>
+ <ul>
+ <li>
+ + informAt( in clockTime: UMLRTTimeSpec, in priority: Priorities): UMLRTTimerId
+ </li>
+ <li>
+ + informAt( in clockTime: UMLRTTimeSpec, in userData: void, in type: UMLRTObject_class, in priority:
+ Priorities): UMLRTTimerId
+ </li>
+ <li>
+ + informAt( in clockTime: UMLRTTimeSpec, in typedValue: UMLRTTypedValue, in type: UMLRTObject_class, in
+ priority: Priorities): UMLRTTimerId
+ </li>
+ </ul>
+ </div></body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_0ZPFQHDtEeSwWKwNKw1iAA" name="informIn">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_QLBM8OhJEeSwfNwUI8sCsg">
+ <body>Valid operations:
+ <div>
+ &nbsp; &nbsp; + informIn( in relativeTime: UMLRTTimeSpec, in priority: Priorities): UMLRTTimerId
+ </div>
+ <div>
+ &nbsp; &nbsp; + informIn( in relativeTime: UMLRTTimeSpec, in userData: void, in type: UMLRTObject_class, in priority:
+ Priorities): UMLRTTimerId
+ </div>
+ <div>
+ &nbsp; &nbsp; + informIn( in relativeTime: UMLRTTimeSpec, in typedValue: UMLRTTypedValue, in type: UMLRTObject_class,
+ in priority: Priorities): UMLRTTimerId
+ </div></body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_IZrUwHDuEeSwWKwNKw1iAA" name="informEvery">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_-1oZAOhJEeSwfNwUI8sCsg">
+ <body>Valid operations:
+ <div>
+ &nbsp; &nbsp; + informEvery( in relativeTime: UMLRTTimeSpec, in priority: Priorities): UMLRTTimerId
+ </div>
+ <div>
+ &nbsp; &nbsp; + informEvery( in relativeTime: UMLRTTimeSpec, in userData: void, in type: UMLRTObject_class, in
+ priority: Priorities): UMLRTTimerId
+ </div>
+ <div>
+ &nbsp; &nbsp; + informEvery( in relativeTime: UMLRTTimeSpec, in typedValue: UMLRTTypedValue, in type:
+ UMLRTObject_class, in priority: Priorities): UMLRTTimerId
+ </div></body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_QdezIHDuEeSwWKwNKw1iAA" name="cancelTimer"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_D4MRIHDvEeSwWKwNKw1iAA" name="timeAdjustStart"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_MyU6kHDvEeSwWKwNKw1iAA" name="timeAdjustComplete"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_Rx96UGXsEeS_4daqvwyFrg" name="UMLRTTimerProtocol~">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_ovCvAHDtEeSwWKwNKw1iAA" name="timeout"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_SH2DsGXsEeS_4daqvwyFrg" name="UMLRTTimerProtocolIO"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="_fE5I8GXsEeS_4daqvwyFrg" client="_MxQZgGXsEeS_4daqvwyFrg" supplier="_Rx96UGXsEeS_4daqvwyFrg"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="_fgW88GXsEeS_4daqvwyFrg" client="_MxQZgGXsEeS_4daqvwyFrg" supplier="_SH2DsGXsEeS_4daqvwyFrg"/>
+ <packagedElement xmi:type="uml:Realization" xmi:id="_gYyZwGXsEeS_4daqvwyFrg" client="_MxQZgGXsEeS_4daqvwyFrg" supplier="_RQ6bsGXsEeS_4daqvwyFrg"/>
+ <packagedElement xmi:type="uml:Realization" xmi:id="_gzuCQGXsEeS_4daqvwyFrg" client="_MxQZgGXsEeS_4daqvwyFrg" supplier="_SH2DsGXsEeS_4daqvwyFrg"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_epw2MHDvEeSwWKwNKw1iAA" name="informAt" operation="_Yq5LYHDsEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_fug3wHDvEeSwWKwNKw1iAA" name="informEvery" operation="_IZrUwHDuEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_fw4PQHDvEeSwWKwNKw1iAA" name="cancelTimer" operation="_QdezIHDuEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_fzoBQHDvEeSwWKwNKw1iAA" name="timeAdjustStart" operation="_D4MRIHDvEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_f2S6wHDvEeSwWKwNKw1iAA" name="timeAdjustComplete" operation="_MyU6kHDvEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_f8ZiwHDvEeSwWKwNKw1iAA" name="informIn" operation="_0ZPFQHDtEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_IaEO8HDxEeSwWKwNKw1iAA" name="timeout" operation="_ovCvAHDtEeSwWKwNKw1iAA"/>
+ <packagedElement xmi:type="uml:AnyReceiveEvent" xmi:id="_Mjka8HDxEeSwWKwNKw1iAA" name="*"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_NUhyUGtVEeSCmtGQ-V4nzg" name="UMLRTFrameProtocol">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_ttT6QOhWEeSwfNwUI8sCsg" annotatedElement="_a74Y0GtVEeSCmtGQ-V4nzg">
+ <body><font size="4"><b>Note: Operation signatures are not shown in the model because of currently limitations in the code
+ generator. Valid signatures as available in comments for each of the "protocol messages" (operations).</b></font></body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Collaboration" xmi:id="_TWVjwGtVEeSCmtGQ-V4nzg" name="UMLRTFrameProtocol"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_a74Y0GtVEeSCmtGQ-V4nzg" name="UMLRTFrameProtocol">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_s-Wd0ICgEeSeANT-DfY5oA" name="incarnate">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_2IkWsOhTEeSwfNwUI8sCsg">
+ <body>Valid operaton signatures:
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in logThread: char, in index: int):
+ UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in controller: UMLRTController, in index:
+ int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in capsuleClass: UMLRTCapsuleClass, in
+ logThread: char, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in capsuleClass: UMLRTCapsuleClass, in
+ controller: UMLRTController, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in userData: void, in type:
+ UMLRTObject_class, in logThread: char, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in userData: void, in type:
+ UMLRTObject_class, in logThread: UMLRTController, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in capsuleClass: UMLRTCapsuleClass, in
+ userData: void, in type: UMLRTObject_class, in logThread: char, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in capsuleClass: UMLRTCapsuleClass, in
+ userData: void, in type: UMLRTObject_class, in controller: UMLRTController, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in value: UMLRTTypedValue, in logThread:
+ char, in index: int ): UMLRTCapsuleId + incarnate( in part: UMLRTCapsulePart, in value: UMLRTTypedValue, in controller:
+ UMLRTController, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in capsuleClass: UMLRTCapsuleClass, in
+ value: UMLRTTypedValue, in logThread: char, in index: int ): UMLRTCapsuleId</span>
+ </div>
+ <div>
+ <span style="font-size: 10pt;">&nbsp; + incarnate( in part: UMLRTCapsulePart, in capsuleClass: UMLRTCapsuleClass, in
+ value: UMLRTTypedValue, in controller: UMLRTController, in index: int ): UMLRTCapsuleId</span>
+ </div></body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_xx2MkIChEeSeANT-DfY5oA" name="incarnateAt"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_eI-mIL6HEeSGie7nK8XKTA" name="destroy">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_sg41UOhUEeSwfNwUI8sCsg">
+ <body>Valid signatures:
+ <div>
+ &nbsp; &nbsp;+ destroy( in id: UMLRTCapsuleId): bool
+ </div>
+ <div>
+ &nbsp; &nbsp;+ destroy( in part: UMLRTCapsulePart): bool
+ </div></body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_kLBLoL6IEeSGie7nK8XKTA" name="import" visibility="public">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_XYSOcOhVEeSwfNwUI8sCsg">
+ <body>Valid signatures:
+ <div>
+ + import( in id: UMLRTCapsuleId, in dest: UMLRTCapsulePart, in index: int): bool
+ </div>
+ <div>
+ + import( in part: UMLRTCapsulePart, in dest: UMLRTCapsulePart, in index: int): bool<br />
+ </div></body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_ifAgUL6JEeSGie7nK8XKTA" name="deport"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_bMdygGtVEeSCmtGQ-V4nzg" name="UMLRTFrameProtocol~"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_bgdFgGtVEeSCmtGQ-V4nzg" name="UMLRTFrameProtocolIO"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="_pVpTsGtVEeSCmtGQ-V4nzg" client="_TWVjwGtVEeSCmtGQ-V4nzg" supplier="_bMdygGtVEeSCmtGQ-V4nzg"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="_p0-7EGtVEeSCmtGQ-V4nzg" client="_TWVjwGtVEeSCmtGQ-V4nzg" supplier="_NUhyUGtVEeSCmtGQ-V4nzg"/>
+ <packagedElement xmi:type="uml:Realization" xmi:id="_qQwREGtVEeSCmtGQ-V4nzg" client="_TWVjwGtVEeSCmtGQ-V4nzg" supplier="_a74Y0GtVEeSCmtGQ-V4nzg"/>
+ <packagedElement xmi:type="uml:Realization" xmi:id="_q2MgcGtVEeSCmtGQ-V4nzg" client="_TWVjwGtVEeSCmtGQ-V4nzg" supplier="_bgdFgGtVEeSCmtGQ-V4nzg"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_A7OTAIeTEeSVyrlWP4nYew" name="incarnate" operation="_s-Wd0ICgEeSeANT-DfY5oA"/>
+ <packagedElement xmi:type="uml:AnyReceiveEvent" xmi:id="_CaNHkIeVEeSVyrlWP4nYew" name="*"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_KLbBIIeVEeSVyrlWP4nYew" name="incarnateAt" operation="_xx2MkIChEeSeANT-DfY5oA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_NpBlYL6IEeSGie7nK8XKTA" name="destroy" operation="_eI-mIL6HEeSGie7nK8XKTA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_mM0EQL6IEeSGie7nK8XKTA" name="import" operation="_kLBLoL6IEeSGie7nK8XKTA"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_lBmY4L6JEeSGie7nK8XKTA" name="deport" operation="_ifAgUL6JEeSGie7nK8XKTA"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_yx-HEIeXEeSVyrlWP4nYew" name="UMLRTLogProtocol">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_vhZuEOhWEeSwfNwUI8sCsg" annotatedElement="_6kLfIIeXEeSVyrlWP4nYew">
+ <body><font size="4"><b>Note: Operation signatures are not shown in the model because of currently limitations in the code
+ generator. Valid signatures as available in comments for each of the "protocol messages" (operations).</b></font></body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Collaboration" xmi:id="_6kIb0IeXEeSVyrlWP4nYew" name="UMLRTLogProtocol"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_6kLfIIeXEeSVyrlWP4nYew" name="UMLRTLogProtocol">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_ip2XgIeYEeSVyrlWP4nYew" name="log"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_6ET20IeYEeSVyrlWP4nYew" name="show"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_9a5YIIeYEeSVyrlWP4nYew" name="cr"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_IxBi4IeZEeSVyrlWP4nYew" name="crtab"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_UPtMsIeZEeSVyrlWP4nYew" name="space"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_YXWXgIeZEeSVyrlWP4nYew" name="tab"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_boBeEIeZEeSVyrlWP4nYew" name="commit"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_7U-YAIeZEeSVyrlWP4nYew" name="redirect"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Realization" xmi:id="_6kRlwIeXEeSVyrlWP4nYew" name="ProtocolRealizesIncomingInterface" client="_6kIb0IeXEeSVyrlWP4nYew" supplier="_6kLfIIeXEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_6kTa8IeXEeSVyrlWP4nYew" name="UMLRTLogProtocol~"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="_6kXsYIeXEeSVyrlWP4nYew" name="ProtocolUsesOutgoingInterface" client="_6kIb0IeXEeSVyrlWP4nYew" supplier="_6kTa8IeXEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_6kZhkIeXEeSVyrlWP4nYew" name="UMLRTLogProtocolIo"/>
+ <packagedElement xmi:type="uml:Realization" xmi:id="_6kdL8IeXEeSVyrlWP4nYew" name="ProtocolRealizesSymInterface" client="_6kIb0IeXEeSVyrlWP4nYew" supplier="_6kZhkIeXEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="_6kdzAIeXEeSVyrlWP4nYew" name="ProtocolUsesSymInterface" client="_6kIb0IeXEeSVyrlWP4nYew" supplier="_6kZhkIeXEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:AnyReceiveEvent" xmi:id="_6kfBIIeXEeSVyrlWP4nYew" name="*"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_ip8eIIeYEeSVyrlWP4nYew" name="show" operation="_6ET20IeYEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_9a70YIeYEeSVyrlWP4nYew" name="space" operation="_UPtMsIeZEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_YXZa0IeZEeSVyrlWP4nYew" name="commit" operation="_boBeEIeZEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_hDkgwIeZEeSVyrlWP4nYew" name="redirect" operation="_7U-YAIeZEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_pXUDIIeaEeSVyrlWP4nYew" name="log" operation="_ip2XgIeYEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_4WWOQIeaEeSVyrlWP4nYew" name="cr" operation="_9a5YIIeYEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_8oPhQIeaEeSVyrlWP4nYew" name="crtab" operation="_IxBi4IeZEeSVyrlWP4nYew"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_8qNQIIeaEeSVyrlWP4nYew" name="tab" operation="_YXWXgIeZEeSVyrlWP4nYew"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="__4L-oOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocol">
+ <packagedElement xmi:type="uml:Collaboration" xmi:id="__4DbwOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocol">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_NTKrIOzgEeSRtqCWFwOf8g">
+ <body><font size="3"><b>Note</b>: This protocol is meant to be inherited from by all communication protocols (Runtime Services
+ typically are <u>not</u> communications protocols). It provides a way for the RTS to send messages whenever a communication
+ port is bound (connected) or unbound (disconnected).<br />
+ Both message sets are defined as "in/out" so that they are available whether the port is conjugated or not.<br />
+ <b>These protocol messages <u>CANNOT</u> be sent by user code. Doing so will result in a runtime error!</b></font></body>
+ </ownedComment>
+ <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="__4aoIOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocol" client="__4DbwOzdEeSRtqCWFwOf8g" supplier="__4SsUOzdEeSRtqCWFwOf8g" contract="__4SsUOzdEeSRtqCWFwOf8g"/>
+ <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="__4uKIOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocolIO" client="__4DbwOzdEeSRtqCWFwOf8g" supplier="__4nccOzdEeSRtqCWFwOf8g" contract="__4nccOzdEeSRtqCWFwOf8g"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Interface" xmi:id="__4SsUOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocol"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="__4eSgOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocol~"/>
+ <packagedElement xmi:type="uml:Usage" xmi:id="__4lAMOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocol~" client="__4DbwOzdEeSRtqCWFwOf8g" supplier="__4eSgOzdEeSRtqCWFwOf8g"/>
+ <packagedElement xmi:type="uml:AnyReceiveEvent" xmi:id="__4mOUOzdEeSRtqCWFwOf8g" name="*"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="__4nccOzdEeSRtqCWFwOf8g" name="UMLRTBaseCommProtocolIO">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_PQp9cOzeEeSRtqCWFwOf8g" name="rtBound"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_R-rp8OzeEeSRtqCWFwOf8g" name="rtUnbound"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Usage" xmi:id="__4v_UOzdEeSRtqCWFwOf8g" name="Protocol1IO" client="__4L-oOzdEeSRtqCWFwOf8g" supplier="__4nccOzdEeSRtqCWFwOf8g"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_PQtAwOzeEeSRtqCWFwOf8g" name="rtBound" operation="_PQp9cOzeEeSRtqCWFwOf8g"/>
+ <packagedElement xmi:type="uml:CallEvent" xmi:id="_R-s4EOzeEeSRtqCWFwOf8g" name="rtUnbound" operation="_R-rp8OzeEeSRtqCWFwOf8g"/>
+ </packagedElement>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_FCVmAGXsEeS_4daqvwyFrg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FFkgMGXsEeS_4daqvwyFrg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/umlrt#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_RT_PROFILE/uml-rt.profile.uml#_1h74oEeVEeO0lv5O1DTHOQ"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_FFluUGXsEeS_4daqvwyFrg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FKs30GXsEeS_4daqvwyFrg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/umlrt/statemachine#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_RT_PROFILE/UMLRealTimeSM-addendum.profile.uml#_KLcn0FDtEeOA4ecmvfqvaw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_8AJ74G6TEeSyDdTKostG4Q">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_8FdSoG6TEeSyDdTKostG4Q" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://PAPYRUS_ACTIONLANGUAGE_PROFILE/ActionLanguage-Profile.profile.uml#_sYse0YZLEeKyw49uR6nx3g"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://PAPYRUS_ACTIONLANGUAGE_PROFILE/ActionLanguage-Profile.profile.uml#ActionLanguage"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_v1ykUOhDEeSwfNwUI8sCsg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_v18VUOhDEeSwfNwUI8sCsg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_PROFILES/Standard.profile.uml#_0"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_VATP0OnIEeSdLJKftsZBhw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VAYIUOnIEeSdLJKftsZBhw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/C_Cpp/1#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://PapyrusC_Cpp_PROFILES/C_Cpp.profile.uml#_j9REUByGEduN1bTiWJ0lyw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_VAbysOnIEeSdLJKftsZBhw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VAfdEOnIEeSdLJKftsZBhw" source="PapyrusVersion">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VAfdEenIEeSdLJKftsZBhw" key="Version" value="0.0.3"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VAfdEunIEeSdLJKftsZBhw" key="Comment" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VAfdE-nIEeSdLJKftsZBhw" key="Copyright" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VAfdFOnIEeSdLJKftsZBhw" key="Date" value="2015-03-19"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VAfdFenIEeSdLJKftsZBhw" key="Author" value=""/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VAbysenIEeSdLJKftsZBhw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://UMLRT_CPP/RTCppProperties.profile.uml#_WyvuoM4NEeSo_bwoIR2YQw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UMLRT_CPP/RTCppProperties.profile.uml#_vl5LALs8EeSTjNEQkASznQ"/>
+ </profileApplication>
+ </uml:Model>
+ <UMLRealTime:ProtocolContainer xmi:id="_HQDawGXsEeS_4daqvwyFrg" base_Package="_BlAjgGXsEeS_4daqvwyFrg"/>
+ <UMLRealTime:Protocol xmi:id="_PAVgMGXsEeS_4daqvwyFrg" base_Collaboration="_MxQZgGXsEeS_4daqvwyFrg"/>
+ <UMLRealTime:RTMessageSet xmi:id="_ztmSUGXsEeS_4daqvwyFrg" base_Interface="_RQ6bsGXsEeS_4daqvwyFrg"/>
+ <UMLRealTime:RTMessageSet xmi:id="_08ixsGXsEeS_4daqvwyFrg" base_Interface="_Rx96UGXsEeS_4daqvwyFrg" rtMsgKind="out"/>
+ <UMLRealTime:RTMessageSet xmi:id="_2mWoIGXsEeS_4daqvwyFrg" base_Interface="_SH2DsGXsEeS_4daqvwyFrg" rtMsgKind="inOut"/>
+ <UMLRealTime:ProtocolContainer xmi:id="_RuOWcGtVEeSCmtGQ-V4nzg" base_Package="_NUhyUGtVEeSCmtGQ-V4nzg"/>
+ <UMLRealTime:Protocol xmi:id="_Xld2oGtVEeSCmtGQ-V4nzg" base_Collaboration="_TWVjwGtVEeSCmtGQ-V4nzg"/>
+ <UMLRealTime:RTMessageSet xmi:id="_jPzW0GtVEeSCmtGQ-V4nzg" base_Interface="_a74Y0GtVEeSCmtGQ-V4nzg"/>
+ <UMLRealTime:RTMessageSet xmi:id="_kgBBgGtVEeSCmtGQ-V4nzg" base_Interface="_bMdygGtVEeSCmtGQ-V4nzg" rtMsgKind="out"/>
+ <UMLRealTime:RTMessageSet xmi:id="_mUJ4oGtVEeSCmtGQ-V4nzg" base_Interface="_bgdFgGtVEeSCmtGQ-V4nzg" rtMsgKind="inOut"/>
+ <UMLRealTime:ProtocolContainer xmi:id="_6jY08IeXEeSVyrlWP4nYew" base_Package="_yx-HEIeXEeSVyrlWP4nYew"/>
+ <UMLRealTime:Protocol xmi:id="_6kK4EIeXEeSVyrlWP4nYew" base_Collaboration="_6kIb0IeXEeSVyrlWP4nYew"/>
+ <UMLRealTime:RTMessageSet xmi:id="_6kPwkIeXEeSVyrlWP4nYew" base_Interface="_6kLfIIeXEeSVyrlWP4nYew"/>
+ <UMLRealTime:RTMessageSet xmi:id="_6kWeQIeXEeSVyrlWP4nYew" base_Interface="_6kTa8IeXEeSVyrlWP4nYew" rtMsgKind="out"/>
+ <UMLRealTime:RTMessageSet xmi:id="_6kbWwIeXEeSVyrlWP4nYew" base_Interface="_6kZhkIeXEeSVyrlWP4nYew" rtMsgKind="inOut"/>
+ <standard:ModelLibrary xmi:id="_5OcVwOhDEeSwfNwUI8sCsg" base_Package="_mPjAgGXmEeS_4daqvwyFrg"/>
+ <C_Cpp:NoCodeGen xmi:id="_XPOlgOnIEeSdLJKftsZBhw" base_element="_mPjAgGXmEeS_4daqvwyFrg"/>
+ <C_Cpp:NoCodeGen xmi:id="_AaeJIOzaEeSRtqCWFwOf8g" base_element="_9U77kOzZEeSRtqCWFwOf8g"/>
+ <UMLRealTime:ProtocolContainer xmi:id="__4QQEOzdEeSRtqCWFwOf8g" base_Package="__4L-oOzdEeSRtqCWFwOf8g"/>
+ <UMLRealTime:RTMessageSet xmi:id="__4W9wOzdEeSRtqCWFwOf8g" base_Interface="__4SsUOzdEeSRtqCWFwOf8g"/>
+ <UMLRealTime:RTMessageSet xmi:id="__4jLAOzdEeSRtqCWFwOf8g" base_Interface="__4eSgOzdEeSRtqCWFwOf8g" rtMsgKind="out"/>
+ <UMLRealTime:RTMessageSet xmi:id="__4rt4OzdEeSRtqCWFwOf8g" base_Interface="__4nccOzdEeSRtqCWFwOf8g" rtMsgKind="inOut"/>
+ <UMLRealTime:Protocol xmi:id="__4x0gOzdEeSRtqCWFwOf8g" base_Collaboration="__4DbwOzdEeSRtqCWFwOf8g"/>
+</xmi:XMI>
diff --git a/codegen/org.eclipse.papyrusrt.rts/plugin.xml b/codegen/org.eclipse.papyrusrt.rts/plugin.xml
new file mode 100644
index 0000000..f56e2dc
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+ <extension point="org.eclipse.emf.ecore.uri_mapping">
+ <mapping
+ source="pathmap://UMLRTRTSLIB/"
+ target="platform:/plugin/org.eclipse.papyrusrt.rts/libraries/"/>
+ </extension>
+
+ <extension point="org.eclipse.papyrus.uml.extensionpoints.UMLLibrary">
+ <library
+ description="UML-RT Runtime Services"
+ iconpath="icons/UMLRTRTS.png"
+ name="UML-RT Runtime Services"
+ path="pathmap://UMLRTRTSLIB/UMLRT-RTS.uml"
+ provider="Zeligsoft (2009) Limited"/>
+ </extension>
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.rts/pom.xml b/codegen/org.eclipse.papyrusrt.rts/pom.xml
new file mode 100644
index 0000000..c3d13ef
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.rts/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.rts</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>make</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target name="make">
+ <taskdef
+ resource="net/sf/antcontrib/antcontrib.properties"
+ classpathref="maven.plugin.classpath" />
+ <copy todir="${project.basedir}/umlrts">
+ <fileset dir="${project.basedir}/../../rts"/>
+ </copy>
+ <exec
+ executable="make"
+ dir="${project.basedir}/umlrts"
+ failonerror="true">
+ <!-- These need to be args rather then env-vars because the RTS makefile
+ does not respect values inherited from the environment. -->
+ <arg value="DEBUG=1"/>
+ <arg value="DEPEND=0"/>
+ <arg value="all"/>
+ </exec>
+ <delete file="${project.basedir}/umlrts/.cproject"/>
+ <delete file="${project.basedir}/umlrts/.project"/>
+ <delete dir="${project.basedir}/umlrts/build"/>
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.classpath b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.classpath
new file mode 100644
index 0000000..ad32c83
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.gitignore b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.project b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.project
new file mode 100644
index 0000000..633a480
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.xtumlrt.common.model</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c537b63
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..20c4a38
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrusrt.xtumlrt.common.model;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: org.eclipse.papyrusrt.xtumlrt.common,
+ org.eclipse.papyrusrt.xtumlrt.common.impl,
+ org.eclipse.papyrusrt.xtumlrt.common.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/about.html b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/about.properties b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/build.properties b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/build.properties
new file mode 100644
index 0000000..33c0a25
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore
new file mode 100644
index 0000000..1afd2d3
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="common" nsURI="http://www.eclipse.org/papyrusrt/xtumlrt/common"
+ nsPrefix="common">
+ <eClassifiers xsi:type="ecore:EClass" name="ActionChain" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="actions" upperBound="-1"
+ eType="#//ActionCode" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ActionCode" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="source" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Annotation" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+ eType="#//AnnotationParameter" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AnnotationParameter" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Attribute" eSuperTypes="#//MultiplicityElement #//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="#//VisibilityKind"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="default" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="static" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="false"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Capsule" eSuperTypes="#//Entity #//RedefinableElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
+ eType="#//CapsulePart" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="ports" upperBound="-1"
+ eType="#//Port" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="connectors" upperBound="-1"
+ eType="#//Connector" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="CapsuleKind">
+ <eLiterals name="FIXED" literal="FIXED"/>
+ <eLiterals name="OPTIONAL" value="1"/>
+ <eLiterals name="PLUGIN" value="2"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CapsulePart" eSuperTypes="#//RedefinableElement #//MultiplicityElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Capsule"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//CapsuleKind"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ChoicePoint" eSuperTypes="#//Pseudostate"/>
+ <eClassifiers xsi:type="ecore:EClass" name="CompositeState" eSuperTypes="#//State">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="initial" eType="#//InitialPoint"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="deepHistory" eType="#//DeepHistory"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="junctionPoints" upperBound="-1"
+ eType="#//JunctionPoint" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="choicePoints" upperBound="-1"
+ eType="#//ChoicePoint" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="substates" upperBound="-1"
+ eType="#//State" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="transitions" upperBound="-1"
+ eType="#//Transition" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="vertices" upperBound="-1"
+ eType="#//Vertex" derived="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Connector" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="ends" lowerBound="2" upperBound="2"
+ eType="#//ConnectorEnd" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConnectorEnd">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="role" lowerBound="1" eType="#//Port"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="partWithPort" eType="#//CapsulePart"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DeepHistory" eSuperTypes="#//Pseudostate"/>
+ <eClassifiers xsi:type="ecore:EEnum" name="DirectionKind">
+ <eLiterals name="IN"/>
+ <eLiterals name="OUT" value="1"/>
+ <eLiterals name="IN_OUT" value="2"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Entity" abstract="true" eSuperTypes="#//Type">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" upperBound="-1"
+ eType="#//Attribute" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="operations" upperBound="-1"
+ eType="#//Operation" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="behaviour" eType="#//StateMachine"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="EntryPoint" eSuperTypes="#//Pseudostate"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ExitPoint" eSuperTypes="#//Pseudostate"/>
+ <eClassifiers xsi:type="ecore:EClass" name="Guard" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" eType="#//ActionCode"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InitialPoint" eSuperTypes="#//Pseudostate"/>
+ <eClassifiers xsi:type="ecore:EClass" name="JunctionPoint" eSuperTypes="#//Pseudostate"/>
+ <eClassifiers xsi:type="ecore:EClass" name="Model" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="localScopeTemporaryTypes"
+ upperBound="-1" eType="#//Type" containment="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Validation: only non-Entity Types can be stored in this EReference"/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="rootPackages" upperBound="-1"
+ eType="#//Package" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="topEntities" upperBound="-1"
+ eType="#//Entity" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="topProtocols" upperBound="-1"
+ eType="#//Protocol" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MultiplicityElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="unique" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="ordered" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
+ eType="#//Annotation"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Operation" eSuperTypes="#//OperationSignature #//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="body" lowerBound="1" eType="#//ActionCode"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OperationSignature" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="returnType" lowerBound="1"
+ eType="#//Type"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+ eType="#//Parameter" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="#//VisibilityKind"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="static" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="false"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Package" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="protocols" upperBound="-1"
+ eType="#//Protocol" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="entities" upperBound="-1"
+ eType="#//Entity" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="typedefinitions" upperBound="-1"
+ eType="#//TypeDefinition" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="packages" upperBound="-1"
+ eType="#//Package" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Parameter" eSuperTypes="#//MultiplicityElement #//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="direction" eType="#//DirectionKind"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Port" eSuperTypes="#//RedefinableElement #//MultiplicityElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="conjugate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Protocol"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="visibility" eType="#//VisibilityKind"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PrimitiveType" eSuperTypes="#//Type #//NamedElement"/>
+ <eClassifiers xsi:type="ecore:EClass" name="Protocol" eSuperTypes="#//RedefinableElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="protocolBehaviourFeatures"
+ upperBound="-1" eType="#//ProtocolBehaviourFeature" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ProtocolBehaviourFeature" abstract="true"
+ eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//ProtocolBehaviourFeatureKind"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="ProtocolBehaviourFeatureKind">
+ <eLiterals name="IN"/>
+ <eLiterals name="OUT" value="1"/>
+ <eLiterals name="INOUT" value="2"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Pseudostate" eSuperTypes="#//Vertex"/>
+ <eClassifiers xsi:type="ecore:EClass" name="RedefinableElement" abstract="true"
+ eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="redefines" eType="#//RedefinableElement"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Signal" eSuperTypes="#//ProtocolBehaviourFeature">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
+ eType="#//Parameter" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="SimpleState" eSuperTypes="#//State"/>
+ <eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Vertex #//RedefinableElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="entryAction" eType="#//ActionCode"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="exitAction" eType="#//ActionCode"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="exitPoints" upperBound="-1"
+ eType="#//ExitPoint" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="entryPoints" upperBound="-1"
+ eType="#//EntryPoint" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StateMachine" eSuperTypes="#//RedefinableElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="top" lowerBound="1" eType="#//CompositeState"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StructMember" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="StructType" eSuperTypes="#//Type">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="structMembers" upperBound="-1"
+ eType="#//StructMember" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//RedefinableElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="sourceVertex" lowerBound="1"
+ eType="#//Vertex"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="targetVertex" lowerBound="1"
+ eType="#//Vertex"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="triggers" upperBound="-1"
+ eType="#//Trigger" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="guard" eType="#//Guard"
+ containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="actionChain" eType="#//ActionChain"
+ containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Trigger" eSuperTypes="#//NamedElement"/>
+ <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" interface="true"
+ eSuperTypes="#//NamedElement"/>
+ <eClassifiers xsi:type="ecore:EClass" name="TypeDefinition" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="TypeConstraint">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="TODO: requires further refinement to represent type constraints like interval (AGE: range:0..150)"/>
+ </eAnnotations>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Vertex" eSuperTypes="#//NamedElement">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="incomingTransitions" upperBound="-1"
+ eType="#//Transition" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="outgoingTransitions" upperBound="-1"
+ eType="#//Transition" derived="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="VisibilityKind">
+ <eLiterals name="PUBLIC"/>
+ <eLiterals name="PROTECTED" value="1"/>
+ <eLiterals name="PRIVATE" value="2"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.genmodel b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.genmodel
new file mode 100644
index 0000000..e215d09
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.genmodel
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2014-2015 Zeligsoft (2009) Limited, IncQueryLabs Limited and others.
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
"
+ modelDirectory="/org.eclipse.papyrusrt.xtumlrt.common.model/src" editDirectory="/org.eclipse.papyrusrt.xtumlrt.common.model.edit/src"
+ editorDirectory="/org.eclipse.papyrusrt.xtumlrt.common.model.editor/src" modelPluginID="org.eclipse.papyrusrt.xtumlrt.common.model"
+ modelName="Common" modelPluginClass="" editPluginClass="org.eclipse.papyrusrt.xtumlrt.common.provider.CommonEditPlugin"
+ editorPluginClass="org.eclipse.papyrusrt.xtumlrt.common.presentation.CommonEditorPlugin"
+ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" testSuiteClass="org.eclipse.papyrusrt.xtumlrt.common.tests.CommonAllTests"
+ importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" editPluginID="org.eclipse.papyrusrt.xtumlrt.common.model.edit"
+ editorPluginID="org.eclipse.papyrusrt.xtumlrt.common.model.editor" operationReflection="true"
+ importOrganizing="true">
+ <foreignModel>common.ecore</foreignModel>
+ <genPackages prefix="Common" basePackage="org.eclipse.papyrusrt.xtumlrt" disposableProviderFactory="true"
+ ecorePackage="common.ecore#/">
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="common.ecore#//CapsuleKind">
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//CapsuleKind/FIXED"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//CapsuleKind/OPTIONAL"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//CapsuleKind/PLUGIN"/>
+ </genEnums>
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="common.ecore#//DirectionKind">
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//DirectionKind/IN"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//DirectionKind/OUT"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//DirectionKind/IN_OUT"/>
+ </genEnums>
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="common.ecore#//ProtocolBehaviourFeatureKind">
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//ProtocolBehaviourFeatureKind/IN"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//ProtocolBehaviourFeatureKind/OUT"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//ProtocolBehaviourFeatureKind/INOUT"/>
+ </genEnums>
+ <genEnums typeSafeEnumCompatible="false" ecoreEnum="common.ecore#//VisibilityKind">
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//VisibilityKind/PUBLIC"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//VisibilityKind/PROTECTED"/>
+ <genEnumLiterals ecoreEnumLiteral="common.ecore#//VisibilityKind/PRIVATE"/>
+ </genEnums>
+ <genClasses ecoreClass="common.ecore#//ActionChain">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//ActionChain/actions"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//ActionCode">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//ActionCode/source"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Annotation">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Annotation/parameters"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//AnnotationParameter">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//AnnotationParameter/value"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Attribute">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Attribute/type"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Attribute/visibility"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Attribute/default"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Attribute/static"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Capsule">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Capsule/parts"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Capsule/ports"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Capsule/connectors"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//CapsulePart">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//CapsulePart/type"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//CapsulePart/kind"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//ChoicePoint"/>
+ <genClasses ecoreClass="common.ecore#//CompositeState">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/initial"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/deepHistory"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/junctionPoints"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/choicePoints"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/substates"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/transitions"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//CompositeState/vertices"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Connector">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Connector/ends"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//ConnectorEnd">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//ConnectorEnd/role"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//ConnectorEnd/partWithPort"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//DeepHistory"/>
+ <genClasses image="false" ecoreClass="common.ecore#//Entity">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Entity/attributes"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Entity/operations"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Entity/behaviour"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//EntryPoint"/>
+ <genClasses ecoreClass="common.ecore#//ExitPoint"/>
+ <genClasses ecoreClass="common.ecore#//Guard">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Guard/body"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//InitialPoint"/>
+ <genClasses ecoreClass="common.ecore#//JunctionPoint"/>
+ <genClasses ecoreClass="common.ecore#//Model">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Model/localScopeTemporaryTypes"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Model/rootPackages"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Model/topEntities"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Model/topProtocols"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//MultiplicityElement">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//MultiplicityElement/unique"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//MultiplicityElement/ordered"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//MultiplicityElement/lowerBound"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//MultiplicityElement/upperBound"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="common.ecore#//NamedElement">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//NamedElement/name"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//NamedElement/description"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//NamedElement/annotations"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Operation">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Operation/body"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="common.ecore#//OperationSignature">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//OperationSignature/returnType"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//OperationSignature/parameters"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//OperationSignature/visibility"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//OperationSignature/static"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Package">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Package/protocols"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Package/entities"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Package/typedefinitions"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Package/packages"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Parameter">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Parameter/type"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Parameter/direction"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Port">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Port/conjugate"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Port/type"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//Port/visibility"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//PrimitiveType"/>
+ <genClasses ecoreClass="common.ecore#//Protocol">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ </genClasses>
+ <genClasses image="false" ecoreClass="common.ecore#//ProtocolBehaviourFeature">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute common.ecore#//ProtocolBehaviourFeature/kind"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Pseudostate"/>
+ <genClasses image="false" ecoreClass="common.ecore#//RedefinableElement">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//RedefinableElement/redefines"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Signal">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Signal/parameters"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//SimpleState"/>
+ <genClasses ecoreClass="common.ecore#//State">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//State/entryAction"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//State/exitAction"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//State/exitPoints"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//State/entryPoints"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//StateMachine">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//StateMachine/top"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//StructMember">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//StructMember/type"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//StructType">
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//StructType/structMembers"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Transition">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Transition/sourceVertex"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Transition/targetVertex"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Transition/triggers"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Transition/guard"/>
+ <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference common.ecore#//Transition/actionChain"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//Trigger"/>
+ <genClasses image="false" ecoreClass="common.ecore#//Type"/>
+ <genClasses ecoreClass="common.ecore#//TypeDefinition">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//TypeDefinition/type"/>
+ </genClasses>
+ <genClasses ecoreClass="common.ecore#//TypeConstraint"/>
+ <genClasses ecoreClass="common.ecore#//Vertex">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Vertex/incomingTransitions"/>
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference common.ecore#//Vertex/outgoingTransitions"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/representations.aird b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/representations.aird
new file mode 100644
index 0000000..e386536
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/model/representations.aird
@@ -0,0 +1,9029 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_8PzooK3lEeSuH7f2GGufnw" selectedViews="_8dHr4K3lEeSuH7f2GGufnw _8fiGsK3lEeSuH7f2GGufnw _8fqCgK3lEeSuH7f2GGufnw _8hIpMK3lEeSuH7f2GGufnw" version="10.0.0.201412231738">
+ <models xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="structure.ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.transformation.model/model/transformationmodel.ecore#/"/>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_8dHr4K3lEeSuH7f2GGufnw" initialized="true">
+ <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="__ADisK3lEeSuH7f2GGufnw" name="xtUMLrt Common">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="__AEJwK3lEeSuH7f2GGufnw" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="__AEJwa3lEeSuH7f2GGufnw" type="Sirius" element="__ADisK3lEeSuH7f2GGufnw" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_McEpoK3rEeSuH7f2GGufnw" type="2003" element="_MZugQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McFQsK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McF3wK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McF3wa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McF3wq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McEpoa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McEpoq3rEeSuH7f2GGufnw" x="2502" y="-315"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McF3w63rEeSuH7f2GGufnw" type="2003" element="_MZvuYK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McGe0K3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McGe0a3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McGe0q3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McGe063rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McF3xK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McF3xa3rEeSuH7f2GGufnw" x="927" y="-315"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McHF4K3rEeSuH7f2GGufnw" type="2003" element="_MZwVda3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McHF463rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McHF5K3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_McmOE63rEeSuH7f2GGufnw" type="3010" element="_MazeUK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw8MNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McmOFK3rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_HVunQLxXEeSl6a8pTlra3w" type="3010" element="_HScpwLxXEeSl6a8pTlra3w">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw8cNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HVunQbxXEeSl6a8pTlra3w"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_GifmsL0LEeSl6a8pTlra3w" type="3010" element="_GfG7gL0LEeSl6a8pTlra3w">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw8sNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Gifmsb0LEeSl6a8pTlra3w"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McHF5a3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McHF5q3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McHF4a3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McHF4q3rEeSuH7f2GGufnw" x="486" y="306" width="129"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McHs8K3rEeSuH7f2GGufnw" type="2003" element="_MZw8ha3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McIUAK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McIUAa3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_Mcm1IK3rEeSuH7f2GGufnw" type="3010" element="_Ma92YK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw88NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcm1Ia3rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcm1Iq3rEeSuH7f2GGufnw" type="3010" element="_Ma-dcK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw9MNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcm1I63rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcm1JK3rEeSuH7f2GGufnw" type="3010" element="_Ma-dda3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw9cNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcm1Ja3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McIUAq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McIUA63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McHs8a3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McHs8q3rEeSuH7f2GGufnw" x="549" y="416"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McIUBK3rEeSuH7f2GGufnw" type="2003" element="_MZyKpa3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McI7EK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McI7Ea3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_Mcm1Jq3rEeSuH7f2GGufnw" type="3010" element="_Ma0scK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw9sNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcm1J63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McI7Eq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McI7E63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McIUBa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McIUBq3rEeSuH7f2GGufnw" x="1674" y="623"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McJiIK3rEeSuH7f2GGufnw" type="2003" element="_MZzYwK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McJiI63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McKJMK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McKJMa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McKJMq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McJiIa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McJiIq3rEeSuH7f2GGufnw" x="1224" y="-504"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McKJM63rEeSuH7f2GGufnw" type="2003" element="_MZz_0K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McKwQK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McKwQa3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_uvIIMLuWEeSl6a8pTlra3w" type="3010" element="_utcGILuWEeSl6a8pTlra3w">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw-MNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_uvIIMbuWEeSl6a8pTlra3w"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4GHCcLxWEeSl6a8pTlra3w" type="3010" element="_4CkmQLxWEeSl6a8pTlra3w">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw-cNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_4GHCcbxWEeSl6a8pTlra3w"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McKwQq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McKwQ63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McKJNK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McKJNa3rEeSuH7f2GGufnw" x="648" y="492"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McLXUK3rEeSuH7f2GGufnw" type="2003" element="_MZ0m4K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McLXU63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McL-YK3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_McncMq3rEeSuH7f2GGufnw" type="3010" element="_Ma16kK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw-sNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McncM63rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_REXDwNyYEeSavKYvIj4uEg" type="3010" element="_RBLM4NyYEeSavKYvIj4uEg">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_REXDwdyYEeSavKYvIj4uEg"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McL-Ya3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McL-Yq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McLXUa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McLXUq3rEeSuH7f2GGufnw" x="2043" y="432"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McL-Y63rEeSuH7f2GGufnw" type="2003" element="_MZ1N8K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McMlcK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McNMgK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McNMga3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McNMgq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McL-ZK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McL-Za3rEeSuH7f2GGufnw" x="1413" y="139"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McNMg63rEeSuH7f2GGufnw" type="2003" element="_MZ11Ba3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McNMhq3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McNzkK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McNzka3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McNzkq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McNMhK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McNMha3rEeSuH7f2GGufnw" x="2304" y="432"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McOaoK3rEeSuH7f2GGufnw" type="2003" element="_MZ3DIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McPowK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McQP0K3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McQP0a3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McQP0q3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McOaoa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McOaoq3rEeSuH7f2GGufnw" x="1539" y="432"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McQP063rEeSuH7f2GGufnw" type="2003" element="_MZ4RQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McQ24K3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McRd8K3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_McoDQq3rEeSuH7f2GGufnw" type="3010" element="_Ma2hpK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw_MNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McoDQ63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McRd8a3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McRd8q3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McQP1K3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McQP1a3rEeSuH7f2GGufnw" x="288" y="492"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McRd863rEeSuH7f2GGufnw" type="2003" element="_MZ5fYK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McSFAK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McSFAa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McSFAq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McSFA63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McRd9K3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McRd9a3rEeSuH7f2GGufnw" x="2601" y="807"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McSFBK3rEeSuH7f2GGufnw" type="2003" element="_MZ7UkK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McSsEK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McTTIK3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_McoqUK3rEeSuH7f2GGufnw" type="3010" element="_Ma_EgK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw_cNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McoqUa3rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McoqUq3rEeSuH7f2GGufnw" type="3010" element="_Ma_rkK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw_sNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McpRYK3rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McpRYa3rEeSuH7f2GGufnw" type="3010" element="_Ma_rla3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jw_8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McpRYq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McTTIa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McTTIq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McSFBa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McSFBq3rEeSuH7f2GGufnw" x="1587" y="709"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McTTI63rEeSuH7f2GGufnw" type="2003" element="_MZ77oK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McT6MK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McT6Ma3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McT6Mq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McT6M63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McTTJK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McTTJa3rEeSuH7f2GGufnw" x="1827" y="623"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McUhQK3rEeSuH7f2GGufnw" type="2003" element="_MZ8isK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McUhQ63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McVIUK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McVIUa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McVIUq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McUhQa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McUhQq3rEeSuH7f2GGufnw" x="2046" y="623"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McVIU63rEeSuH7f2GGufnw" type="2003" element="_MZ9JwK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McVvYK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McVvYa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McVvYq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McVvY63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McVIVK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McVIVa3rEeSuH7f2GGufnw" x="1908" y="-45"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McVvZK3rEeSuH7f2GGufnw" type="2003" element="_MZ9w0K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McWWcK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McWWca3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_REdxcNyYEeSavKYvIj4uEg" type="3010" element="_RBUW0NyYEeSavKYvIj4uEg">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_REdxcdyYEeSavKYvIj4uEg"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcp4cq3rEeSuH7f2GGufnw" type="3010" element="_Ma495K3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxAsNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcp4c63rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_REeYgNyYEeSavKYvIj4uEg" type="3010" element="_RBTIsNyYEeSavKYvIj4uEg">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_REeYgdyYEeSavKYvIj4uEg"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcp4dK3rEeSuH7f2GGufnw" type="3010" element="_Ma5k9K3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxA8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcp4da3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McWWcq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McWWc63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McVvZa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McVvZq3rEeSuH7f2GGufnw" x="405" y="126"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McWWdK3rEeSuH7f2GGufnw" type="2003" element="_MZ-X5a3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McW9gK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McW9ga3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_Mcp4dq3rEeSuH7f2GGufnw" type="3010" element="_MbASoK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxBMNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcp4d63rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcp4eK3rEeSuH7f2GGufnw" type="3010" element="_MbA5sK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxBcNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcp4ea3rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McqfgK3rEeSuH7f2GGufnw" type="3010" element="_MbA5ta3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxBsNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcqfga3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McW9gq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McW9g63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McWWda3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McWWdq3rEeSuH7f2GGufnw" x="387" y="603"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McXkkK3rEeSuH7f2GGufnw" type="2003" element="_MZ--8K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McXkk63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McXklK3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_Mcqfgq3rEeSuH7f2GGufnw" type="3010" element="_Ma6MAK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxB8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcqfg63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McXkla3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McXklq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McXkka3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McXkkq3rEeSuH7f2GGufnw" x="2565" y="431"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McYLoK3rEeSuH7f2GGufnw" type="2003" element="_MZ_mAK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McYLo63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McYysK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McYysa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McYysq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McYLoa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McYLoq3rEeSuH7f2GGufnw" x="765" y="657"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McYys63rEeSuH7f2GGufnw" type="2003" element="_MaA0IK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McZZwK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McZZwa3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_McqfhK3rEeSuH7f2GGufnw" type="3010" element="_MbBgwK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxCMNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcqfha3rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcqfhq3rEeSuH7f2GGufnw" type="3010" element="_MbBgxa3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxCcNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mcqfh63rEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McqfiK3rEeSuH7f2GGufnw" type="3010" element="_MbCH0K3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxCsNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McrGkK3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McZZwq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McZZw63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McYytK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McYyta3rEeSuH7f2GGufnw" x="2691" y="535"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McZZxK3rEeSuH7f2GGufnw" type="2003" element="_MaBbMK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McaA0K3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McaA0a3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McaA0q3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McaA063rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McZZxa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McZZxq3rEeSuH7f2GGufnw" x="3150" y="729"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcan4K3rEeSuH7f2GGufnw" type="2003" element="_MaCpUK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcan463rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mcan5K3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mcan5a3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mcan5q3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mcan4a3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcan4q3rEeSuH7f2GGufnw" x="3636" y="1017"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McbO8K3rEeSuH7f2GGufnw" type="2003" element="_MaDQZK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McbO863rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mcb2AK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mcb2Aa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mcb2Aq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McbO8a3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McbO8q3rEeSuH7f2GGufnw" x="3825" y="1017"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcb2A63rEeSuH7f2GGufnw" type="2003" element="_MaEegK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcb2Bq3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_MccdEK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MccdEa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MccdEq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mcb2BK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcb2Ba3rEeSuH7f2GGufnw" x="3744" y="846"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MccdE63rEeSuH7f2GGufnw" type="2003" element="_MaFFka3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McdEIK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McdEIa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McdEIq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McdEI63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_MccdFK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MccdFa3rEeSuH7f2GGufnw" x="4158" y="612"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McdEJK3rEeSuH7f2GGufnw" type="2003" element="_MaGTsK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McdrMK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McdrMa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McdrMq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McdrM63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McdEJa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McdEJq3rEeSuH7f2GGufnw" x="4446" y="846"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MceSQK3rEeSuH7f2GGufnw" type="2003" element="_MaHh0K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MceSQ63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mce5UK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mce5Ua3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mce5Uq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_MceSQa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MceSQq3rEeSuH7f2GGufnw" x="3924" y="612"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mce5U63rEeSuH7f2GGufnw" type="2003" element="_MaII4K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McfgYK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McfgYa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McfgYq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McfgY63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mce5VK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mce5Va3rEeSuH7f2GGufnw" x="3240" y="1224"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McfgZK3rEeSuH7f2GGufnw" type="2003" element="_MaJ-EK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McgHcK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McgHca3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McgHcq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McgHc63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McfgZa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McfgZq3rEeSuH7f2GGufnw" x="3375" y="1224"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McgugK3rEeSuH7f2GGufnw" type="2003" element="_MaLMMK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcgug63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_MchVkK3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MchVka3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MchVkq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mcguga3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcgugq3rEeSuH7f2GGufnw" x="3510" y="1224"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MchVk63rEeSuH7f2GGufnw" type="2003" element="_MaLzQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mch8oK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mch8oa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mch8oq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mch8o63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_MchVlK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MchVla3rEeSuH7f2GGufnw" x="4086" y="1008"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mch8pK3rEeSuH7f2GGufnw" type="2003" element="_MaNBYK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McijsK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mcijsa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mcijsq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mcijs63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mch8pa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mch8pq3rEeSuH7f2GGufnw" x="4266" y="1008"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McijtK3rEeSuH7f2GGufnw" type="2003" element="_MaNoda3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McjKwK3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McjKwa3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McjKwq3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McjKw63rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mcijta3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcijtq3rEeSuH7f2GGufnw" x="4446" y="1007"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McjKxK3rEeSuH7f2GGufnw" type="2003" element="_MaO2kK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcjx0K3rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mcjx0a3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mcjx0q3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mcjx063rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_McjKxa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McjKxq3rEeSuH7f2GGufnw" x="4626" y="1008"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MckY4K3rEeSuH7f2GGufnw" type="2003" element="_MaPdoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MckY463rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_MckY5K3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_MckY5a3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_MckY5q3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_MckY4a3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MckY4q3rEeSuH7f2GGufnw" x="4986" y="1008"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mck_8K3rEeSuH7f2GGufnw" type="2003" element="_MaQrwK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mck_863rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Mck_9K3rEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Mck_9a3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Mck_9q3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Mck_8a3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mck_8q3rEeSuH7f2GGufnw" x="4806" y="1006"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MclnAK3rEeSuH7f2GGufnw" type="2003" element="_MaRS0K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MclnA63rEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_McmOEK3rEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_McrGka3rEeSuH7f2GGufnw" type="3010" element="_Ma8BMK3rEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxC8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_McrGkq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_McmOEa3rEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_McmOEq3rEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_MclnAa3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MclnAq3rEeSuH7f2GGufnw" x="3015" y="1451"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_6FkZ4LhSEeSH9PQiHQ6eWw" type="2003" element="_6Eh4ELhSEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_6FkZ47hSEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_6FlA8LhSEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6FlA8bhSEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6FlA8rhSEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_6FkZ4bhSEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6FkZ4rhSEeSH9PQiHQ6eWw" x="1224" y="-324" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_7Xf70LhSEeSH9PQiHQ6eWw" type="2003" element="_7WtRoLhSEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_7Xgi4LhSEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_7Xgi4bhSEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7Xgi4rhSEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7Xgi47hSEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_7Xf70bhSEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Xf70rhSEeSH9PQiHQ6eWw" x="1080" y="-153" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYagALhTEeSH9PQiHQ6eWw" type="2003" element="_VXyN4LhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_VYbHELhTEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_VYbHEbhTEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_VYbHErhTEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_VYbHE7hTEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_VYagAbhTEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYagArhTEeSH9PQiHQ6eWw" x="1656" y="-504"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Q3wtYLhVEeSH9PQiHQ6eWw" type="2003" element="_Q3BGgLhVEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_Q3wtY7hVEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Q3wtZLhVEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Q3wtZbhVEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Q3wtZrhVEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Q3wtYbhVEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Q3wtYrhVEeSH9PQiHQ6eWw" x="2025" y="-738" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_3vJ8ELkWEeSYMdh17YlJbg" type="2003" element="_3r-sQLkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_3vbB0LkWEeSYMdh17YlJbg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_3vbo4LkWEeSYMdh17YlJbg" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_8NyDgLkWEeSYMdh17YlJbg" type="3010" element="_8MKS4LkWEeSYMdh17YlJbg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxDMNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_8NyDgbkWEeSYMdh17YlJbg"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CewSULkXEeSYMdh17YlJbg" type="3010" element="_Cdef8LkXEeSYMdh17YlJbg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxDcNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_CewSUbkXEeSYMdh17YlJbg"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_3vbo4bkWEeSYMdh17YlJbg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_3vbo4rkWEeSYMdh17YlJbg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_3vJ8EbkWEeSYMdh17YlJbg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3vJ8ErkWEeSYMdh17YlJbg" x="2322" y="-1071" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_APzxMMGsEeS6WJHyXZkBTg" type="2003" element="_ANdn0MGsEeS6WJHyXZkBTg">
+ <children xmi:type="notation:Node" xmi:id="_AP0_UMGsEeS6WJHyXZkBTg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_AP1mYMGsEeS6WJHyXZkBTg" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_AP1mYcGsEeS6WJHyXZkBTg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_AP1mYsGsEeS6WJHyXZkBTg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_APzxMcGsEeS6WJHyXZkBTg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_APzxMsGsEeS6WJHyXZkBTg" x="2583" y="-1071" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AP2NcMGsEeS6WJHyXZkBTg" type="2003" element="_ANhSMMGsEeS6WJHyXZkBTg">
+ <children xmi:type="notation:Node" xmi:id="_AP20gMGsEeS6WJHyXZkBTg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_AP3bkMGsEeS6WJHyXZkBTg" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_AP4psMGsEeS6WJHyXZkBTg" type="3010" element="_AOhXwMGsEeS6WJHyXZkBTg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxDsNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_AP4pscGsEeS6WJHyXZkBTg"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_AP3bkcGsEeS6WJHyXZkBTg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_AP3bksGsEeS6WJHyXZkBTg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_AP2NccGsEeS6WJHyXZkBTg" fontName="Segoe UI" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AP2NcsGsEeS6WJHyXZkBTg" x="2808" y="-1071" width="120" height="100"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="__AEJwq3lEeSuH7f2GGufnw"/>
+ <edges xmi:type="notation:Edge" xmi:id="_McsUsK3rEeSuH7f2GGufnw" type="4001" element="_MbFLIK3rEeSuH7f2GGufnw" source="_McEpoK3rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcs7wK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcs7wa3rEeSuH7f2GGufnw" x="13" y="-7"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcs7wq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcs7w63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcti0K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcti0a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_McsUsa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_McsUsq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_McsUs63rEeSuH7f2GGufnw" points="[-59, -12, -2, 3]$[-122, -12, -65, 3]$[-122, -104, -65, -89]$[-24, -104, 33, -89]$[-24, -49, 33, -34]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mcti0q3rEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McuJ4K3rEeSuH7f2GGufnw" id="(0.025,0.35)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_McuJ4a3rEeSuH7f2GGufnw" type="4001" element="_MbGZRq3rEeSuH7f2GGufnw" source="_McHF4K3rEeSuH7f2GGufnw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcuw8K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcuw8a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcuw8q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcuw863rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcuw9K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcuw9a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_McuJ4q3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_McuJ463rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_McuJ5K3rEeSuH7f2GGufnw" points="[27, 0, -699, 712]$[27, -760, -699, -48]$[725, -711, -1, 1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McvYAK3rEeSuH7f2GGufnw" id="(0.5617818130231238,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McvYAa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_McvYAq3rEeSuH7f2GGufnw" type="4001" element="_MbHnZq3rEeSuH7f2GGufnw" source="_McIUBK3rEeSuH7f2GGufnw" target="_McOaoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcv_EK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcv_Ea3rEeSuH7f2GGufnw" x="2" y="-38"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcv_Eq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcv_E63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mcv_FK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcv_Fa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_McvYA63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_McvYBK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_McvYBa3rEeSuH7f2GGufnw" points="[-62, -38, 76, 251]$[-139, -38, -1, 251]$[-139, -191, -1, 98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McwmIK3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McwmIa3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_McwmIq3rEeSuH7f2GGufnw" type="4001" element="_MbI1hq3rEeSuH7f2GGufnw" source="_McKJM63rEeSuH7f2GGufnw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_McxNMK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McxNMa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McxNMq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McxNM63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McxNNK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McxNNa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_McwmI63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_McwmJK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_McwmJa3rEeSuH7f2GGufnw" points="[-2, -49, -578, 898]$[-2, -973, -578, -26]$[575, -946, -1, 1]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mcx0QK3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mcx0Qa3rEeSuH7f2GGufnw" type="4001" element="_MbKDoK3rEeSuH7f2GGufnw" source="_McKJM63rEeSuH7f2GGufnw" target="_McQP063rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mcx0Ra3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mcx0Rq3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McybUK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McybUa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_McybUq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_McybU63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mcx0Qq3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mcx0Q63rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mcx0RK3rEeSuH7f2GGufnw" points="[-59, 48, 297, -50]$[-292, 48, 64, -50]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McybVK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_McybVa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MczCYK3rEeSuH7f2GGufnw" type="4001" element="_MbKqsK3rEeSuH7f2GGufnw" source="_McLXUK3rEeSuH7f2GGufnw" target="_McNMg63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MczCZK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MczCZa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MczCZq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MczCZ63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MczpcK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mczpca3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MczCYa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MczCYq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MczCY63rEeSuH7f2GGufnw" points="[62, 47, -196, -51]$[307, 47, 49, -51]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mczpcq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mczpc63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MczpdK3rEeSuH7f2GGufnw" type="4001" element="_MbLRxq3rEeSuH7f2GGufnw" source="_McL-Y63rEeSuH7f2GGufnw" target="_McHF4K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc0Qg63rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc0QhK3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc03kK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc03ka3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc03kq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc03k63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc0QgK3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc0Qga3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc0Qgq3rEeSuH7f2GGufnw" points="[-3, 0, 856, -224]$[-643, 0, 216, -224]$[-643, 173, 216, -51]$[-803, 173, 56, -51]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc03lK3rEeSuH7f2GGufnw" id="(0.03333333333333333,0.42)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc03la3rEeSuH7f2GGufnw" id="(0.5617818130231238,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc1eoK3rEeSuH7f2GGufnw" type="4001" element="_MbL43K3rEeSuH7f2GGufnw" source="_McL-Y63rEeSuH7f2GGufnw" target="_McYLoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc1epK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc1epa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc2FsK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc2Fsa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc2Fsq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc2Fs63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc1eoa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc1eoq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc1eo63rEeSuH7f2GGufnw" points="[-428, 76, 181, -451]$[-609, 76, 0, -451]$[-609, 518, 0, -9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc2FtK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc2Fta3rEeSuH7f2GGufnw" id="(0.8333333333333334,0.1)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc2Ftq3rEeSuH7f2GGufnw" type="4001" element="_MbNG8K3rEeSuH7f2GGufnw" source="_McL-Y63rEeSuH7f2GGufnw" target="_McZZxK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc2swK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc2swa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc2swq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc2sw63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc2sxK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc2sxa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc2Ft63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc2FuK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc2Fua3rEeSuH7f2GGufnw" points="[59, 58, -1650, -540]$[1710, 58, 1, -540]$[1710, 590, 1, -8]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc2sxq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc2sx63rEeSuH7f2GGufnw" id="(0.26666666666666666,0.09)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc3T0K3rEeSuH7f2GGufnw" type="4001" element="_MbNuAK3rEeSuH7f2GGufnw" source="_McNMg63rEeSuH7f2GGufnw" target="_McXkkK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc3T1K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc3T1a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc364K3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc364a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc364q3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc36463rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc3T0a3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc3T0q3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc3T063rEeSuH7f2GGufnw" points="[59, 53, -226, -44]$[175, 53, -110, -44]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc365K3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc365a3rEeSuH7f2GGufnw" id="(0.49689440993788814,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc5JAK3rEeSuH7f2GGufnw" type="4001" element="_MbOVF63rEeSuH7f2GGufnw" source="_McOaoK3rEeSuH7f2GGufnw" target="_McIUBK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc5wEK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc5wEa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc6XIK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc6XIa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc6XIq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc6XI63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc5JAa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc5JAq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc5JA63rEeSuH7f2GGufnw" points="[113, 81, -25, -208]$[137, 81, -1, -208]$[137, 191, -1, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc6-MK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc6-Ma3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc6-Mq3rEeSuH7f2GGufnw" type="4001" element="_MbO8LK3rEeSuH7f2GGufnw" source="_McOaoK3rEeSuH7f2GGufnw" target="_McLXUK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc7lQK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc7lQa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc7lQq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc7lQ63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc8MUK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc8MUa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc6-M63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc6-NK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc6-Na3rEeSuH7f2GGufnw" points="[113, 29, -394, -69]$[445, 29, -62, -69]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc8MUq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc8MU63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc8MVK3rEeSuH7f2GGufnw" type="4001" element="_MbPjPK3rEeSuH7f2GGufnw" source="_McOaoK3rEeSuH7f2GGufnw" target="_McTTI63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc8MWK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc8MWa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc8zYK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc8zYa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc8zYq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc8zY63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc8MVa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc8MVq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc8MV63rEeSuH7f2GGufnw" points="[59, 63, -229, -226]$[255, 63, -33, -226]$[255, 191, -33, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc8zZK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc8zZa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc9acK3rEeSuH7f2GGufnw" type="4001" element="_MbQKTK3rEeSuH7f2GGufnw" source="_McQP063rEeSuH7f2GGufnw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc9adK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc9ada3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc-BgK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc-Bga3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc-Bgq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc-Bg63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc9aca3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc9acq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc9ac63rEeSuH7f2GGufnw" points="[-1, -9, -933, 898]$[-1, -979, -933, -72]$[873, -979, -59, -72]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc-BhK3rEeSuH7f2GGufnw" id="(0.49612403100775193,0.1)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc-Bha3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc-okK3rEeSuH7f2GGufnw" type="4001" element="_MbQxXK3rEeSuH7f2GGufnw" source="_McRd863rEeSuH7f2GGufnw" target="_McQP063rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc-olK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc-ola3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc-olq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc-ol63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc_PoK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc_Poa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc-oka3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc-okq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc-ok63rEeSuH7f2GGufnw" points="[-86, 50, 2223, 267]$[-2312, 50, -3, 267]$[-2312, -217, -3, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc_Poq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mc_Po63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mc_2sK3rEeSuH7f2GGufnw" type="4001" element="_MbRYbK3rEeSuH7f2GGufnw" source="_McTTI63rEeSuH7f2GGufnw" target="_McUhQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mc_2tK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc_2ta3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mc_2tq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mc_2t63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdAdwK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdAdwa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mc_2sa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mc_2sq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mc_2s63rEeSuH7f2GGufnw" points="[59, 55, -160, -43]$[160, 55, -59, -43]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdAdwq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdAdw63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdBE0K3rEeSuH7f2GGufnw" type="4001" element="_MbSmgK3rEeSuH7f2GGufnw" source="_McUhQK3rEeSuH7f2GGufnw" target="_McLXUK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdBE1K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdBE1a3rEeSuH7f2GGufnw" x="2" y="30"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdBE1q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdBE163rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdBr4K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdBr4a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdBE0a3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdBE0q3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdBE063rEeSuH7f2GGufnw" points="[0, 0, 0, 93]$[0, -102, 0, -9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdBr4q3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdBr463rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdEIIK3rEeSuH7f2GGufnw" type="4001" element="_MbVCyq3rEeSuH7f2GGufnw" source="_McVIU63rEeSuH7f2GGufnw" target="_McNMg63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdEIJK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdEIJa3rEeSuH7f2GGufnw" x="-43" y="43"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdEIJq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdEIJ63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdEIKK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdEIKa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdEIIa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdEIIq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdEII63rEeSuH7f2GGufnw" points="[41, 50, -355, -525]$[364, 50, -32, -525]$[364, 477, -32, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdEvMK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdEvMa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdEvMq3rEeSuH7f2GGufnw" type="4001" element="_MbWQ4K3rEeSuH7f2GGufnw" source="_McYLoK3rEeSuH7f2GGufnw" target="_MclnAK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdFWQK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdFWQa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdFWQq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdFWQ63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdFWRK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdFWRa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdEvM63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdEvNK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdEvNa3rEeSuH7f2GGufnw" points="[1, 98, -2190, -745]$[1, 842, -2190, -1]$[2191, 842, 0, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdFWRq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdFWR63rEeSuH7f2GGufnw" id="(0.008333333333333333,0.51)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdF9UK3rEeSuH7f2GGufnw" type="4001" element="_MbW3963rEeSuH7f2GGufnw" source="_McZZxK3rEeSuH7f2GGufnw" target="_McbO8K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdF9VK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdF9Va3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdF9Vq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdF9V63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdGkYK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdGkYa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdF9Ua3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdF9Uq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdF9U63rEeSuH7f2GGufnw" points="[1, 376, -674, -10]$[1, 440, -674, 54]$[633, 440, -42, 54]$[633, 386, -42, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdGkYq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdGkY63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdGkZK3rEeSuH7f2GGufnw" type="4001" element="_MbYGEK3rEeSuH7f2GGufnw" source="_MccdE63rEeSuH7f2GGufnw" target="_MceSQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdHLcK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdHLca3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdHLcq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdHLc63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdHLdK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdHLda3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdGkZa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdGkZq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdGkZ63rEeSuH7f2GGufnw" points="[-59, 63, 175, -35]$[-175, 63, 59, -35]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdHygK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdHyga3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdHygq3rEeSuH7f2GGufnw" type="4001" element="_MbYtIK3rEeSuH7f2GGufnw" source="_MccdE63rEeSuH7f2GGufnw" target="_MceSQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdIZkK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdIZka3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdIZkq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdIZk63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdIZlK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdIZla3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdHyg63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdHyhK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdHyha3rEeSuH7f2GGufnw" points="[-59, 80, 175, -18]$[-175, 80, 59, -18]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdIZlq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdIZl63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdJAoK3rEeSuH7f2GGufnw" type="4001" element="_MbZUMK3rEeSuH7f2GGufnw" source="_Mcb2A63rEeSuH7f2GGufnw" target="_MclnAK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdJApK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdJApa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdJApq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdJAp63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdJnsK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdJnsa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdJAoa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdJAoq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdJAo63rEeSuH7f2GGufnw" points="[-21, -4, 670, -668]$[-688, -4, 3, -668]$[-688, 566, 3, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdJnsq3rEeSuH7f2GGufnw" id="(0.18333333333333332,0.4)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdJns63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdJntK3rEeSuH7f2GGufnw" type="4001" element="_MbZ7S63rEeSuH7f2GGufnw" source="_Mcb2A63rEeSuH7f2GGufnw" target="_MclnAK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdKOwK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdKOwa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdKOwq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdKOw63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdKOxK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdKOxa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdJnta3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdJntq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdJnt63rEeSuH7f2GGufnw" points="[-9, -2, 639, -535]$[-648, -2, 0, -535]$[-648, 528, 0, -5]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdKOxq3rEeSuH7f2GGufnw" id="(0.08333333333333333,0.79)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdKOx63rEeSuH7f2GGufnw" id="(0.7666666666666667,0.06)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdKOyK3rEeSuH7f2GGufnw" type="4001" element="_MbbJYK3rEeSuH7f2GGufnw" source="_Mcb2A63rEeSuH7f2GGufnw" target="_Mch8pK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdK10K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdK10a3rEeSuH7f2GGufnw" x="-221" y="-15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdK10q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdK1063rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdK11K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdK11a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdKOya3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdKOyq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdKOy63rEeSuH7f2GGufnw" points="[59, 47, -463, -213]$[480, 47, -42, -213]$[480, 162, -42, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdK11q3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdK1163rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdLc4K3rEeSuH7f2GGufnw" type="4001" element="_MbbwcK3rEeSuH7f2GGufnw" source="_Mcb2A63rEeSuH7f2GGufnw" target="_MchVk63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdLc5K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdLc5a3rEeSuH7f2GGufnw" x="-121" y="-12"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdLc5q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdLc563rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdLc6K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdLc6a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdLc4a3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdLc4q3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdLc463rEeSuH7f2GGufnw" points="[59, 71, -283, -189]$[310, 71, -32, -189]$[310, 162, -32, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdLc6q3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdLc663rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdMD8K3rEeSuH7f2GGufnw" type="4001" element="_MbcXh63rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_McijtK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdMD9K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdMD9a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdMD9q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdMD963rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdMD-K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdMD-a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdMD8a3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdMD8q3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdMD863rEeSuH7f2GGufnw" points="[30, 98, -591, 10]$[30, 161, -591, 73]$[621, 161, 0, 73]$[621, 88, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdMrAK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdMrAa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdMrAq3rEeSuH7f2GGufnw" type="4001" element="_MbdloK3rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_McjKxK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdMrBq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdMrB63rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdMrCK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdMrCa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdMrCq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdMrC63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdMrA63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdMrBK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdMrBa3rEeSuH7f2GGufnw" points="[13, 98, -788, 9]$[13, 179, -788, 90]$[801, 179, 0, 90]$[801, 89, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdMrDK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdMrDa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdNSEK3rEeSuH7f2GGufnw" type="4001" element="_MbeMtq3rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_MckY4K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdNSFK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdNSFa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdNSFq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdNSF63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdNSGK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdNSGa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdNSEa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdNSEq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdNSE63rEeSuH7f2GGufnw" points="[-24, 98, -1185, 9]$[-24, 215, -1185, 126]$[1161, 215, 0, 126]$[1161, 89, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdNSGq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdNSG63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdN5IK3rEeSuH7f2GGufnw" type="4001" element="_Mbfa0K3rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_Mck_8K3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdN5JK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdN5Ja3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdN5Jq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdN5J63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdN5KK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdN5Ka3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdN5Ia3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdN5Iq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdN5I63rEeSuH7f2GGufnw" points="[-7, 98, -987, 11]$[-7, 197, -987, 110]$[981, 197, 1, 110]$[981, 87, 1, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdOgMK3rEeSuH7f2GGufnw" id="(0.5166666666666667,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdOgMa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdOgMq3rEeSuH7f2GGufnw" type="4001" element="_Mbgo8K3rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_Mcb2A63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdOgNq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdOgN63rEeSuH7f2GGufnw" x="2" y="39"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdPHQK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdPHQa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdPHQq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdPHQ63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdOgM63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdOgNK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdOgNa3rEeSuH7f2GGufnw" points="[30, 0, 111, 73]$[30, -82, 111, -9]$[-22, -82, 59, -9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdPHRK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdPHRa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdPHRq3rEeSuH7f2GGufnw" type="4001" element="_MbhQDK3rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_MceSQK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdPuUK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdPuUa3rEeSuH7f2GGufnw" x="-67" y="42"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdPuUq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdPuU63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdPuVK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdPuVa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdPHR63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdPHSK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdPHSa3rEeSuH7f2GGufnw" points="[59, 37, -40, 344]$[111, 37, 12, 344]$[111, -287, 12, 20]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdQVYK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdQVYa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdQVYq3rEeSuH7f2GGufnw" type="4001" element="_MbieIK3rEeSuH7f2GGufnw" source="_MceSQK3rEeSuH7f2GGufnw" target="_MccdE63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdQVZq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdQVZ63rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdQVaK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdQ8cK3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdQ8ca3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdQ8cq3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdQVY63rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdQVZK3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdQVZa3rEeSuH7f2GGufnw" points="[59, -81, -175, 17]$[175, -81, -59, 17]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdQ8c63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdQ8dK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdQ8da3rEeSuH7f2GGufnw" type="4001" element="_MbjFOq3rEeSuH7f2GGufnw" source="_MceSQK3rEeSuH7f2GGufnw" target="_MccdE63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdRjgK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdRjga3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdRjgq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdRjg63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdRjhK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdRjha3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdQ8dq3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdQ8d63rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdQ8eK3rEeSuH7f2GGufnw" points="[59, -63, -175, 35]$[175, -63, -59, 35]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdRjhq3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdRjh63rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdRjiK3rEeSuH7f2GGufnw" type="4001" element="_MbkTUK3rEeSuH7f2GGufnw" source="_MceSQK3rEeSuH7f2GGufnw" target="_Mce5U63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdSKkK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdSKka3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdSKkq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdSKk63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdSKlK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdSKla3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdRjia3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdRjiq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdRji63rEeSuH7f2GGufnw" points="[-59, 17, 609, -595]$[-664, 17, 4, -595]$[-664, 612, 4, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdSKlq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdSKl63rEeSuH7f2GGufnw" id="(0.6416666666666667,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdSxoK3rEeSuH7f2GGufnw" type="4001" element="_MblhcK3rEeSuH7f2GGufnw" source="_MceSQK3rEeSuH7f2GGufnw" target="_McfgZK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdSxpK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdSxpa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdSxpq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdSxp63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdTYsK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdTYsa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdSxoa3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdSxoq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdSxo63rEeSuH7f2GGufnw" points="[0, -25, 490, -664]$[-468, -25, 22, -664]$[-468, 541, 22, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdTYsq3rEeSuH7f2GGufnw" id="(0.008333333333333333,0.7299999999999999)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdTYs63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdTYtK3rEeSuH7f2GGufnw" type="4001" element="_MbmvkK3rEeSuH7f2GGufnw" source="_MceSQK3rEeSuH7f2GGufnw" target="_McgugK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdT_wK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdT_wa3rEeSuH7f2GGufnw" x="-15" y="-39"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdT_wq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdT_w63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdT_xK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdT_xa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdTYta3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdTYtq3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdTYt63rEeSuH7f2GGufnw" points="[-29, -10, 358, -544]$[-363, -10, 24, -544]$[-363, 530, 24, -4]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdT_xq3rEeSuH7f2GGufnw" id="(0.25,0.84)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdUm0K3rEeSuH7f2GGufnw" id="(0.475,0.05)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdUm0a3rEeSuH7f2GGufnw" type="4001" element="_Mbn9sK3rEeSuH7f2GGufnw" source="_McfgZK3rEeSuH7f2GGufnw" target="_MclnAK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdUm1a3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdUm1q3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdVN4K3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdVN4a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdVN4q3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdVN463rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdUm0q3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdUm063rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdUm1K3rEeSuH7f2GGufnw" points="[7, 98, 367, -227]$[7, 252, 367, -73]$[-301, 252, 59, -73]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdVN5K3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdVN5a3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdV08K3rEeSuH7f2GGufnw" type="4001" element="_MbokzK3rEeSuH7f2GGufnw" source="_McgugK3rEeSuH7f2GGufnw" target="_MclnAK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdV09K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdV09a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdV09q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdV0963rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdV0-K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdV0-a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdV08a3rEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdV08q3rEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdV0863rEeSuH7f2GGufnw" points="[2, 98, 497, -227]$[2, 274, 497, -51]$[-436, 274, 59, -51]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdWcAK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdWcAa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdXqIK3rEeSuH7f2GGufnw" type="4001" element="_MbrBBq3rEeSuH7f2GGufnw" source="_McF3w63rEeSuH7f2GGufnw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdXqJK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdXqJa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdYRMK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdYRMa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdYRMq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdYRM63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdXqIa3rEeSuH7f2GGufnw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdXqIq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdXqI63rEeSuH7f2GGufnw" points="[3, 0, -294, 91]$[3, -55, -294, 36]$[295, -55, -2, 36]$[295, -91, -2, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdYRNK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdYRNa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdYRNq3rEeSuH7f2GGufnw" type="4001" element="_MbroFq3rEeSuH7f2GGufnw" source="_McHF4K3rEeSuH7f2GGufnw" target="_McVvZK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdY4QK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdY4Qa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdY4Qq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdY4Q63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdY4RK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdY4Ra3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdYRN63rEeSuH7f2GGufnw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdYROK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdYROa3rEeSuH7f2GGufnw" points="[-7, 0, 16, 127]$[-7, -36, 16, 91]$[-87, -36, -64, 91]$[-87, -82, -64, 45]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdZfUK3rEeSuH7f2GGufnw" id="(0.5617818130231238,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdZfUa3rEeSuH7f2GGufnw" id="(0.9836065573770492,0.55)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MddJtK3rEeSuH7f2GGufnw" type="4001" element="_MbuEUK3rEeSuH7f2GGufnw" source="_McNMg63rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MddJuK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MddJua3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MddwwK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mddwwa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mddwwq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mddww63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MddJta3rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MddJtq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MddJt63rEeSuH7f2GGufnw" points="[-1, 0, -298, 649]$[-1, -568, -298, 81]$[295, -568, -2, 81]$[295, -649, -2, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MddwxK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mddwxa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mddwxq3rEeSuH7f2GGufnw" type="4001" element="_MburZq3rEeSuH7f2GGufnw" source="_McOaoK3rEeSuH7f2GGufnw" target="_McL-Y63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdeX0K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdeX0a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdeX0q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdeX063rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdeX1K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdeX1a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mddwx63rEeSuH7f2GGufnw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MddwyK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mddwya3rEeSuH7f2GGufnw" points="[25, -7, 94, 195]$[25, -85, 94, 117]$[-69, -85, 0, 117]$[-69, -202, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdeX1q3rEeSuH7f2GGufnw" id="(0.025,0.08)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdeX163rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mde-6K3rEeSuH7f2GGufnw" type="4001" element="_MbxHoK3rEeSuH7f2GGufnw" source="_McQP063rEeSuH7f2GGufnw" target="_McVvZK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdfl8K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdfl8a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdfl8q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdfl863rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdfl9K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdfl9a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mde-6a3rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mde-6q3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mde-663rEeSuH7f2GGufnw" points="[0, 0, -98, 269]$[0, -222, -98, 47]$[91, -222, -7, 47]$[91, -268, -7, 1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mdfl9q3rEeSuH7f2GGufnw" id="(0.6821705426356589,0.01)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mdfl963rEeSuH7f2GGufnw" id="(0.5491803278688525,0.99)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mdg0EK3rEeSuH7f2GGufnw" type="4001" element="_Mby80K3rEeSuH7f2GGufnw" source="_McRd863rEeSuH7f2GGufnw" target="_McXkkK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdg0FK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdg0Fa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdg0Fq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdg0F63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdhbIK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdhbIa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mdg0Ea3rEeSuH7f2GGufnw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mdg0Eq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mdg0E63rEeSuH7f2GGufnw" points="[3, -45, 15, 233]$[3, -278, 15, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdhbIq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdhbI63rEeSuH7f2GGufnw" id="(0.49689440993788814,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdipQK3rEeSuH7f2GGufnw" type="4001" element="_Mb0yAK3rEeSuH7f2GGufnw" source="_McYLoK3rEeSuH7f2GGufnw" target="_McKJM63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdipRK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdipRa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdipRq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdipR63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdjQUK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdjQUa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdipQa3rEeSuH7f2GGufnw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdipQq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdipQ63rEeSuH7f2GGufnw" points="[-24, 0, 80, 67]$[-24, -27, 80, 40]$[-111, -27, -7, 40]$[-111, -67, -7, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdjQUq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdjQU63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdjQVK3rEeSuH7f2GGufnw" type="4001" element="_Mb1ZFq3rEeSuH7f2GGufnw" source="_Mcan4K3rEeSuH7f2GGufnw" target="_Mcb2A63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdj3YK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdj3Ya3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdj3Yq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdj3Y63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdj3ZK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdj3Za3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdjQVa3rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdjQVq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdjQV63rEeSuH7f2GGufnw" points="[0, 0, -108, 73]$[0, -36, -108, 37]$[107, -36, -1, 37]$[107, -73, -1, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdkecK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mdkeca3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mdkecq3rEeSuH7f2GGufnw" type="4001" element="_Mb2AJq3rEeSuH7f2GGufnw" source="_McbO8K3rEeSuH7f2GGufnw" target="_Mcb2A63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdkedq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdked63rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdlFgK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdlFga3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdlFgq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdlFg63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mdkec63rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdkedK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mdkeda3rEeSuH7f2GGufnw" points="[0, 0, 558, 91]$[0, -81, 558, 10]$[-500, -81, 58, 10]$[-500, -91, 58, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdlFhK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdlFha3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdlskK3rEeSuH7f2GGufnw" type="4001" element="_Mb3OQK3rEeSuH7f2GGufnw" source="_Mcb2A63rEeSuH7f2GGufnw" target="_MccdE63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdlslK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdlsla3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdlslq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdlsl63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdlsmK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdlsma3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mdlska3rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mdlskq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mdlsk63rEeSuH7f2GGufnw" points="[0, -4, -398, 136]$[0, -67, -398, 73]$[397, -67, -1, 73]$[397, -140, -1, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdmToK3rEeSuH7f2GGufnw" id="(0.6416666666666667,0.05)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdmToa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdmToq3rEeSuH7f2GGufnw" type="4001" element="_Mb31UK3rEeSuH7f2GGufnw" source="_McdEJK3rEeSuH7f2GGufnw" target="_MccdE63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdmTpq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdmTp63rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdmTqK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdmTqa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdm6sK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdm6sa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdmTo63rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdmTpK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdmTpa3rEeSuH7f2GGufnw" points="[-1, -98, 287, 234]$[-1, -161, 287, 171]$[-289, -161, -1, 171]$[-289, -234, -1, 98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mdm6sq3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mdm6s63rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mdm6tK3rEeSuH7f2GGufnw" type="4001" element="_Mb4cZq3rEeSuH7f2GGufnw" source="_MchVk63rEeSuH7f2GGufnw" target="_McdEJK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdm6uK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdm6ua3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdnhwK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdnhwa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdnhwq3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdnhw63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mdm6ta3rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Mdm6tq3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mdm6t63rEeSuH7f2GGufnw" points="[0, 0, -360, 60]$[360, -60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdnhxK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Mdnhxa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Mdnhxq3rEeSuH7f2GGufnw" type="4001" element="_Mb5Ddq3rEeSuH7f2GGufnw" source="_Mch8pK3rEeSuH7f2GGufnw" target="_McdEJK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdnhyq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdnhy63rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdoI0K3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdoI0a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdoI0q3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdoI063rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Mdnhx63rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdnhyK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Mdnhya3rEeSuH7f2GGufnw" points="[0, 0, -180, 60]$[180, -60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdoI1K3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdoI1a3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdoI1q3rEeSuH7f2GGufnw" type="4001" element="_Mb5qhq3rEeSuH7f2GGufnw" source="_McijtK3rEeSuH7f2GGufnw" target="_McdEJK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdov4K3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdov4a3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdov4q3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdov463rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdov5K3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdov5a3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdoI163rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdoI2K3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdoI2a3rEeSuH7f2GGufnw" points="[0, 0, 540, 60]$[-540, -60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdpW8K3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdpW8a3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdpW8q3rEeSuH7f2GGufnw" type="4001" element="_Mb64oK3rEeSuH7f2GGufnw" source="_McjKxK3rEeSuH7f2GGufnw" target="_McdEJK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Mdp-AK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdp-Aa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdp-Aq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdp-A63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Mdp-BK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Mdp-Ba3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdpW863rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdpW9K3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdpW9a3rEeSuH7f2GGufnw" points="[0, 0, 180, 60]$[-180, -60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdqlEK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdqlEa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdqlEq3rEeSuH7f2GGufnw" type="4001" element="_Mb7fsK3rEeSuH7f2GGufnw" source="_MckY4K3rEeSuH7f2GGufnw" target="_McdEJK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdrMIK3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdrMIa3rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdrMIq3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdrMI63rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdrMJK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdrMJa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdqlE63rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdqlFK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdqlFa3rEeSuH7f2GGufnw" points="[0, 0, 360, 60]$[-360, -60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdrzMK3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdrzMa3rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_MdrzMq3rEeSuH7f2GGufnw" type="4001" element="_Mb8GwK3rEeSuH7f2GGufnw" source="_Mck_8K3rEeSuH7f2GGufnw" target="_McdEJK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_MdrzNq3rEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdrzN63rEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdrzOK3rEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdrzOa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_MdsaQK3rEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MdsaQa3rEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_MdrzM63rEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MdrzNK3rEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MdrzNa3rEeSuH7f2GGufnw" points="[0, 0, 0, 60]$[0, -60, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdsaQq3rEeSuH7f2GGufnw" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MdsaQ63rEeSuH7f2GGufnw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_CGkrELCAEeS2zc2JFFVtPw" type="4001" element="_CElHALCAEeS2zc2JFFVtPw" source="_McL-Y63rEeSuH7f2GGufnw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_CG6CQLCAEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CG6CQbCAEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CG7QYLCAEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CG7QYbCAEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CG8egLCAEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CG8egbCAEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_CGkrEbCAEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_CGkrErCAEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_CGkrE7CAEeS2zc2JFFVtPw" points="[0, 0, 174, 594]$[0, -509, 174, 85]$[-176, -509, -2, 85]$[-176, -545, -2, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CG8egrCAEeS2zc2JFFVtPw" id="(0.37815126050420167,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CG8eg7CAEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_H1UhILCBEeS2zc2JFFVtPw" type="4001" element="_HzYAYLCBEeS2zc2JFFVtPw" source="_McVIU63rEeSuH7f2GGufnw" target="_McL-Y63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_H1UhJLCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_H1UhJbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_H1VIMLCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_H1VIMbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_H1VIMrCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_H1VIM7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_H1UhIbCBEeS2zc2JFFVtPw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_H1UhIrCBEeS2zc2JFFVtPw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_H1UhI7CBEeS2zc2JFFVtPw" points="[-18, 0, 386, -174]$[-404, 0, 0, -174]$[-404, 140, 0, -34]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_H1VINLCBEeS2zc2JFFVtPw" id="(0.0,0.45)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_H1VINbCBEeS2zc2JFFVtPw" id="(0.775,0.35)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_YthNULCBEeS2zc2JFFVtPw" type="4001" element="_Yr4OkLCBEeS2zc2JFFVtPw" source="_McOaoK3rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_YthNVLCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YthNVbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Yth0YLCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Yth0YbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Yth0YrCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Yth0Y7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_YthNUbCBEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_YthNUrCBEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YthNU7CBEeS2zc2JFFVtPw" points="[-1, -23, -1061, 656]$[-1, -591, -1061, 88]$[1061, -591, 1, 88]$[1061, -672, 1, 7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Yth0ZLCBEeS2zc2JFFVtPw" id="(0.49166666666666664,0.24)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Yth0ZbCBEeS2zc2JFFVtPw" id="(0.475,0.93)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_lIKJELCBEeS2zc2JFFVtPw" type="4001" element="_lGeuELCBEeS2zc2JFFVtPw" source="_McIUBK3rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_lIKJFLCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lIKJFbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_lIKwILCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lIKwIbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_lILXMLCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lILXMbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_lIKJEbCBEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lIKJErCBEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lIKJE7CBEeS2zc2JFFVtPw" points="[0, 0, -1726, 1676]$[1726, -1676, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lILXMrCBEeS2zc2JFFVtPw" id="(0.7983870967741935,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lILXM7CBEeS2zc2JFFVtPw" id="(0.025,0.35)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_mEgckLCBEeS2zc2JFFVtPw" type="4001" element="_mC1ooLCBEeS2zc2JFFVtPw" source="_McLXUK3rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_mEgclLCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mEgclbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_mEhDoLCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mEhDobCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_mEhDorCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mEhDo7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_mEgckbCBEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_mEgckrCBEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mEgck7CBEeS2zc2JFFVtPw" points="[0, 0, -527, 667]$[0, -567, -527, 100]$[528, -567, 1, 100]$[528, -649, 1, 18]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mEhDpLCBEeS2zc2JFFVtPw" id="(0.7142857142857143,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_mEhDpbCBEeS2zc2JFFVtPw" id="(0.48333333333333334,0.82)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_n7gacLCBEeS2zc2JFFVtPw" type="4001" element="_n5tDoLCBEeS2zc2JFFVtPw" source="_MceSQK3rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_n7hBgLCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n7hBgbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n7hokLCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n7hokbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n7hokrCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n7hok7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_n7gacbCBEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_n7gacrCBEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n7gac7CBEeS2zc2JFFVtPw" points="[0, 0, 2408, 1910]$[-2408, -1910, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n7holLCBEeS2zc2JFFVtPw" id="(0.45,0.06)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n7holbCBEeS2zc2JFFVtPw" id="(0.025,0.35)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_qlf7gLCBEeS2zc2JFFVtPw" type="4001" element="_qj0ggLCBEeS2zc2JFFVtPw" source="_Mcb2A63rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_qlgikLCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qlgikbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_qlgikrCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qlgik7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_qlhJoLCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qlhJobCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_qlf7gbCBEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_qlf7grCBEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qlf7g7CBEeS2zc2JFFVtPw" points="[0, 0, 2210, 2234]$[-2210, -2234, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qlhJorCBEeS2zc2JFFVtPw" id="(0.18333333333333332,0.4)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qlhJo7CBEeS2zc2JFFVtPw" id="(0.025,0.35)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_sEykALCBEeS2zc2JFFVtPw" type="4001" element="_sC8J4LCBEeS2zc2JFFVtPw" source="_McZZxK3rEeSuH7f2GGufnw" target="_McEpoK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_sEzLELCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sEzLEbCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_sEzyILCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sEzyIbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_sEzyIrCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sEzyI7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_sEykAbCBEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_sEykArCBEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_sEykA7CBEeS2zc2JFFVtPw" points="[0, -30, 639, 1010]$[0, -894, 639, 146]$[-583, -894, 56, 146]$[-583, -976, 56, 64]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sEzyJLCBEeS2zc2JFFVtPw" id="(0.7833333333333333,0.31)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_sEzyJbCBEeS2zc2JFFVtPw" id="(0.025,0.35)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_owByMLCCEeS2zc2JFFVtPw" type="4001" element="_ouqgQLCCEeS2zc2JFFVtPw" source="_McbO8K3rEeSuH7f2GGufnw" target="_MccdE63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_owCZQLCCEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_owCZQbCCEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_owCZQrCCEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_owCZQ7CCEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_owDAULCCEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_owDAUbCCEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_owByMbCCEeS2zc2JFFVtPw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_owByMrCCEeS2zc2JFFVtPw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_owByM7CCEeS2zc2JFFVtPw" points="[48, 53, -251, 360]$[155, 53, -144, 360]$[155, -263, -144, 44]$[289, -263, -10, 44]$[289, -307, -10, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_owDAUrCCEeS2zc2JFFVtPw" id="(0.6,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_owDAU7CCEeS2zc2JFFVtPw" id="(0.3050847457627119,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_9dkQcLhSEeSH9PQiHQ6eWw" type="4001" element="_9cnOMLhSEeSH9PQiHQ6eWw" source="_6FkZ4LhSEeSH9PQiHQ6eWw" target="_7Xf70LhSEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_9dk3gLhSEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9dk3gbhSEeSH9PQiHQ6eWw" x="10" y="-15"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_9dk3grhSEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9dk3g7hSEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_9dlekLhSEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9dlekbhSEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_9dkQcbhSEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_9dkQcrhSEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9dkQc7hSEeSH9PQiHQ6eWw" points="[0, 0, 151, -76]$[0, 36, 151, -40]$[-114, 36, 37, -40]$[-114, 73, 37, -3]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9dmFoLhSEeSH9PQiHQ6eWw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9dmFobhSEeSH9PQiHQ6eWw" id="(0.44166666666666665,0.04)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DefRELhTEeSH9PQiHQ6eWw" type="4001" element="_DdgZoLhTEeSH9PQiHQ6eWw" source="_7Xf70LhSEeSH9PQiHQ6eWw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Def4ILhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Def4IbhTEeSH9PQiHQ6eWw" x="13" y="37"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Def4IrhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Def4I7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Def4JLhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Def4JbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DefREbhTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DefRErhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DefRE7hTEeSH9PQiHQ6eWw" points="[262, 0, 0, 351]$[332, 0, 70, 351]$[332, -339, 70, 12]$[262, -339, 0, 12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Def4JrhTEeSH9PQiHQ6eWw" id="(0.0,0.6122448979591837)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Def4J7hTEeSH9PQiHQ6eWw" id="(1.0,0.6122448979591837)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_HX_5QLhTEeSH9PQiHQ6eWw" type="4001" element="_HXBB0LhTEeSH9PQiHQ6eWw" source="_6FkZ4LhSEeSH9PQiHQ6eWw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_HX_5RLhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HX_5RbhTEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_HX_5RrhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HX_5R7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_HX_5SLhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HX_5SbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_HX_5QbhTEeSH9PQiHQ6eWw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_HX_5QrhTEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HX_5Q7hTEeSH9PQiHQ6eWw" points="[0, -5, -26, 82]$[0, -69, -26, 18]$[24, -69, -2, 18]$[24, -87, -2, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HX_5SrhTEeSH9PQiHQ6eWw" id="(0.48333333333333334,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HX_5S7hTEeSH9PQiHQ6eWw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VYfYgLhTEeSH9PQiHQ6eWw" type="4001" element="_VYOSwLhTEeSH9PQiHQ6eWw" source="_McVIU63rEeSuH7f2GGufnw" target="_VYagALhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_VYf_kLhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYf_kbhTEeSH9PQiHQ6eWw" x="6" y="-60"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYf_krhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYf_k7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYf_lLhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYf_lbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VYfYgbhTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VYfYgrhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VYfYg7hTEeSH9PQiHQ6eWw" points="[-36, -1, 229, 410]$[-36, -414, 229, -3]$[-206, -414, 59, -3]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VYgmoLhTEeSH9PQiHQ6eWw" id="(0.6166666666666667,0.02)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VYgmobhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VYgmorhTEeSH9PQiHQ6eWw" type="4001" element="_VYSkMLhTEeSH9PQiHQ6eWw" source="_VYagALhTEeSH9PQiHQ6eWw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_VYgmprhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYgmp7hTEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYhNsLhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYhNsbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYhNsrhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYhNs7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VYgmo7hTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VYgmpLhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VYgmpbhTEeSH9PQiHQ6eWw" points="[-59, -5, 373, -5]$[-373, -5, 59, -5]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VYhNtLhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VYhNtbhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_X-ITILhVEeSH9PQiHQ6eWw" type="4001" element="_X9gBALhVEeSH9PQiHQ6eWw" source="_Q3wtYLhVEeSH9PQiHQ6eWw" target="_McVIU63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_X-I6MLhVEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X-I6MbhVEeSH9PQiHQ6eWw" x="13" y="60"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_X-JhQLhVEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X-JhQbhVEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_X-JhQrhVEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X-JhQ7hVEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_X-ITIbhVEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_X-ITIrhVEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_X-ITI7hVEeSH9PQiHQ6eWw" points="[-24, 0, 50, -595]$[-24, 616, 50, 21]$[-76, 616, -2, 21]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_X-JhRLhVEeSH9PQiHQ6eWw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_X-JhRbhVEeSH9PQiHQ6eWw" id="(0.864406779661017,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_l2vzULhWEeSH9PQiHQ6eWw" type="4001" element="_UCXoMLhVEeSH9PQiHQ6eWw" source="_Q3wtYLhVEeSH9PQiHQ6eWw" target="_McJiIK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_l2waYLhWEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l2waYbhWEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_l2waYrhWEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l2waY7hWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_l2waZLhWEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l2waZbhWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_l2vzUbhWEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_l2vzUrhWEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_l2vzU7hWEeSH9PQiHQ6eWw" points="[-59, -51, 742, -285]$[-771, -51, 30, -285]$[-771, 136, 30, -98]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_l2waZrhWEeSH9PQiHQ6eWw" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_l2waZ7hWEeSH9PQiHQ6eWw" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_J2FFMLkXEeSYMdh17YlJbg" type="4001" element="_J0nsoLkXEeSYMdh17YlJbg" source="_McUhQK3rEeSuH7f2GGufnw" target="_McIUBK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_J2G6YLkXEeSYMdh17YlJbg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J2G6YbkXEeSYMdh17YlJbg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_J2IIgLkXEeSYMdh17YlJbg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J2IIgbkXEeSYMdh17YlJbg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_J2JWoLkXEeSYMdh17YlJbg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_J2JWobkXEeSYMdh17YlJbg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_J2FsQLkXEeSYMdh17YlJbg" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_J2FsQbkXEeSYMdh17YlJbg" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_J2FsQrkXEeSYMdh17YlJbg" points="[60, 44, 308, 17]$[60, 99, 308, 72]$[-309, 99, -61, 72]$[-309, 44, -61, 17]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J2Ly4LkXEeSYMdh17YlJbg" id="(0.0,0.56)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_J2Ly4bkXEeSYMdh17YlJbg" id="(1.0,0.83)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VfkwgLkaEeS1iuOpNDUtkg" type="4001" element="_VfLu8LkaEeS1iuOpNDUtkg" source="_McEpoK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_Vf6HsLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Vf6HsbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Vf7V0LkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Vf7V0bkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Vf8j8LkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Vf8j8bkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VfkwgbkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VfkwgrkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Vfkwg7kaEeS1iuOpNDUtkg" points="[-1, -49, 179, 707]$[-1, -640, 179, 116]$[-179, -640, 1, 116]$[-179, -707, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgCDgLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgCDgbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgCqkLkaEeS1iuOpNDUtkg" type="4001" element="_VfM9ELkaEeS1iuOpNDUtkg" source="_McHF4K3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgDRoLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgDRobkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgD4sLkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgD4sbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgEfwLkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgEfwbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgCqkbkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgCqkrkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgCqk7kaEeS1iuOpNDUtkg" points="[0, -49, -1832, 1328]$[0, -1261, -1832, 116]$[1833, -1261, 1, 116]$[1833, -1328, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgEfwrkaEeS1iuOpNDUtkg" id="(0.49612403100775193,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgEfw7kaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgEfxLkaEeS1iuOpNDUtkg" type="4001" element="_VfNkILkaEeS1iuOpNDUtkg" source="_McQP063rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgFG0LkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgFG0bkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgFt4LkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgFt4bkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgFt4rkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgFt47kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgEfxbkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgEfxrkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgEfx7kaEeS1iuOpNDUtkg" points="[288, 492, 288, 492]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgGU8LkaEeS1iuOpNDUtkg" id="(0.2868217054263566,0.04)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgGU8bkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgGU8rkaEeS1iuOpNDUtkg" type="4001" element="_VfOLMLkaEeS1iuOpNDUtkg" source="_McTTI63rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgG8ALkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgG8AbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgG8ArkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgG8A7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgHjELkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgHjEbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgGU87kaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgGU9LkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgGU9bkaEeS1iuOpNDUtkg" points="[1827, 623, 1827, 623]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgHjErkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgHjE7kaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgHjFLkaEeS1iuOpNDUtkg" type="4001" element="_VfOLN7kaEeS1iuOpNDUtkg" source="_McVIU63rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgIKI7kaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgIKJLkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgIxMLkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgIxMbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgIxMrkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgIxM7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgIKILkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgIKIbkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgIKIrkaEeS1iuOpNDUtkg" points="[1890, -46, 1890, -46]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgJYQLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgJYQbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgJYQrkaEeS1iuOpNDUtkg" type="4001" element="_VfOyRrkaEeS1iuOpNDUtkg" source="_McXkkK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgJ_ULkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgJ_UbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgKmYLkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgKmYbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgKmYrkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgKmY7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgJYQ7kaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgJYRLkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgJYRbkaEeS1iuOpNDUtkg" points="[2565, 431, 2565, 431]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgKmZLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgKmZbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgLNcLkaEeS1iuOpNDUtkg" type="4001" element="_VfPZULkaEeS1iuOpNDUtkg" source="_McYLoK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgLNdLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgLNdbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgL0gLkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgL0gbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgL0grkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgL0g7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgLNcbkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgLNcrkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgLNc7kaEeS1iuOpNDUtkg" points="[765, 657, 765, 657]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgL0hLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgMbkLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgMbkbkaEeS1iuOpNDUtkg" type="4001" element="_VfPZV7kaEeS1iuOpNDUtkg" source="_MccdE63rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgNCoLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgNCobkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgNCorkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgNCo7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgNCpLkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgNCpbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgMbkrkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgMbk7kaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgMblLkaEeS1iuOpNDUtkg" points="[4158, 612, 4158, 612]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgNpsLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgNpsbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgNpsrkaEeS1iuOpNDUtkg" type="4001" element="_VfQAZrkaEeS1iuOpNDUtkg" source="_McfgZK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgOQwLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgOQwbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgOQwrkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgOQw7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgO30LkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgO30bkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgNps7kaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgNptLkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgNptbkaEeS1iuOpNDUtkg" points="[3375, 1224, 3375, 1224]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgO30rkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgO307kaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgO31LkaEeS1iuOpNDUtkg" type="4001" element="_VfQndrkaEeS1iuOpNDUtkg" source="_McgugK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgPe4LkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgPe4bkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgPe4rkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgPe47kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgQF8LkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgQF8bkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgO31bkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgO31rkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgO317kaEeS1iuOpNDUtkg" points="[3510, 1224, 3510, 1224]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgQF8rkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgQF87kaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VgQtALkaEeS1iuOpNDUtkg" type="4001" element="_VfROgLkaEeS1iuOpNDUtkg" source="_Q3wtYLhVEeSH9PQiHQ6eWw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_VgQtBLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgQtBbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgRUELkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgRUEbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VgRUErkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VgRUE7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VgQtAbkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VgQtArkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VgQtA7kaEeS1iuOpNDUtkg" points="[2025, -638, 2025, -638]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgRUFLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VgRUFbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_0uV5oLkaEeS1iuOpNDUtkg" type="4001" element="_0uEz4LkaEeS1iuOpNDUtkg" source="_McJiIK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_0uWgsLkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uWgsbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uXHwLkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uXHwbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uXHwrkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uXHw7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_0uV5obkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_0uV5orkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0uV5o7kaEeS1iuOpNDUtkg" points="[1224, -505, 1224, -505]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0uXHxLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0uXHxbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_0uXu0LkaEeS1iuOpNDUtkg" type="4001" element="_0uFa8LkaEeS1iuOpNDUtkg" source="_Mce5U63rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_0uYV4LkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uYV4bkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uYV4rkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uYV47kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uYV5LkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uYV5bkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_0uXu0bkaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_0uXu0rkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0uXu07kaEeS1iuOpNDUtkg" points="[3240, 1224, 3240, 1224]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0uY88LkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0uY88bkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_0uY88rkaEeS1iuOpNDUtkg" type="4001" element="_0uFa97kaEeS1iuOpNDUtkg" source="_7Xf70LhSEeSH9PQiHQ6eWw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_0uZkALkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uZkAbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uZkArkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uZkA7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uZkBLkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uZkBbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_0uY887kaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_0uY89LkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0uY89bkaEeS1iuOpNDUtkg" points="[-1, -49, -1243, 869]$[-1, -802, -1243, 116]$[1243, -802, 1, 116]$[1243, -869, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0uaLELkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0uaLEbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_0uaLErkaEeS1iuOpNDUtkg" type="4001" element="_0uGCBrkaEeS1iuOpNDUtkg" source="_VYagALhTEeSH9PQiHQ6eWw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_0uayILkaEeS1iuOpNDUtkg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uayIbkaEeS1iuOpNDUtkg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uayIrkaEeS1iuOpNDUtkg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uayI7kaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0uayJLkaEeS1iuOpNDUtkg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0uayJbkaEeS1iuOpNDUtkg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_0uaLE7kaEeS1iuOpNDUtkg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_0uaLFLkaEeS1iuOpNDUtkg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_0uaLFbkaEeS1iuOpNDUtkg" points="[1656, -505, 1656, -505]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0ubZMLkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_0ubZMbkaEeS1iuOpNDUtkg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_LdikYL0LEeSl6a8pTlra3w" type="4001" element="_eGpJgLhVEeSH9PQiHQ6eWw" source="_Q3wtYLhVEeSH9PQiHQ6eWw" target="_McL-Y63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_LdjLcL0LEeSl6a8pTlra3w" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LdjLcb0LEeSl6a8pTlra3w" x="108" y="34"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_LdjygL0LEeSl6a8pTlra3w" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ldjygb0LEeSl6a8pTlra3w" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_LdkZkL0LEeSl6a8pTlra3w" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LdkZkb0LEeSl6a8pTlra3w" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_LdikYb0LEeSl6a8pTlra3w" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_LdikYr0LEeSl6a8pTlra3w" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_LdikY70LEeSl6a8pTlra3w" points="[4, 0, 616, -877]$[4, 801, 616, -76]$[-553, 801, 59, -76]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LdpSEL0LEeSl6a8pTlra3w" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LdpSEb0LEeSl6a8pTlra3w" id="(0.5,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_TEqt0L0LEeSl6a8pTlra3w" type="4001" element="_TA7dUL0LEeSl6a8pTlra3w" source="_Q3wtYLhVEeSH9PQiHQ6eWw" target="_McNMg63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_TEsjAL0LEeSl6a8pTlra3w" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TEsjAb0LEeSl6a8pTlra3w" x="-12" y="52"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_TEtKEL0LEeSl6a8pTlra3w" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TEtKEb0LEeSl6a8pTlra3w" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_TEtxIL0LEeSl6a8pTlra3w" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TEtxIb0LEeSl6a8pTlra3w" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_TEqt0b0LEeSl6a8pTlra3w" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_TEqt0r0LEeSl6a8pTlra3w" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_TEqt070LEeSl6a8pTlra3w" points="[1, 0, -288, -1072]$[1, 372, -288, -700]$[280, 372, -9, -700]$[280, 1072, -9, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TEuYML0LEeSl6a8pTlra3w" id="(0.75,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_TEuYMb0LEeSl6a8pTlra3w" id="(0.8319327731092437,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_aTGSUL0qEeSQw4jKJk8vcg" type="4001" element="_aRE5EL0qEeSQw4jKJk8vcg" source="_McF3w63rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_aTX_IL0qEeSQw4jKJk8vcg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aTX_Ib0qEeSQw4jKJk8vcg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_aTZNQL0qEeSQw4jKJk8vcg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aTZNQb0qEeSQw4jKJk8vcg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_aTZ0UL0qEeSQw4jKJk8vcg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aTZ0Ub0qEeSQw4jKJk8vcg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_aTGSUb0qEeSQw4jKJk8vcg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_aTGSUr0qEeSQw4jKJk8vcg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_aTGSU70qEeSQw4jKJk8vcg" points="[0, 0, -1700, 966]$[1700, -966, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aTc3oL0qEeSQw4jKJk8vcg" id="(0.31666666666666665,0.11)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_aTc3ob0qEeSQw4jKJk8vcg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_AP-JQMGsEeS6WJHyXZkBTg" type="4001" element="_APhdUMGsEeS6WJHyXZkBTg" source="_APzxMMGsEeS6WJHyXZkBTg" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_AP-wUMGsEeS6WJHyXZkBTg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AP-wUcGsEeS6WJHyXZkBTg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AP_XYMGsEeS6WJHyXZkBTg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AP_XYcGsEeS6WJHyXZkBTg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AP_XYsGsEeS6WJHyXZkBTg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AP_XY8GsEeS6WJHyXZkBTg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_AP-JQcGsEeS6WJHyXZkBTg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_AP-JQsGsEeS6WJHyXZkBTg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AP-JQ8GsEeS6WJHyXZkBTg" points="[0, 0, 0, 0]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AP_-cMGsEeS6WJHyXZkBTg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AP_-ccGsEeS6WJHyXZkBTg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_AQAlgMGsEeS6WJHyXZkBTg" type="4001" element="_APiresGsEeS6WJHyXZkBTg" source="_AP2NcMGsEeS6WJHyXZkBTg" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_AQAlhMGsEeS6WJHyXZkBTg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AQAlhcGsEeS6WJHyXZkBTg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AQBMkMGsEeS6WJHyXZkBTg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AQBMkcGsEeS6WJHyXZkBTg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AQBMksGsEeS6WJHyXZkBTg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AQBMk8GsEeS6WJHyXZkBTg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_AQAlgcGsEeS6WJHyXZkBTg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_AQAlgsGsEeS6WJHyXZkBTg" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AQAlg8GsEeS6WJHyXZkBTg" points="[0, 0, 0, 0]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AQBMlMGsEeS6WJHyXZkBTg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AQBzoMGsEeS6WJHyXZkBTg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_FAw-wMGsEeS6WJHyXZkBTg" type="4001" element="_E_yuYMGsEeS6WJHyXZkBTg" source="_APzxMMGsEeS6WJHyXZkBTg" target="_AP2NcMGsEeS6WJHyXZkBTg">
+ <children xmi:type="notation:Node" xmi:id="_FAxl0MGsEeS6WJHyXZkBTg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FAxl0cGsEeS6WJHyXZkBTg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FAxl0sGsEeS6WJHyXZkBTg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FAxl08GsEeS6WJHyXZkBTg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FAyM4MGsEeS6WJHyXZkBTg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FAyM4cGsEeS6WJHyXZkBTg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_FAw-wcGsEeS6WJHyXZkBTg" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_FAw-wsGsEeS6WJHyXZkBTg" fontColor="7490599" fontName="Segoe UI" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FAw-w8GsEeS6WJHyXZkBTg" points="[59, -1, -166, -1]$[166, -1, -59, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FAyM4sGsEeS6WJHyXZkBTg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FAyM48GsEeS6WJHyXZkBTg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_fexg8MNUEeS2b7b-DU5jjw" type="4001" element="_fcSNoMNUEeS2b7b-DU5jjw" source="_3vJ8ELkWEeSYMdh17YlJbg" target="_APzxMMGsEeS6WJHyXZkBTg">
+ <children xmi:type="notation:Node" xmi:id="_ffZMAMNUEeS2b7b-DU5jjw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ffZMAcNUEeS2b7b-DU5jjw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ffhH0MNUEeS2b7b-DU5jjw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ffhH0cNUEeS2b7b-DU5jjw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ffi9AMNUEeS2b7b-DU5jjw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ffi9AcNUEeS2b7b-DU5jjw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_fexg8cNUEeS2b7b-DU5jjw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fexg8sNUEeS2b7b-DU5jjw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_feyIAMNUEeS2b7b-DU5jjw" points="[59, -1, -202, -1]$[202, -1, -59, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ff0CwMNUEeS2b7b-DU5jjw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ff0CwcNUEeS2b7b-DU5jjw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_F4pxAM2JEeSBhbbM5x_3mA" type="4001" element="_F3mBEM2JEeSBhbbM5x_3mA" source="_MclnAK3rEeSuH7f2GGufnw" target="_3vJ8ELkWEeSYMdh17YlJbg">
+ <children xmi:type="notation:Node" xmi:id="_F5AWUM2JEeSBhbbM5x_3mA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F5AWUc2JEeSBhbbM5x_3mA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_F5F14M2JEeSBhbbM5x_3mA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F5F14c2JEeSBhbbM5x_3mA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_F5HEAM2JEeSBhbbM5x_3mA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_F5HEAc2JEeSBhbbM5x_3mA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_F4pxAc2JEeSBhbbM5x_3mA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_F4pxAs2JEeSBhbbM5x_3mA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_F4pxA82JEeSBhbbM5x_3mA" points="[3015, 1451, 3015, 1451]$[2322, -971, 2322, -971]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_F5OYwM2JEeSBhbbM5x_3mA" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_F5OYwc2JEeSBhbbM5x_3mA" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_4fr54M2KEeSBhbbM5x_3mA" type="4001" element="_4fPN8M2KEeSBhbbM5x_3mA" source="_McLXUK3rEeSuH7f2GGufnw" target="_McVvZK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_4fsg8M2KEeSBhbbM5x_3mA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4fsg8c2KEeSBhbbM5x_3mA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4fsg8s2KEeSBhbbM5x_3mA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4fsg882KEeSBhbbM5x_3mA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4fsg9M2KEeSBhbbM5x_3mA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4fsg9c2KEeSBhbbM5x_3mA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4fr54c2KEeSBhbbM5x_3mA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4fr54s2KEeSBhbbM5x_3mA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4fr5482KEeSBhbbM5x_3mA" points="[2043, 432, 2043, 432]$[405, 126, 405, 126]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4ftIAM2KEeSBhbbM5x_3mA" id="(0.5,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4ftIAc2KEeSBhbbM5x_3mA" id="(0.9836065573770492,0.55)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_9EI8gM2KEeSBhbbM5x_3mA" type="4001" element="_9DxJEM2KEeSBhbbM5x_3mA" source="_McIUBK3rEeSuH7f2GGufnw" target="_McVvZK3rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_9EJjkM2KEeSBhbbM5x_3mA" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9EJjkc2KEeSBhbbM5x_3mA" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_9EKKoM2KEeSBhbbM5x_3mA" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9EKKoc2KEeSBhbbM5x_3mA" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_9EKKos2KEeSBhbbM5x_3mA" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9EKKo82KEeSBhbbM5x_3mA" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_9EI8gc2KEeSBhbbM5x_3mA" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_9EI8gs2KEeSBhbbM5x_3mA" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9EI8g82KEeSBhbbM5x_3mA" points="[0, -98, 1203, 444]$[0, -451, 1203, 91]$[-1267, -451, -64, 91]$[-1267, -497, -64, 45]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9EKKpM2KEeSBhbbM5x_3mA" id="(0.6589147286821705,0.03)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_9EKKpc2KEeSBhbbM5x_3mA" id="(0.9836065573770492,0.55)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_REmUUNyYEeSavKYvIj4uEg" type="4001" element="_RCqaoNyYEeSavKYvIj4uEg" source="_McVIU63rEeSuH7f2GGufnw" target="_McVIU63rEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_RE9gsNyYEeSavKYvIj4uEg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RE9gsdyYEeSavKYvIj4uEg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_RE_V4NyYEeSavKYvIj4uEg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RE_V4dyYEeSavKYvIj4uEg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_RFAkANyYEeSavKYvIj4uEg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_RFAkAdyYEeSavKYvIj4uEg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_REmUUdyYEeSavKYvIj4uEg" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_REmUUtyYEeSavKYvIj4uEg" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_REmUU9yYEeSavKYvIj4uEg" points="[59, 24, 59, 24]$[94, 24, 94, 24]$[94, 104, 94, 104]$[30, 104, 30, 104]$[30, 49, 30, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RFXwYNyYEeSavKYvIj4uEg" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RFXwYdyYEeSavKYvIj4uEg" id="(0.5,0.5)"/>
+ </edges>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_MbHAUK3rEeSuH7f2GGufnw" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_MbHAUa3rEeSuH7f2GGufnw">
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F1r8kM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F1r8kc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F1r8ks2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F1u_4M2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F1u_4c2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F1u_4s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F1xcIM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F1xcIc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F1xcIs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F1zRUM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F1zRUc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F1zRUs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F11GgM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F11Ggc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F11Ggs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F127sM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F127sc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F127ss2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F14w4M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F14w4c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F14w4s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F15_AM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F15_Ac2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F15_As2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F170MM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F170Mc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F170Ms2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F19pYM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F19pYc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F19pYs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2AFoM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2AFoc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2AFos2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2B60M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2B60c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2B60s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2DwAM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2DwAc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2DwAs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2FlMM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2FlMc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2FlMs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2HaYM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2HaYc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2HaYs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2JPkM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2JPkc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2JPks2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2Lr0M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2Lr0c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2Lr0s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2M58M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2M58c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2M58s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2OIEM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2OIEc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2OIEs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2QkUM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2QkUc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2QkUs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2RycM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2Rycc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2Rycs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2SZgM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2SZgc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2SZgs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2TnoM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2Tnoc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2Tnos2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2Vc0M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2Vc0c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2Vc0s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2Wq8M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2Wq8c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2Wq8s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2YgIM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2YgIc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2YgIs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2ZuQM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2ZuQc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2ZuQs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2a8YM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2a8Yc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2a8Ys2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2cKgM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2cKgc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2cKgs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2dYoM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2dYoc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2dYos2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2emwM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2emwc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2emws2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2f04M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2f04c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2f04s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2hDAM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2hDAc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2hDAs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2iRIM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2iRIc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2iRIs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2jfQM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2jfQc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2jfQs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2kGUM2JEeSBhbbM5x_3mA" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2kGUc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2kGUs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2lUcM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2lUcc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2lUcs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2nJoM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2nJoc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2nJos2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2o-0M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2o-0c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2o-0s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2qM8M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2qM8c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2qM8s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2rbEM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2rbEc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2rbEs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2spMM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2spMc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2spMs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2w6oM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2w6oc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2w6os2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2yIwM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2yIwc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2yIws2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F2zW4M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F2zW4c2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F2zW4s2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F21MEM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F21MEc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F21MEs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_F22aMM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_F22aMc2JEeSBhbbM5x_3mA" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_F22aMs2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_RCrowdyYEeSavKYvIj4uEg" sourceArrow="FillDiamond" sizeComputationExpression="1" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_RCrowtyYEeSavKYvIj4uEg" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_RCrow9yYEeSavKYvIj4uEg" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <cache xmi:type="diagram:DiagramElementMapping2ModelElement" xmi:id="_MbHAUq3rEeSuH7f2GGufnw">
+ <key xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_DHgMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Attribute/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_DHgcGsEeS6WJHyXZkBTg" key="_MbGZRq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_DHhcGsEeS6WJHyXZkBTg" value="_F1r8kM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_EVoMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CapsulePart/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_EVocGsEeS6WJHyXZkBTg" key="_MbHnZq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_EVpcGsEeS6WJHyXZkBTg" value="_F1u_4M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_E8sMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/returnType"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_E8scGsEeS6WJHyXZkBTg" key="_MbI1hq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_E8tcGsEeS6WJHyXZkBTg" value="_F1xcIM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_FjwMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/parameters"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_FjwcGsEeS6WJHyXZkBTg" key="_MbKDoK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_FjxcGsEeS6WJHyXZkBTg" value="_F1zRUM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_Gx4MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Port/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_Gx4cGsEeS6WJHyXZkBTg" key="_MbKqsK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_Gx5cGsEeS6WJHyXZkBTg" value="_F11GgM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_HY8MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Entity/attributes"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_HY8cGsEeS6WJHyXZkBTg" key="_MbLRxq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_HY9cGsEeS6WJHyXZkBTg" value="_F127sM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_IAAMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Entity/operations"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_IAAcGsEeS6WJHyXZkBTg" key="_MbL43K3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_IABcGsEeS6WJHyXZkBTg" value="_F14w4M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_InFcGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Entity/behaviour"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_JOIMGsEeS6WJHyXZkBTg" key="_MbNG8K3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_JOJMGsEeS6WJHyXZkBTg" value="_F15_AM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_J1MMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_J1McGsEeS6WJHyXZkBTg" key="_MbNuAK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_J1NcGsEeS6WJHyXZkBTg" value="_F170MM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_LDUMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Capsule/parts"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_LDUcGsEeS6WJHyXZkBTg" key="_MbOVF63rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_LDVcGsEeS6WJHyXZkBTg" value="_F19pYM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_LqYMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Capsule/ports"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_LqYcGsEeS6WJHyXZkBTg" key="_MbO8LK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_LqZcGsEeS6WJHyXZkBTg" value="_F2AFoM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_MRcMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Capsule/connectors"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_MRccGsEeS6WJHyXZkBTg" key="_MbPjPK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_M4gsGsEeS6WJHyXZkBTg" value="_F2B60M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_NfkMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Parameter/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_NfkcGsEeS6WJHyXZkBTg" key="_MbQKTK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_NflcGsEeS6WJHyXZkBTg" value="_F2DwAM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_OGoMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Signal/parameters"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_OGocGsEeS6WJHyXZkBTg" key="_MbQxXK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_OGpcGsEeS6WJHyXZkBTg" value="_F2FlMM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_PUwMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Connector/ends"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_PUwcGsEeS6WJHyXZkBTg" key="_MbRYbK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_PUxcGsEeS6WJHyXZkBTg" value="_F2HaYM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_P70MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/role"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_P70cGsEeS6WJHyXZkBTg" key="_MbSmgK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_Qi48GsEeS6WJHyXZkBTg" value="_F2JPkM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_RJ8MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/protocols"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_RxAMGsEeS6WJHyXZkBTg" key="_MbVCyq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_RxBMGsEeS6WJHyXZkBTg" value="_F2Lr0M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_SYEMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/entities"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_SYEcGsEeS6WJHyXZkBTg" key="_HzYAYLCBEeS2zc2JFFVtPw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_SYFcGsEeS6WJHyXZkBTg" value="_F2M58M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_TmMMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/typedefinitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_TmMcGsEeS6WJHyXZkBTg" key="_VYOSwLhTEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_TmNcGsEeS6WJHyXZkBTg" value="_F2OIEM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_U0UMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Operation/body"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_U0UcGsEeS6WJHyXZkBTg" key="_MbWQ4K3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_VbY8GsEeS6WJHyXZkBTg" value="_F2QkUM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_WCcMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//StateMachine/top"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_WCccGsEeS6WJHyXZkBTg" key="_MbW3963rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_WCdcGsEeS6WJHyXZkBTg" value="_F2RycM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_WpgMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Vertex/incomingTransitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_WpgcGsEeS6WJHyXZkBTg" key="_MbYGEK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_XQk8GsEeS6WJHyXZkBTg" value="_F2SZgM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_X3oMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Vertex/outgoingTransitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_X3ocGsEeS6WJHyXZkBTg" key="_MbYtIK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_X3pcGsEeS6WJHyXZkBTg" value="_F2TnoM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_YesMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//State/entryAction"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_YescGsEeS6WJHyXZkBTg" key="_MbZUMK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_YetcGsEeS6WJHyXZkBTg" value="_F2Vc0M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_Zs0MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//State/exitAction"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_Zs0cGsEeS6WJHyXZkBTg" key="_MbZ7S63rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_aT4MGsEeS6WJHyXZkBTg" value="_F2Wq8M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_a68MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//State/exitPoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_a68cGsEeS6WJHyXZkBTg" key="_MbbJYK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_a69cGsEeS6WJHyXZkBTg" value="_F2YgIM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_cJEMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//State/entryPoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_cJEcGsEeS6WJHyXZkBTg" key="_MbbwcK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_cJFcGsEeS6WJHyXZkBTg" value="_F2ZuQM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_cwIMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/initial"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_cwIcGsEeS6WJHyXZkBTg" key="_MbcXh63rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_cwJcGsEeS6WJHyXZkBTg" value="_F2a8YM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_dXMMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/deepHistory"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_dXMcGsEeS6WJHyXZkBTg" key="_MbdloK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_dXNcGsEeS6WJHyXZkBTg" value="_F2cKgM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_elUMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/junctionPoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_elUcGsEeS6WJHyXZkBTg" key="_MbeMtq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_elVcGsEeS6WJHyXZkBTg" value="_F2dYoM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_fMYMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/choicePoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_fMYcGsEeS6WJHyXZkBTg" key="_Mbfa0K3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_fMZcGsEeS6WJHyXZkBTg" value="_F2emwM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_fzcMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/substates"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_gagMGsEeS6WJHyXZkBTg" key="_Mbgo8K3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_gahMGsEeS6WJHyXZkBTg" value="_F2f04M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_hBkMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/transitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_hBkcGsEeS6WJHyXZkBTg" key="_MbhQDK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_hBlcGsEeS6WJHyXZkBTg" value="_F2hDAM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_hooMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/vertices"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_hoocGsEeS6WJHyXZkBTg" key="_ouqgQLCCEeS2zc2JFFVtPw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_hopcGsEeS6WJHyXZkBTg" value="_F2iRIM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_i2wMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/sourceVertex"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_i2wcGsEeS6WJHyXZkBTg" key="_MbieIK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_jd08GsEeS6WJHyXZkBTg" value="_F2jfQM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_kE4MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/targetVertex"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_kE4cGsEeS6WJHyXZkBTg" key="_MbjFOq3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_kE5cGsEeS6WJHyXZkBTg" value="_F2kGUM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_kr8MGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/triggers"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_lTAMGsEeS6WJHyXZkBTg" key="_MbkTUK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_lTBMGsEeS6WJHyXZkBTg" value="_F2lUcM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_l6EMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/guard"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_l6EcGsEeS6WJHyXZkBTg" key="_MblhcK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_l6FcGsEeS6WJHyXZkBTg" value="_F2nJoM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_mhIMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/actionChain"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_mhIcGsEeS6WJHyXZkBTg" key="_MbmvkK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_mhJcGsEeS6WJHyXZkBTg" value="_F2o-0M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_nvQMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Guard/body"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_nvQcGsEeS6WJHyXZkBTg" key="_Mbn9sK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_oWU8GsEeS6WJHyXZkBTg" value="_F2qM8M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_o9YMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//ActionChain/actions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_o9YcGsEeS6WJHyXZkBTg" key="_MbokzK3rEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_o9ZcGsEeS6WJHyXZkBTg" value="_F2rbEM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_qLgMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//StructType/structMembers"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_qLgcGsEeS6WJHyXZkBTg" key="_9cnOMLhSEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_qLhcGsEeS6WJHyXZkBTg" value="_F2spMM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_rZoMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/localScopeTemporaryTypes"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_rZocGsEeS6WJHyXZkBTg" key="_UCXoMLhVEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_rZpcGsEeS6WJHyXZkBTg" value="_F2w6oM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_sAsMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/rootPackages"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_sAscGsEeS6WJHyXZkBTg" key="_X9gBALhVEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_vEA8GsEeS6WJHyXZkBTg" value="_F2yIwM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_w5MMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/topEntities"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_w5McGsEeS6WJHyXZkBTg" key="_eGpJgLhVEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_w5NcGsEeS6WJHyXZkBTg" value="_F2zW4M2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_yHUMGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/topProtocols"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_yHUcGsEeS6WJHyXZkBTg" key="_TA7dUL0LEeSl6a8pTlra3w">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_yHVcGsEeS6WJHyXZkBTg" value="_F21MEM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_E_yuYcGsEeS6WJHyXZkBTg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Annotation/parameters"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_E_yuYsGsEeS6WJHyXZkBTg" key="_E_yuYMGsEeS6WJHyXZkBTg">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_E_yuZsGsEeS6WJHyXZkBTg" value="_F22aMM2JEeSBhbbM5x_3mA">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_RCrBsNyYEeSavKYvIj4uEg">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/packages"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_RCrowNyYEeSavKYvIj4uEg" key="_RCqaoNyYEeSavKYvIj4uEg">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_RCroxNyYEeSavKYvIj4uEg" value="_RCrowdyYEeSavKYvIj4uEg">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ </cache>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZugQK3rEeSuH7f2GGufnw" name="RedefinableElement" tooltipText="" outgoingEdges="_MbFLIK3rEeSuH7f2GGufnw _VfLu8LkaEeS1iuOpNDUtkg" incomingEdges="_MbFLIK3rEeSuH7f2GGufnw _MbuEUK3rEeSuH7f2GGufnw _Yr4OkLCBEeS2zc2JFFVtPw _lGeuELCBEeS2zc2JFFVtPw _mC1ooLCBEeS2zc2JFFVtPw _n5tDoLCBEeS2zc2JFFVtPw _qj0ggLCBEeS2zc2JFFVtPw _sC8J4LCBEeS2zc2JFFVtPw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//RedefinableElement"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//RedefinableElement"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZvHUK3rEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZvHUa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZvHUq3rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZvHU63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZvHVK3rEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZvuYK3rEeSuH7f2GGufnw" name="PrimitiveType" tooltipText="" outgoingEdges="_MbrBBq3rEeSuH7f2GGufnw _aRE5EL0qEeSQw4jKJk8vcg" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_XjQA4L0qEeSQw4jKJk8vcg" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_XjQA4b0qEeSQw4jKJk8vcg"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_XjQA4r0qEeSQw4jKJk8vcg"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_XjQA470qEeSQw4jKJk8vcg" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_XjQA5L0qEeSQw4jKJk8vcg" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZwVda3rEeSuH7f2GGufnw" name="Attribute" tooltipText="" outgoingEdges="_MbGZRq3rEeSuH7f2GGufnw _MbroFq3rEeSuH7f2GGufnw _VfM9ELkaEeS1iuOpNDUtkg" incomingEdges="_MbLRxq3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_JARdgLxXEeSl6a8pTlra3w" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JARdgbxXEeSl6a8pTlra3w"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_JARdgrxXEeSl6a8pTlra3w"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_JARdg7xXEeSl6a8pTlra3w" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_JARdhLxXEeSl6a8pTlra3w" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MazeUK3rEeSuH7f2GGufnw" name="visibility : VisibilityKind = PUBLIC" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/visibility"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/visibility"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma0FYK3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma0FYa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma0FYq3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma0FY63rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_HScpwLxXEeSl6a8pTlra3w" name="default : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/default"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/default"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_JApQ8LxXEeSl6a8pTlra3w" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JApQ8bxXEeSl6a8pTlra3w"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_JApQ8rxXEeSl6a8pTlra3w"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_JApQ87xXEeSl6a8pTlra3w"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_GfG7gL0LEeSl6a8pTlra3w" name="static : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/static"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/static"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_GfHikL0LEeSl6a8pTlra3w" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_GfHikb0LEeSl6a8pTlra3w"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_GfHikr0LEeSl6a8pTlra3w"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_GfHik70LEeSl6a8pTlra3w"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZw8ha3rEeSuH7f2GGufnw" name="VisibilityKind" tooltipText="">
+ <target xmi:type="ecore:EEnum" href="common.ecore#//VisibilityKind"/>
+ <semanticElements xmi:type="ecore:EEnum" href="common.ecore#//VisibilityKind"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZyKoK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyKoa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyKoq3rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyKo63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyKpK3rEeSuH7f2GGufnw" red="221" green="236" blue="202"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma92YK3rEeSuH7f2GGufnw" name="PUBLIC" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//VisibilityKind/PUBLIC"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//VisibilityKind/PUBLIC"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma92Ya3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma92Yq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma92Y63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma92ZK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma-dcK3rEeSuH7f2GGufnw" name="PROTECTED" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//VisibilityKind/PROTECTED"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//VisibilityKind/PROTECTED"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma-dca3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma-dcq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma-dc63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma-ddK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma-dda3rEeSuH7f2GGufnw" name="PRIVATE" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//VisibilityKind/PRIVATE"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//VisibilityKind/PRIVATE"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma-ddq3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma-dd63rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma-deK3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma-dea3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZyKpa3rEeSuH7f2GGufnw" name="CapsulePart" tooltipText="" outgoingEdges="_MbHnZq3rEeSuH7f2GGufnw _lGeuELCBEeS2zc2JFFVtPw _9DxJEM2KEeSBhbbM5x_3mA" incomingEdges="_MbOVF63rEeSuH7f2GGufnw _J0nsoLkXEeSYMdh17YlJbg" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CapsulePart"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//CapsulePart"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZyxsK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyxsa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyxsq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyxs63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZyxtK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma0scK3rEeSuH7f2GGufnw" name="kind : CapsuleKind = FIXED" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//CapsulePart/kind"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//CapsulePart/kind"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma0sca3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma0scq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma0sc63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma0sdK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZzYwK3rEeSuH7f2GGufnw" name="Type" tooltipText="" outgoingEdges="_0uEz4LkaEeS1iuOpNDUtkg" incomingEdges="_MbGZRq3rEeSuH7f2GGufnw _MbI1hq3rEeSuH7f2GGufnw _MbQKTK3rEeSuH7f2GGufnw _MbrBBq3rEeSuH7f2GGufnw _CElHALCAEeS2zc2JFFVtPw _DdgZoLhTEeSH9PQiHQ6eWw _HXBB0LhTEeSH9PQiHQ6eWw _VYSkMLhTEeSH9PQiHQ6eWw _UCXoMLhVEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Type"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Type"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZzYwa3rEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_interface.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZzYwq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.0/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZzYw63rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZzYxK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZzYxa3rEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZz_0K3rEeSuH7f2GGufnw" name="OperationSignature" tooltipText="" outgoingEdges="_MbI1hq3rEeSuH7f2GGufnw _MbKDoK3rEeSuH7f2GGufnw" incomingEdges="_Mb0yAK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//OperationSignature"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//OperationSignature"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_5Z_FILxWEeSl6a8pTlra3w" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_5Z_FIbxWEeSl6a8pTlra3w"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_5Z_FIrxWEeSl6a8pTlra3w" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_5Z_FI7xWEeSl6a8pTlra3w" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_5Z_FJLxWEeSl6a8pTlra3w" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_utcGILuWEeSl6a8pTlra3w" name="visibility : VisibilityKind = PUBLIC" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//OperationSignature/visibility"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//OperationSignature/visibility"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_utdUQLuWEeSl6a8pTlra3w" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_utdUQbuWEeSl6a8pTlra3w"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_utdUQruWEeSl6a8pTlra3w"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_utdUQ7uWEeSl6a8pTlra3w"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_4CkmQLxWEeSl6a8pTlra3w" name="static : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//OperationSignature/static"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//OperationSignature/static"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_5aW4kLxWEeSl6a8pTlra3w" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_5aW4kbxWEeSl6a8pTlra3w"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_5aW4krxWEeSl6a8pTlra3w"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_5aW4k7xWEeSl6a8pTlra3w"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ0m4K3rEeSuH7f2GGufnw" name="Port" tooltipText="" outgoingEdges="_MbKqsK3rEeSuH7f2GGufnw _mC1ooLCBEeS2zc2JFFVtPw _4fPN8M2KEeSBhbbM5x_3mA" incomingEdges="_MbO8LK3rEeSuH7f2GGufnw _MbSmgK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Port"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Port"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ0m4a3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ0m4q3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ0m463rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ0m5K3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ0m5a3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma16kK3rEeSuH7f2GGufnw" name="conjugate : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Port/conjugate"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Port/conjugate"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma16ka3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma16kq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma16k63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma16lK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_RBLM4NyYEeSavKYvIj4uEg" name="visibility : VisibilityKind = PUBLIC" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Port/visibility"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Port/visibility"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_RBNCENyYEeSavKYvIj4uEg" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_RBNCEdyYEeSavKYvIj4uEg"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_RBNCEtyYEeSavKYvIj4uEg"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_RBNCE9yYEeSavKYvIj4uEg"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ1N8K3rEeSuH7f2GGufnw" name="Entity" tooltipText="" outgoingEdges="_MbLRxq3rEeSuH7f2GGufnw _MbL43K3rEeSuH7f2GGufnw _MbNG8K3rEeSuH7f2GGufnw _CElHALCAEeS2zc2JFFVtPw" incomingEdges="_MburZq3rEeSuH7f2GGufnw _HzYAYLCBEeS2zc2JFFVtPw _eGpJgLhVEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Entity"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Entity"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ11AK3rEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ11Aa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ11Aq3rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ11A63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ11BK3rEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ11Ba3rEeSuH7f2GGufnw" name="Protocol" tooltipText="" outgoingEdges="_MbNuAK3rEeSuH7f2GGufnw _MbuEUK3rEeSuH7f2GGufnw" incomingEdges="_MbKqsK3rEeSuH7f2GGufnw _MbVCyq3rEeSuH7f2GGufnw _TA7dUL0LEeSl6a8pTlra3w" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Protocol"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Protocol"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ2cEK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ2cEa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ2cEq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ2cE63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ2cFK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ3DIK3rEeSuH7f2GGufnw" name="Capsule" tooltipText="" outgoingEdges="_MbOVF63rEeSuH7f2GGufnw _MbO8LK3rEeSuH7f2GGufnw _MbPjPK3rEeSuH7f2GGufnw _MburZq3rEeSuH7f2GGufnw _Yr4OkLCBEeS2zc2JFFVtPw" incomingEdges="_MbHnZq3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ3qMK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ3qMa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ3qMq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ3qM63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ3qNK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ4RQK3rEeSuH7f2GGufnw" name="Parameter" tooltipText="" outgoingEdges="_MbQKTK3rEeSuH7f2GGufnw _MbxHoK3rEeSuH7f2GGufnw _VfNkILkaEeS1iuOpNDUtkg" incomingEdges="_MbKDoK3rEeSuH7f2GGufnw _MbQxXK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ44UK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ44Ua3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ44Uq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ44U63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ44VK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma2hpK3rEeSuH7f2GGufnw" name="direction : DirectionKind = IN" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Parameter/direction"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Parameter/direction"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma3IsK3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma3Isa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma3Isq3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma3Is63rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ5fYK3rEeSuH7f2GGufnw" name="Signal" tooltipText="" outgoingEdges="_MbQxXK3rEeSuH7f2GGufnw _Mby80K3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Signal"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Signal"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ6GcK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ6Gca3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ6Gcq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ6Gc63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ6GdK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ7UkK3rEeSuH7f2GGufnw" name="CapsuleKind" tooltipText="">
+ <target xmi:type="ecore:EEnum" href="common.ecore#//CapsuleKind"/>
+ <semanticElements xmi:type="ecore:EEnum" href="common.ecore#//CapsuleKind"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ7Uka3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ7Ukq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ7Uk63rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ7UlK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ7Ula3rEeSuH7f2GGufnw" red="221" green="236" blue="202"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma_EgK3rEeSuH7f2GGufnw" name="FIXED" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//CapsuleKind/FIXED"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//CapsuleKind/FIXED"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma_Ega3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma_Egq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma_Eg63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma_EhK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma_rkK3rEeSuH7f2GGufnw" name="OPTIONAL" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//CapsuleKind/OPTIONAL"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//CapsuleKind/OPTIONAL"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma_rka3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma_rkq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma_rk63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma_rlK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma_rla3rEeSuH7f2GGufnw" name="PLUGIN" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//CapsuleKind/PLUGIN"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//CapsuleKind/PLUGIN"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma_rlq3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma_rl63rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma_rmK3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma_rma3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ77oK3rEeSuH7f2GGufnw" name="Connector" tooltipText="" outgoingEdges="_MbRYbK3rEeSuH7f2GGufnw _VfOLMLkaEeS1iuOpNDUtkg" incomingEdges="_MbPjPK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Connector"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Connector"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ77oa3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ77oq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ77o63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ77pK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ77pa3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ8isK3rEeSuH7f2GGufnw" name="ConnectorEnd" tooltipText="" outgoingEdges="_MbSmgK3rEeSuH7f2GGufnw _J0nsoLkXEeSYMdh17YlJbg" incomingEdges="_MbRYbK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ConnectorEnd"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ConnectorEnd"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ8isa3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ8isq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ8is63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ8itK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ8ita3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ9JwK3rEeSuH7f2GGufnw" name="Package" tooltipText="" outgoingEdges="_MbVCyq3rEeSuH7f2GGufnw _HzYAYLCBEeS2zc2JFFVtPw _VYOSwLhTEeSH9PQiHQ6eWw _VfOLN7kaEeS1iuOpNDUtkg _RCqaoNyYEeSavKYvIj4uEg" incomingEdges="_X9gBALhVEeSH9PQiHQ6eWw _RCqaoNyYEeSavKYvIj4uEg" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Package"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Package"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ9Jwa3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ9Jwq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ9Jw63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ9JxK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ9Jxa3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ9w0K3rEeSuH7f2GGufnw" name="MultiplicityElement" tooltipText="" incomingEdges="_MbroFq3rEeSuH7f2GGufnw _MbxHoK3rEeSuH7f2GGufnw _4fPN8M2KEeSBhbbM5x_3mA _9DxJEM2KEeSBhbbM5x_3mA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//MultiplicityElement"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//MultiplicityElement"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ-X4K3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X4a3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X4q3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X463rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X5K3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_RBUW0NyYEeSavKYvIj4uEg" name="ordered : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/ordered"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/ordered"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_RBU94NyYEeSavKYvIj4uEg" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_RBU94dyYEeSavKYvIj4uEg"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_RBU94tyYEeSavKYvIj4uEg"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_RBU949yYEeSavKYvIj4uEg"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma495K3rEeSuH7f2GGufnw" name="lowerBound : EInt = 0" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/lowerBound"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/lowerBound"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma5k8K3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma5k8a3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma5k8q3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma5k863rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_RBTIsNyYEeSavKYvIj4uEg" name="unique : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/unique"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/unique"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_RBTvwNyYEeSavKYvIj4uEg" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_RBTvwdyYEeSavKYvIj4uEg"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_RBTvwtyYEeSavKYvIj4uEg"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_RBTvw9yYEeSavKYvIj4uEg"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma5k9K3rEeSuH7f2GGufnw" name="upperBound : EInt = 0" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/upperBound"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/upperBound"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma5k9a3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma5k9q3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma5k963rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma5k-K3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ-X5a3rEeSuH7f2GGufnw" name="DirectionKind" tooltipText="">
+ <target xmi:type="ecore:EEnum" href="common.ecore#//DirectionKind"/>
+ <semanticElements xmi:type="ecore:EEnum" href="common.ecore#//DirectionKind"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ-X5q3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X563rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X6K3rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X6a3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ-X6q3rEeSuH7f2GGufnw" red="221" green="236" blue="202"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MbASoK3rEeSuH7f2GGufnw" name="IN" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//DirectionKind/IN"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//DirectionKind/IN"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_MbASoa3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbASoq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MbASo63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_MbASpK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MbA5sK3rEeSuH7f2GGufnw" name="OUT" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//DirectionKind/OUT"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//DirectionKind/OUT"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_MbA5sa3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbA5sq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MbA5s63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_MbA5tK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MbA5ta3rEeSuH7f2GGufnw" name="IN_OUT" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//DirectionKind/IN_OUT"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//DirectionKind/IN_OUT"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_MbA5tq3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbA5t63rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MbA5uK3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_MbA5ua3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ--8K3rEeSuH7f2GGufnw" name="ProtocolBehaviourFeature" tooltipText="" outgoingEdges="_VfOyRrkaEeS1iuOpNDUtkg" incomingEdges="_MbNuAK3rEeSuH7f2GGufnw _Mby80K3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ProtocolBehaviourFeature"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ProtocolBehaviourFeature"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MZ--8a3rEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ--8q3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ--863rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ--9K3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MZ--9a3rEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma6MAK3rEeSuH7f2GGufnw" name="kind : ProtocolBehaviourFeatureKind = IN" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//ProtocolBehaviourFeature/kind"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//ProtocolBehaviourFeature/kind"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma6MAa3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma6MAq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma6MA63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma6MBK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MZ_mAK3rEeSuH7f2GGufnw" name="Operation" tooltipText="" outgoingEdges="_MbWQ4K3rEeSuH7f2GGufnw _Mb0yAK3rEeSuH7f2GGufnw _VfPZULkaEeS1iuOpNDUtkg" incomingEdges="_MbL43K3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaANEK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaANEa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaANEq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaANE63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaANFK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaA0IK3rEeSuH7f2GGufnw" name="ProtocolBehaviourFeatureKind" tooltipText="">
+ <target xmi:type="ecore:EEnum" href="common.ecore#//ProtocolBehaviourFeatureKind"/>
+ <semanticElements xmi:type="ecore:EEnum" href="common.ecore#//ProtocolBehaviourFeatureKind"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaA0Ia3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaA0Iq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaA0I63rEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaA0JK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaA0Ja3rEeSuH7f2GGufnw" red="221" green="236" blue="202"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MbBgwK3rEeSuH7f2GGufnw" name="IN" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//ProtocolBehaviourFeatureKind/IN"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//ProtocolBehaviourFeatureKind/IN"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_MbBgwa3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbBgwq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MbBgw63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_MbBgxK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MbBgxa3rEeSuH7f2GGufnw" name="OUT" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//ProtocolBehaviourFeatureKind/OUT"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//ProtocolBehaviourFeatureKind/OUT"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_MbBgxq3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbBgx63rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MbBgyK3rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_MbBgya3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_MbCH0K3rEeSuH7f2GGufnw" name="INOUT" tooltipText="">
+ <target xmi:type="ecore:EEnumLiteral" href="common.ecore#//ProtocolBehaviourFeatureKind/INOUT"/>
+ <semanticElements xmi:type="ecore:EEnumLiteral" href="common.ecore#//ProtocolBehaviourFeatureKind/INOUT"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_MbCH0a3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbCH0q3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MbCH063rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_MbCH1K3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaBbMK3rEeSuH7f2GGufnw" name="StateMachine" tooltipText="" outgoingEdges="_MbW3963rEeSuH7f2GGufnw _sC8J4LCBEeS2zc2JFFVtPw" incomingEdges="_MbNG8K3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StateMachine"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//StateMachine"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaCCQK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaCCQa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaCCQq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaCCQ63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaCCRK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaCpUK3rEeSuH7f2GGufnw" name="SimpleState" tooltipText="" outgoingEdges="_Mb1ZFq3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//SimpleState"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//SimpleState"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaCpUa3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaDQYK3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaDQYa3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaDQYq3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaDQY63rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaDQZK3rEeSuH7f2GGufnw" name="CompositeState" tooltipText="" outgoingEdges="_MbcXh63rEeSuH7f2GGufnw _MbdloK3rEeSuH7f2GGufnw _MbeMtq3rEeSuH7f2GGufnw _Mbfa0K3rEeSuH7f2GGufnw _Mbgo8K3rEeSuH7f2GGufnw _MbhQDK3rEeSuH7f2GGufnw _Mb2AJq3rEeSuH7f2GGufnw _ouqgQLCCEeS2zc2JFFVtPw" incomingEdges="_MbW3963rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CompositeState"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//CompositeState"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaD3cK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaD3ca3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaD3cq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaD3c63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaD3dK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaEegK3rEeSuH7f2GGufnw" name="State" tooltipText="" outgoingEdges="_MbZUMK3rEeSuH7f2GGufnw _MbZ7S63rEeSuH7f2GGufnw _MbbJYK3rEeSuH7f2GGufnw _MbbwcK3rEeSuH7f2GGufnw _Mb3OQK3rEeSuH7f2GGufnw _qj0ggLCBEeS2zc2JFFVtPw" incomingEdges="_Mbgo8K3rEeSuH7f2GGufnw _Mb1ZFq3rEeSuH7f2GGufnw _Mb2AJq3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaEega3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaEegq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaEeg63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaEehK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaFFkK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaFFka3rEeSuH7f2GGufnw" name="Vertex" tooltipText="" outgoingEdges="_MbYGEK3rEeSuH7f2GGufnw _MbYtIK3rEeSuH7f2GGufnw _VfPZV7kaEeS1iuOpNDUtkg" incomingEdges="_MbieIK3rEeSuH7f2GGufnw _MbjFOq3rEeSuH7f2GGufnw _Mb3OQK3rEeSuH7f2GGufnw _Mb31UK3rEeSuH7f2GGufnw _ouqgQLCCEeS2zc2JFFVtPw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Vertex"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Vertex"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaFsoK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaFsoa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaFsoq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaFso63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaFspK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaGTsK3rEeSuH7f2GGufnw" name="Pseudostate" tooltipText="" outgoingEdges="_Mb31UK3rEeSuH7f2GGufnw" incomingEdges="_Mb4cZq3rEeSuH7f2GGufnw _Mb5Ddq3rEeSuH7f2GGufnw _Mb5qhq3rEeSuH7f2GGufnw _Mb64oK3rEeSuH7f2GGufnw _Mb7fsK3rEeSuH7f2GGufnw _Mb8GwK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Pseudostate"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Pseudostate"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaG6wK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaG6wa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaG6wq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaG6w63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaG6xK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaHh0K3rEeSuH7f2GGufnw" name="Transition" tooltipText="" outgoingEdges="_MbieIK3rEeSuH7f2GGufnw _MbjFOq3rEeSuH7f2GGufnw _MbkTUK3rEeSuH7f2GGufnw _MblhcK3rEeSuH7f2GGufnw _MbmvkK3rEeSuH7f2GGufnw _n5tDoLCBEeS2zc2JFFVtPw" incomingEdges="_MbYGEK3rEeSuH7f2GGufnw _MbYtIK3rEeSuH7f2GGufnw _MbhQDK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Transition"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Transition"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaHh0a3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaHh0q3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaHh063rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaHh1K3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaHh1a3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaII4K3rEeSuH7f2GGufnw" name="Trigger" tooltipText="" outgoingEdges="_0uFa8LkaEeS1iuOpNDUtkg" incomingEdges="_MbkTUK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Trigger"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Trigger"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaJXAK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJXAa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJXAq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJXA63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJXBK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaJ-EK3rEeSuH7f2GGufnw" name="Guard" tooltipText="" outgoingEdges="_Mbn9sK3rEeSuH7f2GGufnw _VfQAZrkaEeS1iuOpNDUtkg" incomingEdges="_MblhcK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Guard"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Guard"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaJ-Ea3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJ-Eq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJ-E63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJ-FK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaJ-Fa3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaLMMK3rEeSuH7f2GGufnw" name="ActionChain" tooltipText="" outgoingEdges="_MbokzK3rEeSuH7f2GGufnw _VfQndrkaEeS1iuOpNDUtkg" incomingEdges="_MbmvkK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ActionChain"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ActionChain"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaLMMa3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaLMMq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaLMM63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaLMNK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaLMNa3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaLzQK3rEeSuH7f2GGufnw" name="EntryPoint" tooltipText="" outgoingEdges="_Mb4cZq3rEeSuH7f2GGufnw" incomingEdges="_MbbwcK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//EntryPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//EntryPoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaMaUK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaMaUa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaMaUq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaMaU63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaMaVK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaNBYK3rEeSuH7f2GGufnw" name="ExitPoint" tooltipText="" outgoingEdges="_Mb5Ddq3rEeSuH7f2GGufnw" incomingEdges="_MbbJYK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ExitPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ExitPoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaNocK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaNoca3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaNocq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaNoc63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaNodK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaNoda3rEeSuH7f2GGufnw" name="InitialPoint" tooltipText="" outgoingEdges="_Mb5qhq3rEeSuH7f2GGufnw" incomingEdges="_MbcXh63rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//InitialPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//InitialPoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaOPgK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaOPga3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaOPgq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaOPg63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaOPhK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaO2kK3rEeSuH7f2GGufnw" name="DeepHistory" tooltipText="" outgoingEdges="_Mb64oK3rEeSuH7f2GGufnw" incomingEdges="_MbdloK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//DeepHistory"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//DeepHistory"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaO2ka3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaO2kq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaO2k63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaO2lK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaO2la3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaPdoK3rEeSuH7f2GGufnw" name="JunctionPoint" tooltipText="" outgoingEdges="_Mb7fsK3rEeSuH7f2GGufnw" incomingEdges="_MbeMtq3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//JunctionPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//JunctionPoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaQEsK3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQEsa3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQEsq3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQEs63rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQEtK3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaQrwK3rEeSuH7f2GGufnw" name="ChoicePoint" tooltipText="" outgoingEdges="_Mb8GwK3rEeSuH7f2GGufnw" incomingEdges="_Mbfa0K3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ChoicePoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ChoicePoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaQrwa3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQrwq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQrw63rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQrxK3rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaQrxa3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_MaRS0K3rEeSuH7f2GGufnw" name="ActionCode" tooltipText="" outgoingEdges="_F3mBEM2JEeSBhbbM5x_3mA" incomingEdges="_MbWQ4K3rEeSuH7f2GGufnw _MbZUMK3rEeSuH7f2GGufnw _MbZ7S63rEeSuH7f2GGufnw _Mbn9sK3rEeSuH7f2GGufnw _MbokzK3rEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ActionCode"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ActionCode"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_MaR54K3rEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MaR54a3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_MaR54q3rEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaR5463rEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_MaR55K3rEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Ma8BMK3rEeSuH7f2GGufnw" name="source : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//ActionCode/source"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//ActionCode/source"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Ma8BMa3rEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma8BMq3rEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Ma8BM63rEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Ma8BNK3rEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbFLIK3rEeSuH7f2GGufnw" name="[0..1] redefines" sourceNode="_MZugQK3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//RedefinableElement/redefines"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//RedefinableElement/redefines"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_MbGZQK3rEeSuH7f2GGufnw" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_MbGZQa3rEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_MbGZQq3rEeSuH7f2GGufnw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbGZQ63rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_MbGZRK3rEeSuH7f2GGufnw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbGZRa3rEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbGZRq3rEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_MZwVda3rEeSuH7f2GGufnw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Attribute/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Attribute/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F1tKsM2JEeSBhbbM5x_3mA" description="_F1r8kM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F1tKsc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F1tKss2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1tKs82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F1tKtM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1tKtc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbHnZq3rEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_MZyKpa3rEeSuH7f2GGufnw" targetNode="_MZ3DIK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CapsulePart/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CapsulePart/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F1vm8M2JEeSBhbbM5x_3mA" description="_F1u_4M2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F1vm8c2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F1vm8s2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1vm882JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F1vm9M2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1vm9c2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbI1hq3rEeSuH7f2GGufnw" name="[1..1] returnType" sourceNode="_MZz_0K3rEeSuH7f2GGufnw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/returnType"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/returnType"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F1xcI82JEeSBhbbM5x_3mA" description="_F1xcIM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F1xcJM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F1xcJc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1xcJs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F1xcJ82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1xcKM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbKDoK3rEeSuH7f2GGufnw" name="[0..*] parameters" sourceNode="_MZz_0K3rEeSuH7f2GGufnw" targetNode="_MZ4RQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/parameters"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/parameters"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F1zRU82JEeSBhbbM5x_3mA" description="_F1zRUM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F1zRVM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F1zRVc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1zRVs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F1zRV82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1zRWM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbKqsK3rEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_MZ0m4K3rEeSuH7f2GGufnw" targetNode="_MZ11Ba3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Port/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Port/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F11tkM2JEeSBhbbM5x_3mA" description="_F11GgM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F11tkc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F11tks2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F11tk82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F11tlM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F11tlc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbLRxq3rEeSuH7f2GGufnw" name="[0..*] attributes" sourceNode="_MZ1N8K3rEeSuH7f2GGufnw" targetNode="_MZwVda3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Entity/attributes"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Entity/attributes"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F127s82JEeSBhbbM5x_3mA" description="_F127sM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F127tM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F127tc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F127ts2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F127t82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F127uM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbL43K3rEeSuH7f2GGufnw" name="[0..*] operations" sourceNode="_MZ1N8K3rEeSuH7f2GGufnw" targetNode="_MZ_mAK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Entity/operations"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Entity/operations"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F14w482JEeSBhbbM5x_3mA" description="_F14w4M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F14w5M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F14w5c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F14w5s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F14w582JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F14w6M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbNG8K3rEeSuH7f2GGufnw" name="[0..1] behaviour" sourceNode="_MZ1N8K3rEeSuH7f2GGufnw" targetNode="_MaBbMK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Entity/behaviour"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Entity/behaviour"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F15_A82JEeSBhbbM5x_3mA" description="_F15_AM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F15_BM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F15_Bc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F15_Bs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F15_B82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F15_CM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbNuAK3rEeSuH7f2GGufnw" name="[0..*] protocolBehaviourFeatures" sourceNode="_MZ11Ba3rEeSuH7f2GGufnw" targetNode="_MZ--8K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F170M82JEeSBhbbM5x_3mA" description="_F170MM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F170NM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F170Nc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F170Ns2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F170N82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F170OM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbOVF63rEeSuH7f2GGufnw" name="[0..*] parts" sourceNode="_MZ3DIK3rEeSuH7f2GGufnw" targetNode="_MZyKpa3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Capsule/parts"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Capsule/parts"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F1-QcM2JEeSBhbbM5x_3mA" description="_F19pYM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F1-Qcc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F1-Qcs2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1-Qc82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F1-QdM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F1-Qdc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbO8LK3rEeSuH7f2GGufnw" name="[0..*] ports" sourceNode="_MZ3DIK3rEeSuH7f2GGufnw" targetNode="_MZ0m4K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Capsule/ports"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Capsule/ports"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2AssM2JEeSBhbbM5x_3mA" description="_F2AFoM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Assc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Asss2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Ass82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2AstM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Astc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbPjPK3rEeSuH7f2GGufnw" name="[0..*] connectors" sourceNode="_MZ3DIK3rEeSuH7f2GGufnw" targetNode="_MZ77oK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Capsule/connectors"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Capsule/connectors"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2Ch4M2JEeSBhbbM5x_3mA" description="_F2B60M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Ch4c2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Ch4s2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Ch482JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2Ch5M2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Ch5c2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbQKTK3rEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_MZ4RQK3rEeSuH7f2GGufnw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Parameter/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Parameter/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2DwA82JEeSBhbbM5x_3mA" description="_F2DwAM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2DwBM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2DwBc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2DwBs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2DwB82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2DwCM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbQxXK3rEeSuH7f2GGufnw" name="[0..*] parameters" sourceNode="_MZ5fYK3rEeSuH7f2GGufnw" targetNode="_MZ4RQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Signal/parameters"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Signal/parameters"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2GMQM2JEeSBhbbM5x_3mA" description="_F2FlMM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2GMQc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2GMQs2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2GMQ82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2GMRM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2GMRc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbRYbK3rEeSuH7f2GGufnw" name="[2..2] ends" sourceNode="_MZ77oK3rEeSuH7f2GGufnw" targetNode="_MZ8isK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Connector/ends"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Connector/ends"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2IBcM2JEeSBhbbM5x_3mA" description="_F2HaYM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2IBcc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2IBcs2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2IBc82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2IBdM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2IBdc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbSmgK3rEeSuH7f2GGufnw" name="[1..1] role" sourceNode="_MZ8isK3rEeSuH7f2GGufnw" targetNode="_MZ0m4K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/role"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/role"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2JPk82JEeSBhbbM5x_3mA" description="_F2JPkM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2JPlM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2JPlc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2JPls2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2J2oM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2J2oc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbVCyq3rEeSuH7f2GGufnw" name="[0..*] protocols" sourceNode="_MZ9JwK3rEeSuH7f2GGufnw" targetNode="_MZ11Ba3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/protocols"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/protocols"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2Lr082JEeSBhbbM5x_3mA" description="_F2Lr0M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Lr1M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Lr1c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Lr1s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2Lr182JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Lr2M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbWQ4K3rEeSuH7f2GGufnw" name="[1..1] body" sourceNode="_MZ_mAK3rEeSuH7f2GGufnw" targetNode="_MaRS0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Operation/body"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Operation/body"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2QkU82JEeSBhbbM5x_3mA" description="_F2QkUM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2QkVM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2QkVc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2QkVs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2QkV82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2QkWM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbW3963rEeSuH7f2GGufnw" name="[1..1] top" sourceNode="_MaBbMK3rEeSuH7f2GGufnw" targetNode="_MaDQZK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//StateMachine/top"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//StateMachine/top"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2Ryc82JEeSBhbbM5x_3mA" description="_F2RycM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2RydM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Rydc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Ryds2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2Ryd82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2RyeM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbYGEK3rEeSuH7f2GGufnw" name="[0..*] /incomingTransitions" sourceNode="_MaFFka3rEeSuH7f2GGufnw" targetNode="_MaHh0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Vertex/incomingTransitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Vertex/incomingTransitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2TAkM2JEeSBhbbM5x_3mA" description="_F2SZgM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2TAkc2JEeSBhbbM5x_3mA" red="114" green="159" blue="207"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2TAks2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2TAk82JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2TAlM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2TAlc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbYtIK3rEeSuH7f2GGufnw" name="[0..*] /outgoingTransitions" sourceNode="_MaFFka3rEeSuH7f2GGufnw" targetNode="_MaHh0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Vertex/outgoingTransitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Vertex/outgoingTransitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2Tno82JEeSBhbbM5x_3mA" description="_F2TnoM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2TnpM2JEeSBhbbM5x_3mA" red="114" green="159" blue="207"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Tnpc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Tnps2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2Tnp82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2TnqM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbZUMK3rEeSuH7f2GGufnw" name="[0..1] entryAction" sourceNode="_MaEegK3rEeSuH7f2GGufnw" targetNode="_MaRS0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//State/entryAction"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//State/entryAction"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2Vc082JEeSBhbbM5x_3mA" description="_F2Vc0M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Vc1M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Vc1c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Vc1s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2Vc182JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Vc2M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbZ7S63rEeSuH7f2GGufnw" name="[0..1] exitAction" sourceNode="_MaEegK3rEeSuH7f2GGufnw" targetNode="_MaRS0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//State/exitAction"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//State/exitAction"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2Wq882JEeSBhbbM5x_3mA" description="_F2Wq8M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Wq9M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2Wq9c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Wq9s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2Wq982JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2Wq-M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbbJYK3rEeSuH7f2GGufnw" name="[0..*] exitPoints" sourceNode="_MaEegK3rEeSuH7f2GGufnw" targetNode="_MaNBYK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//State/exitPoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//State/exitPoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2YgI82JEeSBhbbM5x_3mA" description="_F2YgIM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2YgJM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2YgJc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2YgJs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2YgJ82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2YgKM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbbwcK3rEeSuH7f2GGufnw" name="[0..*] entryPoints" sourceNode="_MaEegK3rEeSuH7f2GGufnw" targetNode="_MaLzQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//State/entryPoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//State/entryPoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2ZuQ82JEeSBhbbM5x_3mA" description="_F2ZuQM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2ZuRM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2ZuRc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2ZuRs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2ZuR82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2ZuSM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbcXh63rEeSuH7f2GGufnw" name="[0..1] initial" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaNoda3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/initial"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/initial"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2a8Y82JEeSBhbbM5x_3mA" description="_F2a8YM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2a8ZM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2a8Zc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2a8Zs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2a8Z82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2a8aM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbdloK3rEeSuH7f2GGufnw" name="[0..1] deepHistory" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaO2kK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/deepHistory"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/deepHistory"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2cKg82JEeSBhbbM5x_3mA" description="_F2cKgM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2cKhM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2cKhc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2cKhs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2cKh82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2cKiM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbeMtq3rEeSuH7f2GGufnw" name="[0..*] junctionPoints" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaPdoK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/junctionPoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/junctionPoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2d_sM2JEeSBhbbM5x_3mA" description="_F2dYoM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2d_sc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2d_ss2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2d_s82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2d_tM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2d_tc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mbfa0K3rEeSuH7f2GGufnw" name="[0..*] choicePoints" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaQrwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/choicePoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/choicePoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2fN0M2JEeSBhbbM5x_3mA" description="_F2emwM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2fN0c2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2fN0s2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2fN082JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2fN1M2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2fN1c2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mbgo8K3rEeSuH7f2GGufnw" name="[0..*] substates" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaEegK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/substates"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/substates"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2f0482JEeSBhbbM5x_3mA" description="_F2f04M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2f05M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2f05c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2f05s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2f0582JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2gb8M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbhQDK3rEeSuH7f2GGufnw" name="[0..*] transitions" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaHh0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/transitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/transitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2hDA82JEeSBhbbM5x_3mA" description="_F2hDAM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2hDBM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2hDBc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2hDBs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2hDB82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2hDCM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbieIK3rEeSuH7f2GGufnw" name="[1..1] sourceVertex" sourceNode="_MaHh0K3rEeSuH7f2GGufnw" targetNode="_MaFFka3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/sourceVertex"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/sourceVertex"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2jfQ82JEeSBhbbM5x_3mA" description="_F2jfQM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2jfRM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2jfRc2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2jfRs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2jfR82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2jfSM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbjFOq3rEeSuH7f2GGufnw" name="[1..1] targetVertex" sourceNode="_MaHh0K3rEeSuH7f2GGufnw" targetNode="_MaFFka3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/targetVertex"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/targetVertex"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2ktYM2JEeSBhbbM5x_3mA" description="_F2kGUM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2ktYc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2ktYs2JEeSBhbbM5x_3mA" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2ktY82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2ktZM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2ktZc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbkTUK3rEeSuH7f2GGufnw" name="[0..*] triggers" sourceNode="_MaHh0K3rEeSuH7f2GGufnw" targetNode="_MaII4K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/triggers"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/triggers"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2l7gM2JEeSBhbbM5x_3mA" description="_F2lUcM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2l7gc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2l7gs2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2l7g82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2l7hM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2l7hc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MblhcK3rEeSuH7f2GGufnw" name="[0..1] guard" sourceNode="_MaHh0K3rEeSuH7f2GGufnw" targetNode="_MaJ-EK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/guard"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/guard"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2nJo82JEeSBhbbM5x_3mA" description="_F2nJoM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2nJpM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2nJpc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2nJps2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2nJp82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2nJqM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbmvkK3rEeSuH7f2GGufnw" name="[0..1] actionChain" sourceNode="_MaHh0K3rEeSuH7f2GGufnw" targetNode="_MaLMMK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/actionChain"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/actionChain"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2o-082JEeSBhbbM5x_3mA" description="_F2o-0M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2o-1M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2o-1c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2o-1s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2o-182JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2o-2M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mbn9sK3rEeSuH7f2GGufnw" name="[0..1] body" sourceNode="_MaJ-EK3rEeSuH7f2GGufnw" targetNode="_MaRS0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Guard/body"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Guard/body"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2qM882JEeSBhbbM5x_3mA" description="_F2qM8M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2qM9M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2qM9c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2qM9s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2qM982JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2qM-M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbokzK3rEeSuH7f2GGufnw" name="[0..*] actions" sourceNode="_MaLMMK3rEeSuH7f2GGufnw" targetNode="_MaRS0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//ActionChain/actions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//ActionChain/actions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2rbE82JEeSBhbbM5x_3mA" description="_F2rbEM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2rbFM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2rbFc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2rbFs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2rbF82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2rbGM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbrBBq3rEeSuH7f2GGufnw" sourceNode="_MZvuYK3rEeSuH7f2GGufnw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//PrimitiveType/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//PrimitiveType/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_XkDSIL0qEeSQw4jKJk8vcg" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_XkDSIb0qEeSQw4jKJk8vcg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_XkDSIr0qEeSQw4jKJk8vcg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_XkDSI70qEeSQw4jKJk8vcg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_XkDSJL0qEeSQw4jKJk8vcg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_XkDSJb0qEeSQw4jKJk8vcg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbroFq3rEeSuH7f2GGufnw" sourceNode="_MZwVda3rEeSuH7f2GGufnw" targetNode="_MZ9w0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Attribute/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Attribute/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_JB-GoLxXEeSl6a8pTlra3w" targetArrow="InputClosedArrow" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_JB-GobxXEeSl6a8pTlra3w" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_JB-GorxXEeSl6a8pTlra3w" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JB-Go7xXEeSl6a8pTlra3w"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_JB-GpLxXEeSl6a8pTlra3w" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JB-GpbxXEeSl6a8pTlra3w"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbuEUK3rEeSuH7f2GGufnw" sourceNode="_MZ11Ba3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Protocol"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Protocol/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_MburYK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_MburYa3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_MburYq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MburY63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_MburZK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MburZa3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MburZq3rEeSuH7f2GGufnw" sourceNode="_MZ3DIK3rEeSuH7f2GGufnw" targetNode="_MZ1N8K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Capsule/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Capsule/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_MbvScK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_MbvSca3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_MbvScq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbvSc63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_MbvSdK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_MbvSda3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_MbxHoK3rEeSuH7f2GGufnw" sourceNode="_MZ4RQK3rEeSuH7f2GGufnw" targetNode="_MZ9w0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Parameter/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Parameter/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_MbxusK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mbxusa3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mbxusq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mbxus63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_MbxutK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mbxuta3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mby80K3rEeSuH7f2GGufnw" sourceNode="_MZ5fYK3rEeSuH7f2GGufnw" targetNode="_MZ--8K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Signal"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Signal/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mbzj4K3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mbzj4a3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mbzj4q3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mbzj463rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mbzj5K3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mbzj5a3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb0yAK3rEeSuH7f2GGufnw" sourceNode="_MZ_mAK3rEeSuH7f2GGufnw" targetNode="_MZz_0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Operation/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Operation/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb1ZEK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="manhattan">
+ <customFeatures>routingStyle</customFeatures>
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb1ZEa3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb1ZEq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb1ZE63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb1ZFK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb1ZFa3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb1ZFq3rEeSuH7f2GGufnw" sourceNode="_MaCpUK3rEeSuH7f2GGufnw" targetNode="_MaEegK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//SimpleState"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//SimpleState/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb2AIK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb2AIa3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb2AIq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb2AI63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb2AJK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb2AJa3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb2AJq3rEeSuH7f2GGufnw" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaEegK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CompositeState"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//CompositeState/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb2nMK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb2nMa3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb2nMq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb2nM63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb2nNK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb2nNa3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb3OQK3rEeSuH7f2GGufnw" sourceNode="_MaEegK3rEeSuH7f2GGufnw" targetNode="_MaFFka3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//State/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//State/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb3OQa3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb3OQq3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb3OQ63rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb3ORK3rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb3ORa3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb3ORq3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb31UK3rEeSuH7f2GGufnw" sourceNode="_MaGTsK3rEeSuH7f2GGufnw" targetNode="_MaFFka3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Pseudostate"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Pseudostate/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb4cYK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb4cYa3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb4cYq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb4cY63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb4cZK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb4cZa3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb4cZq3rEeSuH7f2GGufnw" sourceNode="_MaLzQK3rEeSuH7f2GGufnw" targetNode="_MaGTsK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//EntryPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//EntryPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb5DcK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb5Dca3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb5Dcq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb5Dc63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb5DdK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb5Dda3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb5Ddq3rEeSuH7f2GGufnw" sourceNode="_MaNBYK3rEeSuH7f2GGufnw" targetNode="_MaGTsK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ExitPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ExitPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb5qgK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb5qga3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb5qgq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb5qg63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb5qhK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb5qha3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb5qhq3rEeSuH7f2GGufnw" sourceNode="_MaNoda3rEeSuH7f2GGufnw" targetNode="_MaGTsK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//InitialPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//InitialPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb6RkK3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb6Rka3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb6Rkq3rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb6Rk63rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb6RlK3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb6Rla3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb64oK3rEeSuH7f2GGufnw" sourceNode="_MaO2kK3rEeSuH7f2GGufnw" targetNode="_MaGTsK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//DeepHistory"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//DeepHistory/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb64oa3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb64oq3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb64o63rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb64pK3rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb64pa3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb64pq3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb7fsK3rEeSuH7f2GGufnw" sourceNode="_MaPdoK3rEeSuH7f2GGufnw" targetNode="_MaGTsK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//JunctionPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//JunctionPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb7fsa3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb7fsq3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb7fs63rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb7ftK3rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb7fta3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb7ftq3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Mb8GwK3rEeSuH7f2GGufnw" sourceNode="_MaQrwK3rEeSuH7f2GGufnw" targetNode="_MaGTsK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ChoicePoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ChoicePoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Mb8Gwa3rEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb8Gwq3rEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Mb8Gw63rEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb8GxK3rEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Mb8Gxa3rEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Mb8Gxq3rEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_CElHALCAEeS2zc2JFFVtPw" sourceNode="_MZ1N8K3rEeSuH7f2GGufnw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Entity"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Entity/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_CEmVILCAEeS2zc2JFFVtPw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_CEmVIbCAEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_CEmVIrCAEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_CEmVI7CAEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_CEmVJLCAEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_CEmVJbCAEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_HzYAYLCBEeS2zc2JFFVtPw" name="[0..*] entities" sourceNode="_MZ9JwK3rEeSuH7f2GGufnw" targetNode="_MZ1N8K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/entities"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/entities"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2M5882JEeSBhbbM5x_3mA" description="_F2M58M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2M59M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2M59c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2M59s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2M5982JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2M5-M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Yr4OkLCBEeS2zc2JFFVtPw" sourceNode="_MZ3DIK3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Capsule/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Capsule/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Yr41oLCBEeS2zc2JFFVtPw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Yr41obCBEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Yr41orCBEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Yr41o7CBEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Yr41pLCBEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Yr41pbCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_lGeuELCBEeS2zc2JFFVtPw" sourceNode="_MZyKpa3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CapsulePart"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//CapsulePart/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//CapsulePart/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_lGfVILCBEeS2zc2JFFVtPw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_lGfVIbCBEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_lGfVIrCBEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_lGfVI7CBEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_lGfVJLCBEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_lGfVJbCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_mC1ooLCBEeS2zc2JFFVtPw" sourceNode="_MZ0m4K3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Port"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Port/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Port/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_mC1oobCBEeS2zc2JFFVtPw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_mC1oorCBEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_mC1oo7CBEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_mC1opLCBEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_mC1opbCBEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_mC1oprCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_n5tDoLCBEeS2zc2JFFVtPw" sourceNode="_MaHh0K3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Transition"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Transition/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_n5tqsLCBEeS2zc2JFFVtPw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_n5tqsbCBEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_n5tqsrCBEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_n5tqs7CBEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_n5tqtLCBEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_n5tqtbCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_qj0ggLCBEeS2zc2JFFVtPw" sourceNode="_MaEegK3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//State/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//State/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_qj1HkLCBEeS2zc2JFFVtPw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_qj1HkbCBEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_qj1HkrCBEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_qj1Hk7CBEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_qj1HlLCBEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_qj1HlbCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_sC8J4LCBEeS2zc2JFFVtPw" sourceNode="_MaBbMK3rEeSuH7f2GGufnw" targetNode="_MZugQK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StateMachine"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//StateMachine/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_sC8w8LCBEeS2zc2JFFVtPw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_sC8w8bCBEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_sC8w8rCBEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_sC8w87CBEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_sC8w9LCBEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_sC8w9bCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_ouqgQLCCEeS2zc2JFFVtPw" name="[0..*] /vertices" sourceNode="_MaDQZK3rEeSuH7f2GGufnw" targetNode="_MaFFka3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/vertices"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/vertices"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2iRI82JEeSBhbbM5x_3mA" description="_F2iRIM2JEeSBhbbM5x_3mA" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2iRJM2JEeSBhbbM5x_3mA" red="114" green="159" blue="207"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2iRJc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2iRJs2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2iRJ82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2iRKM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_6Eh4ELhSEeSH9PQiHQ6eWw" name="StructType" tooltipText="" outgoingEdges="_9cnOMLhSEeSH9PQiHQ6eWw _HXBB0LhTEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructType"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//StructType"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_6EifILhSEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_6EifIbhSEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_6EifIrhSEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_6EifI7hSEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_6EifJLhSEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_7WtRoLhSEeSH9PQiHQ6eWw" name="StructMember" tooltipText="" outgoingEdges="_DdgZoLhTEeSH9PQiHQ6eWw _0uFa97kaEeS1iuOpNDUtkg" incomingEdges="_9cnOMLhSEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructMember"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//StructMember"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_7Wt4sLhSEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_7Wt4sbhSEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_7Wt4srhSEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_7Wt4s7hSEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_7Wt4tLhSEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_9cnOMLhSEeSH9PQiHQ6eWw" name="[0..*] structMembers" sourceNode="_6Eh4ELhSEeSH9PQiHQ6eWw" targetNode="_7WtRoLhSEeSH9PQiHQ6eWw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//StructType/structMembers"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//StructType/structMembers"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2spM82JEeSBhbbM5x_3mA" description="_F2spMM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2spNM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2spNc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2spNs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2spN82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2spOM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DdgZoLhTEeSH9PQiHQ6eWw" name="[0..1] type" sourceNode="_7WtRoLhSEeSH9PQiHQ6eWw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//StructMember/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//StructMember/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_DdhAsLhTEeSH9PQiHQ6eWw" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_DdhAsbhTEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_DdhAsrhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DdhAs7hTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_DdhAtLhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DdhAtbhTEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_HXBB0LhTEeSH9PQiHQ6eWw" sourceNode="_6Eh4ELhSEeSH9PQiHQ6eWw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructType"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//StructType/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_HXBo4LhTEeSH9PQiHQ6eWw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_HXBo4bhTEeSH9PQiHQ6eWw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_HXBo4rhTEeSH9PQiHQ6eWw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_HXBo47hTEeSH9PQiHQ6eWw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_HXBo5LhTEeSH9PQiHQ6eWw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_HXBo5bhTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_VXyN4LhTEeSH9PQiHQ6eWw" name="TypeDefinition" tooltipText="" outgoingEdges="_VYSkMLhTEeSH9PQiHQ6eWw _0uGCBrkaEeS1iuOpNDUtkg" incomingEdges="_VYOSwLhTEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//TypeDefinition"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//TypeDefinition"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_VXy08LhTEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VXy08bhTEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_VXy08rhTEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_VXy087hTEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_VXy09LhTEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VYOSwLhTEeSH9PQiHQ6eWw" name="[0..*] typedefinitions" sourceNode="_MZ9JwK3rEeSuH7f2GGufnw" targetNode="_VXyN4LhTEeSH9PQiHQ6eWw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/typedefinitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/typedefinitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2OIE82JEeSBhbbM5x_3mA" description="_F2OIEM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2OIFM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2OIFc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2OIFs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2OIF82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2OIGM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VYSkMLhTEeSH9PQiHQ6eWw" name="[0..1] type" sourceNode="_VXyN4LhTEeSH9PQiHQ6eWw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//TypeDefinition/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//TypeDefinition/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VYTLQLhTEeSH9PQiHQ6eWw" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VYTLQbhTEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VYTLQrhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VYTLQ7hTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_VYTLRLhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VYTLRbhTEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Q3BGgLhVEeSH9PQiHQ6eWw" name="Model" tooltipText="" outgoingEdges="_UCXoMLhVEeSH9PQiHQ6eWw _X9gBALhVEeSH9PQiHQ6eWw _eGpJgLhVEeSH9PQiHQ6eWw _VfROgLkaEeS1iuOpNDUtkg _TA7dUL0LEeSl6a8pTlra3w" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Model"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Model"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Q3BtkLhVEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Q3BtkbhVEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Q3BtkrhVEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Q3Btk7hVEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Q3BtlLhVEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_UCXoMLhVEeSH9PQiHQ6eWw" name="[0..*] localScopeTemporaryTypes" sourceNode="_Q3BGgLhVEeSH9PQiHQ6eWw" targetNode="_MZzYwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/localScopeTemporaryTypes"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/localScopeTemporaryTypes"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2w6o82JEeSBhbbM5x_3mA" description="_F2w6oM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2w6pM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2w6pc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2w6ps2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2w6p82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2w6qM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_X9gBALhVEeSH9PQiHQ6eWw" name="[0..*] rootPackages" sourceNode="_Q3BGgLhVEeSH9PQiHQ6eWw" targetNode="_MZ9JwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/rootPackages"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/rootPackages"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2yIw82JEeSBhbbM5x_3mA" description="_F2yIwM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2yIxM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2yIxc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2yIxs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2yIx82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2yIyM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_eGpJgLhVEeSH9PQiHQ6eWw" name="[0..*] topEntities" sourceNode="_Q3BGgLhVEeSH9PQiHQ6eWw" targetNode="_MZ1N8K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/topEntities"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/topEntities"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F2zW482JEeSBhbbM5x_3mA" description="_F2zW4M2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F2zW5M2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F2zW5c2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2zW5s2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F2zW582JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F2zW6M2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_3r-sQLkWEeSYMdh17YlJbg" name="NamedElement" tooltipText="" outgoingEdges="_fcSNoMNUEeS2b7b-DU5jjw" incomingEdges="_VfLu8LkaEeS1iuOpNDUtkg _VfM9ELkaEeS1iuOpNDUtkg _VfNkILkaEeS1iuOpNDUtkg _VfOLMLkaEeS1iuOpNDUtkg _VfOLN7kaEeS1iuOpNDUtkg _VfOyRrkaEeS1iuOpNDUtkg _VfPZULkaEeS1iuOpNDUtkg _VfPZV7kaEeS1iuOpNDUtkg _VfQAZrkaEeS1iuOpNDUtkg _VfQndrkaEeS1iuOpNDUtkg _VfROgLkaEeS1iuOpNDUtkg _0uEz4LkaEeS1iuOpNDUtkg _0uFa8LkaEeS1iuOpNDUtkg _0uFa97kaEeS1iuOpNDUtkg _0uGCBrkaEeS1iuOpNDUtkg _aRE5EL0qEeSQw4jKJk8vcg _APhdUMGsEeS6WJHyXZkBTg _APiresGsEeS6WJHyXZkBTg _F3mBEM2JEeSBhbbM5x_3mA" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//NamedElement"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//NamedElement"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_D47xULkXEeSYMdh17YlJbg" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_D47xUbkXEeSYMdh17YlJbg"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_D47xUrkXEeSYMdh17YlJbg" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_D47xU7kXEeSYMdh17YlJbg" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_D47xVLkXEeSYMdh17YlJbg" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_8MKS4LkWEeSYMdh17YlJbg" name="name : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//NamedElement/name"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//NamedElement/name"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_90cfULkWEeSYMdh17YlJbg" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_90cfUbkWEeSYMdh17YlJbg"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_90cfUrkWEeSYMdh17YlJbg"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_90cfU7kWEeSYMdh17YlJbg"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Cdef8LkXEeSYMdh17YlJbg" name="description : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//NamedElement/description"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//NamedElement/description"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_D5E7QLkXEeSYMdh17YlJbg" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_D5E7QbkXEeSYMdh17YlJbg"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_D5E7QrkXEeSYMdh17YlJbg"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_D5E7Q7kXEeSYMdh17YlJbg"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_J0nsoLkXEeSYMdh17YlJbg" name="[0..1] partWithPort" sourceNode="_MZ8isK3rEeSuH7f2GGufnw" targetNode="_MZyKpa3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/partWithPort"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/partWithPort"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_J0oTsLkXEeSYMdh17YlJbg" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_J0oTsbkXEeSYMdh17YlJbg"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_J0oTsrkXEeSYMdh17YlJbg" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_J0oTs7kXEeSYMdh17YlJbg"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_J0oTtLkXEeSYMdh17YlJbg" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_J0oTtbkXEeSYMdh17YlJbg" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfLu8LkaEeS1iuOpNDUtkg" sourceNode="_MZugQK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//RedefinableElement"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//RedefinableElement/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfMWALkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfMWAbkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfMWArkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfMWA7kaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfMWBLkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfMWBbkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfM9ELkaEeS1iuOpNDUtkg" sourceNode="_MZwVda3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Attribute/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Attribute/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_JB_UwLxXEeSl6a8pTlra3w" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_JB_UwbxXEeSl6a8pTlra3w" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_JB_UwrxXEeSl6a8pTlra3w" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JB_Uw7xXEeSl6a8pTlra3w"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_JB_UxLxXEeSl6a8pTlra3w" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JB_UxbxXEeSl6a8pTlra3w"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfNkILkaEeS1iuOpNDUtkg" sourceNode="_MZ4RQK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Parameter/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Parameter/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfNkIbkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfNkIrkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfNkI7kaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfNkJLkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfNkJbkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfNkJrkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfOLMLkaEeS1iuOpNDUtkg" sourceNode="_MZ77oK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Connector"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Connector/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfOLMbkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOLMrkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfOLM7kaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOLNLkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfOLNbkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOLNrkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfOLN7kaEeS1iuOpNDUtkg" sourceNode="_MZ9JwK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Package"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Package/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfOyQLkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOyQbkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfOyQrkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOyQ7kaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfOyRLkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOyRbkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfOyRrkaEeS1iuOpNDUtkg" sourceNode="_MZ--8K3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ProtocolBehaviourFeature"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ProtocolBehaviourFeature/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfOyR7kaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOySLkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfOySbkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOySrkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfOyS7kaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfOyTLkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfPZULkaEeS1iuOpNDUtkg" sourceNode="_MZ_mAK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Operation/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Operation/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfPZUbkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfPZUrkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfPZU7kaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfPZVLkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfPZVbkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfPZVrkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfPZV7kaEeS1iuOpNDUtkg" sourceNode="_MaFFka3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Vertex"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Vertex/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfQAYLkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQAYbkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfQAYrkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQAY7kaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfQAZLkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQAZbkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfQAZrkaEeS1iuOpNDUtkg" sourceNode="_MaJ-EK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Guard"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Guard/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfQncLkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQncbkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfQncrkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQnc7kaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfQndLkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQndbkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfQndrkaEeS1iuOpNDUtkg" sourceNode="_MaLMMK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ActionChain"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ActionChain/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfQnd7kaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQneLkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfQnebkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQnerkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfQne7kaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfQnfLkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VfROgLkaEeS1iuOpNDUtkg" sourceNode="_Q3BGgLhVEeSH9PQiHQ6eWw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Model"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Model/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VfROgbkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VfROgrkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_VfROg7kaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfROhLkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VfROhbkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VfROhrkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_0uEz4LkaEeS1iuOpNDUtkg" sourceNode="_MZzYwK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Type"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Type/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_0uEz4bkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_0uEz4rkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_0uEz47kaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uEz5LkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_0uEz5bkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uEz5rkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_0uFa8LkaEeS1iuOpNDUtkg" sourceNode="_MaII4K3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Trigger"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Trigger/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_0uFa8bkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_0uFa8rkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_0uFa87kaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uFa9LkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_0uFa9bkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uFa9rkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_0uFa97kaEeS1iuOpNDUtkg" sourceNode="_7WtRoLhSEeSH9PQiHQ6eWw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructMember"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//StructMember/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_0uGCALkaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_0uGCAbkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_0uGCArkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uGCA7kaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_0uGCBLkaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uGCBbkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_0uGCBrkaEeS1iuOpNDUtkg" sourceNode="_VXyN4LhTEeSH9PQiHQ6eWw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//TypeDefinition"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//TypeDefinition/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_0uGCB7kaEeS1iuOpNDUtkg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_0uGCCLkaEeS1iuOpNDUtkg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_0uGCCbkaEeS1iuOpNDUtkg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uGCCrkaEeS1iuOpNDUtkg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_0uGCC7kaEeS1iuOpNDUtkg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_0uGCDLkaEeS1iuOpNDUtkg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_TA7dUL0LEeSl6a8pTlra3w" name="[0..*] topProtocols" sourceNode="_Q3BGgLhVEeSH9PQiHQ6eWw" targetNode="_MZ11Ba3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/topProtocols"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/topProtocols"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F21ME82JEeSBhbbM5x_3mA" description="_F21MEM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F21MFM2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F21MFc2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F21MFs2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F21MF82JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F21MGM2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_aRE5EL0qEeSQw4jKJk8vcg" sourceNode="_MZvuYK3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//PrimitiveType/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//PrimitiveType/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_aRE5Eb0qEeSQw4jKJk8vcg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_aRE5Er0qEeSQw4jKJk8vcg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_aRE5E70qEeSQw4jKJk8vcg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_aRE5FL0qEeSQw4jKJk8vcg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_aRE5Fb0qEeSQw4jKJk8vcg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_aRE5Fr0qEeSQw4jKJk8vcg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_ANdn0MGsEeS6WJHyXZkBTg" name="Annotation" tooltipText="" outgoingEdges="_APhdUMGsEeS6WJHyXZkBTg _E_yuYMGsEeS6WJHyXZkBTg" incomingEdges="_fcSNoMNUEeS2b7b-DU5jjw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Annotation"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Annotation"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_E-oQwMGsEeS6WJHyXZkBTg" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_E-oQwcGsEeS6WJHyXZkBTg"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_E-oQwsGsEeS6WJHyXZkBTg"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_E-oQw8GsEeS6WJHyXZkBTg" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_E-oQxMGsEeS6WJHyXZkBTg" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_ANhSMMGsEeS6WJHyXZkBTg" name="AnnotationParameter" tooltipText="" outgoingEdges="_APiresGsEeS6WJHyXZkBTg" incomingEdges="_E_yuYMGsEeS6WJHyXZkBTg" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//AnnotationParameter"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//AnnotationParameter"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_ANh5QMGsEeS6WJHyXZkBTg" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_ANh5QcGsEeS6WJHyXZkBTg"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_ANh5QsGsEeS6WJHyXZkBTg"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_ANh5Q8GsEeS6WJHyXZkBTg" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_ANh5RMGsEeS6WJHyXZkBTg" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_AOhXwMGsEeS6WJHyXZkBTg" name="value : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//AnnotationParameter/value"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//AnnotationParameter/value"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_AOh-0MGsEeS6WJHyXZkBTg" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AOh-0cGsEeS6WJHyXZkBTg"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_AOh-0sGsEeS6WJHyXZkBTg"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_AOh-08GsEeS6WJHyXZkBTg"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_APhdUMGsEeS6WJHyXZkBTg" sourceNode="_ANdn0MGsEeS6WJHyXZkBTg" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Annotation"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Annotation/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_FASdoMGsEeS6WJHyXZkBTg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_FASdocGsEeS6WJHyXZkBTg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_FASdosGsEeS6WJHyXZkBTg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_FASdo8GsEeS6WJHyXZkBTg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_FASdpMGsEeS6WJHyXZkBTg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_FASdpcGsEeS6WJHyXZkBTg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_APiresGsEeS6WJHyXZkBTg" sourceNode="_ANhSMMGsEeS6WJHyXZkBTg" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//AnnotationParameter"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//AnnotationParameter/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_APjSgMGsEeS6WJHyXZkBTg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_APjSgcGsEeS6WJHyXZkBTg" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_APjSgsGsEeS6WJHyXZkBTg" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_APjSg8GsEeS6WJHyXZkBTg"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_APjShMGsEeS6WJHyXZkBTg" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_APjShcGsEeS6WJHyXZkBTg"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_E_yuYMGsEeS6WJHyXZkBTg" name="[0..*] parameters" sourceNode="_ANdn0MGsEeS6WJHyXZkBTg" targetNode="_ANhSMMGsEeS6WJHyXZkBTg">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Annotation/parameters"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Annotation/parameters"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F23BQM2JEeSBhbbM5x_3mA" description="_F22aMM2JEeSBhbbM5x_3mA" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F23BQc2JEeSBhbbM5x_3mA"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F23BQs2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F23BQ82JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_F23BRM2JEeSBhbbM5x_3mA" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F23BRc2JEeSBhbbM5x_3mA" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_fcSNoMNUEeS2b7b-DU5jjw" name="[0..*] annotations" sourceNode="_3r-sQLkWEeSYMdh17YlJbg" targetNode="_ANdn0MGsEeS6WJHyXZkBTg">
+ <target xmi:type="ecore:EReference" href="common.ecore#//NamedElement/annotations"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//NamedElement/annotations"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_fcUC0MNUEeS2b7b-DU5jjw" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_fcUC0cNUEeS2b7b-DU5jjw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_fcUC0sNUEeS2b7b-DU5jjw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_fcUC08NUEeS2b7b-DU5jjw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_fcUC1MNUEeS2b7b-DU5jjw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_fcUC1cNUEeS2b7b-DU5jjw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_F3mBEM2JEeSBhbbM5x_3mA" sourceNode="_MaRS0K3rEeSuH7f2GGufnw" targetNode="_3r-sQLkWEeSYMdh17YlJbg">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ActionCode"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ActionCode/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_F3n2QM2JEeSBhbbM5x_3mA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_F3n2Qc2JEeSBhbbM5x_3mA" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_F3n2Qs2JEeSBhbbM5x_3mA" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F3n2Q82JEeSBhbbM5x_3mA"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_F3n2RM2JEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_F3n2Rc2JEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4fPN8M2KEeSBhbbM5x_3mA" sourceNode="_MZ0m4K3rEeSuH7f2GGufnw" targetNode="_MZ9w0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Port"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Port/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Port/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4fP1AM2KEeSBhbbM5x_3mA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_4fP1Ac2KEeSBhbbM5x_3mA" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_4fP1As2KEeSBhbbM5x_3mA" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_4fP1A82KEeSBhbbM5x_3mA"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4fP1BM2KEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_4fP1Bc2KEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_9DxJEM2KEeSBhbbM5x_3mA" sourceNode="_MZyKpa3rEeSuH7f2GGufnw" targetNode="_MZ9w0K3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CapsulePart"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//CapsulePart/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//CapsulePart/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_9DxwIM2KEeSBhbbM5x_3mA" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_9DxwIc2KEeSBhbbM5x_3mA" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_9DxwIs2KEeSBhbbM5x_3mA" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_9DxwI82KEeSBhbbM5x_3mA"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_9DxwJM2KEeSBhbbM5x_3mA" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_9DxwJc2KEeSBhbbM5x_3mA"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_RCqaoNyYEeSavKYvIj4uEg" name="[0..*] packages" sourceNode="_MZ9JwK3rEeSuH7f2GGufnw" targetNode="_MZ9JwK3rEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/packages"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/packages"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_RCsP0NyYEeSavKYvIj4uEg" description="_RCrowdyYEeSavKYvIj4uEg" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_RCsP0dyYEeSavKYvIj4uEg"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_RCsP0tyYEeSavKYvIj4uEg" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_RCsP09yYEeSavKYvIj4uEg"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_RCsP1NyYEeSavKYvIj4uEg" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_RCsP1dyYEeSavKYvIj4uEg" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="__ADita3lEeSuH7f2GGufnw"/>
+ <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+ <target xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </ownedRepresentations>
+ <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_gEpg0K3tEeSuH7f2GGufnw" name="xtUMLrt Common (State machines)">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_gEqH4K3tEeSuH7f2GGufnw" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="_gEqH4a3tEeSuH7f2GGufnw" type="Sirius" element="_gEpg0K3tEeSuH7f2GGufnw" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_lirPwK3tEeSuH7f2GGufnw" type="2003" element="_lilJIK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_lir20K3tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_lir20a3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_lir20q3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_lir2063tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_lirPwa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lirPwq3tEeSuH7f2GGufnw" x="117" y="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_myU5wK3tEeSuH7f2GGufnw" type="2003" element="_myQBQK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_myU5w63tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_myVg0K3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_myVg0a3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_myVg0q3tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_myU5wa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_myU5wq3tEeSuH7f2GGufnw" x="396" y="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9K8QK3tEeSuH7f2GGufnw" type="2003" element="_n9BLQK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_n9LjUK3tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_n9LjUa3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_n9LjUq3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_n9LjU63tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_n9K8Qa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9K8Qq3tEeSuH7f2GGufnw" x="801" y="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_rfcJIK3tEeSuH7f2GGufnw" type="2003" element="_rfUNUK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_rfcwMK3tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_rfcwMa3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_rfcwMq3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_rfcwM63tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_rfcJIa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rfcJIq3tEeSuH7f2GGufnw" x="675" y="252"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_s-bPoK3tEeSuH7f2GGufnw" type="2003" element="_s-SFsK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_s-b2sK3tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_s-b2sa3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_s-b2sq3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_s-b2s63tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_s-bPoa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-bPoq3tEeSuH7f2GGufnw" x="545" y="444"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQbqEK3tEeSuH7f2GGufnw" type="2003" element="_uQQq8K3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_uQbqE63tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_uQbqFK3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uQbqFa3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uQbqFq3tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_uQbqEa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQbqEq3tEeSuH7f2GGufnw" x="839" y="453"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_8VQ2wK3tEeSuH7f2GGufnw" type="2003" element="_8VF3oK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_8VRd0K3tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_8VRd0a3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_8VRd0q3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_8VRd063tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_8VQ2wa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8VQ2wq3tEeSuH7f2GGufnw" x="1738" y="261"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Y7XoK3tEeSuH7f2GGufnw" type="2003" element="_-YtVMK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_-Y7-sK3tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_-Y7-sa3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_-Y7-sq3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_-Y7-s63tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_-Y7Xoa3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y7Xoq3tEeSuH7f2GGufnw" x="1294" y="462"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__Jl_kK3tEeSuH7f2GGufnw" type="2003" element="__JZLQK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="__Jl_k63tEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="__JmmoK3tEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="__Jmmoa3tEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="__Jmmoq3tEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="__Jl_ka3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Jl_kq3tEeSuH7f2GGufnw" x="1486" y="468"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AJJYEK3uEeSuH7f2GGufnw" type="2003" element="_AI45YK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_AJJ_IK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_AJJ_Ia3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_AJJ_Iq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_AJJ_I63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_AJJYEa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJJYEq3uEeSuH7f2GGufnw" x="1635" y="468"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlN2UK3uEeSuH7f2GGufnw" type="2003" element="_Dk7icK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlN2U63uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_DlN2VK3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DlN2Va3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DlN2Vq3uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_DlN2Ua3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlN2Uq3uEeSuH7f2GGufnw" x="1791" y="468"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlN2V63uEeSuH7f2GGufnw" type="2003" element="_Dk8wkK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlOdYK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_DlOdYa3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DlOdYq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DlOdY63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_DlN2WK3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlN2Wa3uEeSuH7f2GGufnw" x="1926" y="468"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlOdZK3uEeSuH7f2GGufnw" type="2003" element="_Dk9XoK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlOdZ63uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_DlOdaK3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DlOdaa3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DlOdaq3uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_DlOdZa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlOdZq3uEeSuH7f2GGufnw" x="2079" y="468"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_X8KhUK3uEeSuH7f2GGufnw" type="2003" element="_X74NcK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_X8LIYK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_X8LIYa3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_X8LIYq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_X8LIY63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_X8KhUa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X8KhUq3uEeSuH7f2GGufnw" x="252" y="739"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_YZldIK3uEeSuH7f2GGufnw" type="2003" element="_YZTwUK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_YZmEMK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_YZmEMa3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_YZmEMq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_YZmEM63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_YZldIa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YZldIq3uEeSuH7f2GGufnw" x="396" y="738"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Y_lGIK3uEeSuH7f2GGufnw" type="2003" element="_Y_HzIK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Y_ltMK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Y_ltMa3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Y_ltMq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Y_ltM63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Y_lGIa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Y_lGIq3uEeSuH7f2GGufnw" x="545" y="738"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_gEqH4q3tEeSuH7f2GGufnw"/>
+ <edges xmi:type="notation:Edge" xmi:id="_n9MKYK3tEeSuH7f2GGufnw" type="4001" element="_n9Gq0K3tEeSuH7f2GGufnw" source="_myU5wK3tEeSuH7f2GGufnw" target="_n9K8QK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_n9MKZK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9MKZa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9MKZq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9MKZ63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9MxcK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9Mxca3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_n9MKYa3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_n9MKYq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n9MKY63tEeSuH7f2GGufnw" points="[59, -30, -346, -30]$[291, -30, -114, -30]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9Mxcq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9Mxc63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_n9MxdK3tEeSuH7f2GGufnw" type="4001" element="_n9IgCq3tEeSuH7f2GGufnw" source="_myU5wK3tEeSuH7f2GGufnw" target="_n9K8QK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_n9NYgK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9NYga3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9NYgq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9NYg63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9NYhK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9NYha3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_n9Mxda3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_n9Mxdq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n9Mxd63tEeSuH7f2GGufnw" points="[59, -12, -346, -12]$[291, -12, -114, -12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9NYhq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9NYh63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_n9NYiK3tEeSuH7f2GGufnw" type="4001" element="_n9JuIK3tEeSuH7f2GGufnw" source="_n9K8QK3tEeSuH7f2GGufnw" target="_myU5wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_n9N_kK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9N_ka3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9N_kq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9N_k63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9N_lK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9N_la3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_n9NYia3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_n9NYiq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n9NYi63tEeSuH7f2GGufnw" points="[-114, 1, 291, 1]$[-346, 1, 59, 1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9N_lq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9N_l63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_n9OmoK3tEeSuH7f2GGufnw" type="4001" element="_n9JuJ63tEeSuH7f2GGufnw" source="_n9K8QK3tEeSuH7f2GGufnw" target="_myU5wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_n9OmpK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9Ompa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9Ompq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9Omp63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_n9OmqK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_n9Omqa3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_n9Omoa3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_n9Omoq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_n9Omo63tEeSuH7f2GGufnw" points="[-114, 24, 291, 24]$[-346, 24, 59, 24]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9PNsK3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_n9PNsa3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_rfcwNK3tEeSuH7f2GGufnw" type="4001" element="_rfa7AK3tEeSuH7f2GGufnw" source="_rfcJIK3tEeSuH7f2GGufnw" target="_n9K8QK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_rfcwOK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rfcwOa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_rfdXQK3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rfdXQa3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_rfdXQq3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rfdXQ63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_rfcwNa3tEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_rfcwNq3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rfcwN63tEeSuH7f2GGufnw" points="[0, -49, -126, 131]$[0, -94, -126, 86]$[139, -94, 13, 86]$[139, -131, 13, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rfdXRK3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rfdXRa3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_s-cdwK3tEeSuH7f2GGufnw" type="4001" element="_s-aBgK3tEeSuH7f2GGufnw" source="_s-bPoK3tEeSuH7f2GGufnw" target="_rfcJIK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_s-cdxK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-cdxa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_s-cdxq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-cdx63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_s-cdyK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_s-cdya3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_s-cdwa3tEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_s-cdwq3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s-cdw63tEeSuH7f2GGufnw" points="[545, 444, 545, 444]$[621, 252, 621, 252]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s-cdyq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s-dE0K3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_uQcRIK3tEeSuH7f2GGufnw" type="4001" element="_uQX_sK3tEeSuH7f2GGufnw" source="_lirPwK3tEeSuH7f2GGufnw" target="_uQbqEK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_uQcRJK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQcRJa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQcRJq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQcRJ63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQc4MK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQc4Ma3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_uQcRIa3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_uQcRIq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uQcRI63tEeSuH7f2GGufnw" points="[-5, 49, -727, -332]$[-5, 464, -727, 83]$[688, 464, -34, 83]$[688, 430, -34, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQc4Mq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQc4M63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_uQc4NK3tEeSuH7f2GGufnw" type="4001" element="_uQYmzK3tEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_rfcJIK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_uQc4OK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQc4Oa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQc4Oq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQc4O63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQdfQK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQdfQa3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_uQc4Na3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_uQc4Nq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uQc4N63tEeSuH7f2GGufnw" points="[59, -25, 223, 176]$[92, -25, 256, 176]$[92, -178, 256, 23]$[-105, -178, 59, 23]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQdfQq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQdfQ63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_uQdfRK3tEeSuH7f2GGufnw" type="4001" element="_uQZN3K3tEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_myU5wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_uQeGUK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQeGUa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQeGUq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQeGU63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQeGVK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQeGVa3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_uQdfRa3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_uQdfRq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uQdfR63tEeSuH7f2GGufnw" points="[-3, -1, 409, 332]$[-3, -49, 409, 284]$[-369, -49, 43, 284]$[-369, -284, 43, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQeGVq3tEeSuH7f2GGufnw" id="(0.24166666666666667,0.02)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQeGV63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_uQeGWK3tEeSuH7f2GGufnw" type="4001" element="_uQab8K3tEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_rfcJIK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_uQetYK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQetYa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQetYq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQetY63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_uQetZK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQetZa3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_uQeGWa3tEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_uQeGWq3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uQeGW63tEeSuH7f2GGufnw" points="[0, -49, 164, 152]$[0, -115, 164, 86]$[-165, -115, -1, 86]$[-165, -152, -1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQfUcK3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uQfUca3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_8VSE4K3tEeSuH7f2GGufnw" type="4001" element="_8VPooK3tEeSuH7f2GGufnw" source="_8VQ2wK3tEeSuH7f2GGufnw" target="_n9K8QK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_8VSE5K3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8VSE5a3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_8VSE5q3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8VSE563tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_8VSE6K3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_8VSE6a3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_8VSE4a3tEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_8VSE4q3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_8VSE463tEeSuH7f2GGufnw" points="[0, -49, 992, 141]$[0, -103, 992, 87]$[-942, -103, 50, 87]$[-942, -141, 50, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_8VSE6q3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_8VSE663tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_-Y8lwK3tEeSuH7f2GGufnw" type="4001" element="_-Y3GMK3tEeSuH7f2GGufnw" source="_rfcJIK3tEeSuH7f2GGufnw" target="_-Y7XoK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_-Y9M0K3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y9M0a3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Y9M0q3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y9M063tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Y9M1K3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y9M1a3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_-Y8lwa3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_-Y8lwq3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-Y8lw63tEeSuH7f2GGufnw" points="[5, -4, -614, -214]$[580, -4, -39, -214]$[580, 161, -39, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-Y9z4K3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-Y9z4a3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_-Y9z4q3tEeSuH7f2GGufnw" type="4001" element="_-Y5icK3tEeSuH7f2GGufnw" source="_-Y7XoK3tEeSuH7f2GGufnw" target="_8VQ2wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_-Y9z5q3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y9z563tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Y9z6K3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y9z6a3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_-Y-a8K3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-Y-a8a3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_-Y9z463tEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_-Y9z5K3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-Y9z5a3tEeSuH7f2GGufnw" points="[1294, 462, 1294, 462]$[1503, 261, 1503, 261]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-Y-a8q3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-Y-a863tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="__Jmmo63tEeSuH7f2GGufnw" type="4001" element="__JiVMK3tEeSuH7f2GGufnw" source="_rfcJIK3tEeSuH7f2GGufnw" target="__Jl_kK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="__JnNsK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__JnNsa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__JnNsq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__JnNs63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__JnNtK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__JnNta3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="__JmmpK3tEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="__Jmmpa3tEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__Jmmpq3tEeSuH7f2GGufnw" points="[5, -31, -806, -247]$[778, -31, -33, -247]$[778, 167, -33, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__JnNtq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__JnNt63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="__JnNuK3tEeSuH7f2GGufnw" type="4001" element="__JkKYK3tEeSuH7f2GGufnw" source="__Jl_kK3tEeSuH7f2GGufnw" target="_8VQ2wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="__Jn0wK3tEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Jn0wa3tEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__Jn0wq3tEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Jn0w63tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__Jn0xK3tEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__Jn0xa3tEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="__JnNua3tEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="__JnNuq3tEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__JnNu63tEeSuH7f2GGufnw" points="[1486, 468, 1486, 468]$[1503, 261, 1503, 261]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__Jn0xq3tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__Jn0x63tEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_AJKmMK3uEeSuH7f2GGufnw" type="4001" element="_AJFtsK3uEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_AJJYEK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_AJKmNK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJKmNa3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AJKmNq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJKmN63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AJKmOK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJKmOa3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_AJKmMa3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_AJKmMq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AJKmM63uEeSuH7f2GGufnw" points="[-31, 29, -736, 21]$[-31, 99, -736, 91]$[746, 99, 41, 91]$[746, 44, 41, 36]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AJLNQK3uEeSuH7f2GGufnw" id="(0.9333333333333333,0.71)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AJLNQa3uEeSuH7f2GGufnw" id="(0.16666666666666666,0.64)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_AJLNQq3uEeSuH7f2GGufnw" type="4001" element="_AJIJ8K3uEeSuH7f2GGufnw" source="_AJJYEK3uEeSuH7f2GGufnw" target="_8VQ2wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_AJLNRq3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJLNR63uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AJLNSK3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJLNSa3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AJLNSq3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AJLNS63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_AJLNQ63uEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_AJLNRK3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AJLNRa3uEeSuH7f2GGufnw" points="[1610, 430, 1610, 430]$[1503, 261, 1503, 261]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AJLNTK3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AJLNTa3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DlPEcK3uEeSuH7f2GGufnw" type="4001" element="_DlIWwK3uEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_DlN2UK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlPrgK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlPrga3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlPrgq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlPrg63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlPrhK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlPrha3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DlPEca3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DlPEcq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DlPEc63uEeSuH7f2GGufnw" points="[2, 49, -950, 34]$[2, 146, -950, 131]$[953, 146, 1, 131]$[953, 64, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlPrhq3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlPrh63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DlPriK3uEeSuH7f2GGufnw" type="4001" element="_DlI90K3uEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_DlN2V63uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlPrjK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlPrja3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlPrjq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlPrj63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlQSkK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQSka3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DlPria3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DlPriq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DlPri63uEeSuH7f2GGufnw" points="[-7, 49, -1094, 34]$[-7, 173, -1094, 158]$[1088, 173, 1, 158]$[1088, 64, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlQSkq3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlQSk63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DlQSlK3uEeSuH7f2GGufnw" type="4001" element="_DlJk4K3uEeSuH7f2GGufnw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_DlOdZK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlQSmK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQSma3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlQSmq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQSm63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlQSnK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQSna3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DlQSla3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DlQSlq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DlQSl63uEeSuH7f2GGufnw" points="[-16, 49, -1256, 34]$[-16, 227, -1256, 212]$[1241, 227, 1, 212]$[1241, 64, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlQ5oK3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlQ5oa3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DlQ5oq3uEeSuH7f2GGufnw" type="4001" element="_DlLaEK3uEeSuH7f2GGufnw" source="_DlN2UK3uEeSuH7f2GGufnw" target="_8VQ2wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlQ5pq3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQ5p63uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlQ5qK3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQ5qa3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlQ5qq3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlQ5q63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DlQ5o63uEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DlQ5pK3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DlQ5pa3uEeSuH7f2GGufnw" points="[1566, 681, 1566, 681]$[1503, 261, 1503, 261]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlQ5rK3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlQ5ra3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DlRgsK3uEeSuH7f2GGufnw" type="4001" element="_DlLaF63uEeSuH7f2GGufnw" source="_DlN2V63uEeSuH7f2GGufnw" target="_8VQ2wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlRgtK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlRgta3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlRgtq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlRgt63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlRguK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlRgua3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DlRgsa3uEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DlRgsq3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DlRgs63uEeSuH7f2GGufnw" points="[1596, 711, 1596, 711]$[1503, 261, 1503, 261]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlRguq3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlRgu63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_DlRgvK3uEeSuH7f2GGufnw" type="4001" element="_DlMBJq3uEeSuH7f2GGufnw" source="_DlOdZK3uEeSuH7f2GGufnw" target="_8VQ2wK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_DlSHwK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlSHwa3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlSHwq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlSHw63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DlSHxK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DlSHxa3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_DlRgva3uEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DlRgvq3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DlRgv63uEeSuH7f2GGufnw" points="[0, -49, 341, 158]$[0, -112, 341, 95]$[-342, -112, -1, 95]$[-342, -158, -1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlSHxq3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DlSHx63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_X8MWgK3uEeSuH7f2GGufnw" type="4001" element="_X8Fo0K3uEeSuH7f2GGufnw" source="_myU5wK3tEeSuH7f2GGufnw" target="_X8KhUK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_X8M9kK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X8M9ka3uEeSuH7f2GGufnw" x="143" y="37"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_X8M9kq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X8M9k63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_X8M9lK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_X8M9la3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_X8MWga3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_X8MWgq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_X8MWg63uEeSuH7f2GGufnw" points="[-32, 49, 112, -618]$[-32, 554, 112, -113]$[-143, 554, 1, -113]$[-143, 618, 1, -49]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_X8M9l63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_YZnSUK3uEeSuH7f2GGufnw" type="4001" element="_YZhLsK3uEeSuH7f2GGufnw" source="_myU5wK3tEeSuH7f2GGufnw" target="_YZldIK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_YZnSVK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YZnSVa3uEeSuH7f2GGufnw" x="271" y="-37"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_YZn5YK3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YZn5Ya3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_YZn5Yq3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YZn5Y63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_YZnSUa3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_YZnSUq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YZnSU63uEeSuH7f2GGufnw" points="[-1, 49, -1, -617]$[-1, 617, -1, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YZn5ZK3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YZn5Za3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Y_mUQK3uEeSuH7f2GGufnw" type="4001" element="_Y_gNoK3uEeSuH7f2GGufnw" source="_myU5wK3tEeSuH7f2GGufnw" target="_Y_lGIK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Y_m7UK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Y_m7Ua3uEeSuH7f2GGufnw" x="137" y="-39"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Y_m7Uq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Y_m7U63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Y_m7VK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Y_m7Va3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Y_mUQa3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Y_mUQq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Y_mUQ63uEeSuH7f2GGufnw" points="[26, 49, -123, -617]$[26, 554, -123, -112]$[150, 554, 1, -112]$[150, 617, 1, -49]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Y_m7V63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_owGqsLCCEeS2zc2JFFVtPw" type="4001" element="_ovoJkLCCEeS2zc2JFFVtPw" source="_uQbqEK3tEeSuH7f2GGufnw" target="_n9K8QK3tEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_owGqtLCCEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_owGqtbCCEeS2zc2JFFVtPw" x="-62" y="37"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_owHRwLCCEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_owHRwbCCEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_owHRwrCCEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_owHRw7CCEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_owGqsbCCEeS2zc2JFFVtPw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_owGqsrCCEeS2zc2JFFVtPw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_owGqs7CCEeS2zc2JFFVtPw" points="[59, 1, 97, 382]$[164, 1, 202, 382]$[164, -382, 202, -1]$[21, -382, 59, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_owHRxLCCEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_owHRxbCCEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ </edges>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_n9HR4K3tEeSuH7f2GGufnw" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_n9HR4a3tEeSuH7f2GGufnw">
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9idsq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9ids63wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9idtK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9jr0q3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9jr063wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9jr1K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9kS4q3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9kS463wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9kS5K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9k58q3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9k5863wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9k59K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9lhAq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9lhA63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9lhBK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9mIEq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9mIE63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9mIFK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9nWMq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9nWM63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9nWNK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9n9Qq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9n9Q63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9n9RK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9okUq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9okU63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9okVK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9pLZK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9pLZa3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9pLZq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9pyea3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9pyeq3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9pye63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9qZiK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9qZia3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9qZiq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9rAmK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9rAma3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9rAmq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T9rnqK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T9rnqa3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T9rnqq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_wNqBYLCCEeS2zc2JFFVtPw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_wNqBYbCCEeS2zc2JFFVtPw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_wNqBYrCCEeS2zc2JFFVtPw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_1WY1wbCCEeS2zc2JFFVtPw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_1WY1wrCCEeS2zc2JFFVtPw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_1WY1w7CCEeS2zc2JFFVtPw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_2s4HkrCCEeS2zc2JFFVtPw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='blue']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_2s4Hk7CCEeS2zc2JFFVtPw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_2s4HlLCCEeS2zc2JFFVtPw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <cache xmi:type="diagram:DiagramElementMapping2ModelElement" xmi:id="_n9HR4q3tEeSuH7f2GGufnw">
+ <key xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9idsK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//StateMachine/top"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9idsa3wEeSuH7f2GGufnw" key="_uQX_sK3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9idta3wEeSuH7f2GGufnw" value="_T9idsq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9jr0K3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/sourceVertex"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9jr0a3wEeSuH7f2GGufnw" key="_n9Gq0K3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9jr1a3wEeSuH7f2GGufnw" value="_T9jr0q3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9kS4K3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/targetVertex"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9kS4a3wEeSuH7f2GGufnw" key="_n9IgCq3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9kS5a3wEeSuH7f2GGufnw" value="_T9kS4q3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9k58K3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/triggers"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9k58a3wEeSuH7f2GGufnw" key="_X8Fo0K3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9k59a3wEeSuH7f2GGufnw" value="_T9k58q3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9lhAK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/guard"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9lhAa3wEeSuH7f2GGufnw" key="_YZhLsK3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9lhBa3wEeSuH7f2GGufnw" value="_T9lhAq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9mIEK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Transition/actionChain"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9mIEa3wEeSuH7f2GGufnw" key="_Y_gNoK3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9mIFa3wEeSuH7f2GGufnw" value="_T9mIEq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9nWMK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//State/exitPoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9nWMa3wEeSuH7f2GGufnw" key="__JiVMK3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9nWNa3wEeSuH7f2GGufnw" value="_T9nWMq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9n9QK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//State/entryPoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9n9Qa3wEeSuH7f2GGufnw" key="_-Y3GMK3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9n9Ra3wEeSuH7f2GGufnw" value="_T9n9Qq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9okUK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/initial"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9okUa3wEeSuH7f2GGufnw" key="_AJFtsK3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9okVa3wEeSuH7f2GGufnw" value="_T9okUq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9pLYq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/deepHistory"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9pLY63wEeSuH7f2GGufnw" key="_DlIWwK3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9pycK3wEeSuH7f2GGufnw" value="_T9pLZK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9pyd63wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/junctionPoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9pyeK3wEeSuH7f2GGufnw" key="_DlI90K3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9pyfK3wEeSuH7f2GGufnw" value="_T9pyea3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9qZhq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/choicePoints"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9qZh63wEeSuH7f2GGufnw" key="_DlJk4K3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9qZi63wEeSuH7f2GGufnw" value="_T9qZiK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9rAlq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/substates"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9rAl63wEeSuH7f2GGufnw" key="_uQYmzK3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9rAm63wEeSuH7f2GGufnw" value="_T9rAmK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T9rnpq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/transitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T9rnp63wEeSuH7f2GGufnw" key="_uQZN3K3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T9rnq63wEeSuH7f2GGufnw" value="_T9rnqK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_ovoJkbCCEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CompositeState/vertices"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_ovoJkrCCEeS2zc2JFFVtPw" key="_ovoJkLCCEeS2zc2JFFVtPw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_ovoJlrCCEeS2zc2JFFVtPw" value="_wNqBYLCCEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_1WYOsLCCEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Vertex/incomingTransitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_1WY1wLCCEeS2zc2JFFVtPw" key="_n9JuIK3tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_1WY1xLCCEeS2zc2JFFVtPw" value="_1WY1wbCCEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_2s4HkLCCEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Vertex/outgoingTransitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_2s4HkbCCEeS2zc2JFFVtPw" key="_n9JuJ63tEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_2s4HlbCCEeS2zc2JFFVtPw" value="_2s4HkrCCEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ </cache>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_lilJIK3tEeSuH7f2GGufnw" name="StateMachine" tooltipText="" outgoingEdges="_uQX_sK3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StateMachine"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//StateMachine"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_lilwMK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_lilwMa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_lilwMq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_lilwM63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_lilwNK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_myQBQK3tEeSuH7f2GGufnw" name="Transition" tooltipText="" outgoingEdges="_n9Gq0K3tEeSuH7f2GGufnw _n9IgCq3tEeSuH7f2GGufnw _X8Fo0K3uEeSuH7f2GGufnw _YZhLsK3uEeSuH7f2GGufnw _Y_gNoK3uEeSuH7f2GGufnw" incomingEdges="_n9JuIK3tEeSuH7f2GGufnw _n9JuJ63tEeSuH7f2GGufnw _uQZN3K3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Transition"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Transition"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_myQoUK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_myQoUa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_myQoUq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_myQoU63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_myQoVK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_n9BLQK3tEeSuH7f2GGufnw" name="Vertex" tooltipText="" outgoingEdges="_n9JuIK3tEeSuH7f2GGufnw _n9JuJ63tEeSuH7f2GGufnw" incomingEdges="_n9Gq0K3tEeSuH7f2GGufnw _n9IgCq3tEeSuH7f2GGufnw _rfa7AK3tEeSuH7f2GGufnw _8VPooK3tEeSuH7f2GGufnw _ovoJkLCCEeS2zc2JFFVtPw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Vertex"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Vertex"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_n9ByUK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_n9ByUa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_n9ByUq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_n9ByU63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_n9ByVK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_n9Gq0K3tEeSuH7f2GGufnw" name="[1..1] sourceVertex" sourceNode="_myQBQK3tEeSuH7f2GGufnw" targetNode="_n9BLQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/sourceVertex"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/sourceVertex"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9jr1q3wEeSuH7f2GGufnw" description="_T9jr0q3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9jr163wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9jr2K3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9jr2a3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9jr2q3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9jr263wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_n9IgCq3tEeSuH7f2GGufnw" name="[1..1] targetVertex" sourceNode="_myQBQK3tEeSuH7f2GGufnw" targetNode="_n9BLQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/targetVertex"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/targetVertex"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9kS5q3wEeSuH7f2GGufnw" description="_T9kS4q3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9kS563wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9kS6K3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9kS6a3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9kS6q3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9kS663wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_n9JuIK3tEeSuH7f2GGufnw" name="[0..*] /incomingTransitions" sourceNode="_n9BLQK3tEeSuH7f2GGufnw" targetNode="_myQBQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Vertex/incomingTransitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Vertex/incomingTransitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_1WY1xbCCEeS2zc2JFFVtPw" description="_1WY1wbCCEeS2zc2JFFVtPw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_1WY1xrCCEeS2zc2JFFVtPw" red="114" green="159" blue="207"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_1WY1x7CCEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1WY1yLCCEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_1WY1ybCCEeS2zc2JFFVtPw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1WY1yrCCEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_n9JuJ63tEeSuH7f2GGufnw" name="[0..*] /outgoingTransitions" sourceNode="_n9BLQK3tEeSuH7f2GGufnw" targetNode="_myQBQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Vertex/outgoingTransitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Vertex/outgoingTransitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_2s4HlrCCEeS2zc2JFFVtPw" description="_2s4HkrCCEeS2zc2JFFVtPw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_2s4Hl7CCEeS2zc2JFFVtPw" red="114" green="159" blue="207"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_2s4HmLCCEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_2s4HmbCCEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_2s4HmrCCEeS2zc2JFFVtPw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_2s4Hm7CCEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_rfUNUK3tEeSuH7f2GGufnw" name="State" tooltipText="" outgoingEdges="_rfa7AK3tEeSuH7f2GGufnw _-Y3GMK3tEeSuH7f2GGufnw __JiVMK3tEeSuH7f2GGufnw" incomingEdges="_s-aBgK3tEeSuH7f2GGufnw _uQYmzK3tEeSuH7f2GGufnw _uQab8K3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_rfU0YK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_rfU0Ya3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_rfU0Yq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_rfU0Y63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_rfU0ZK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_rfa7AK3tEeSuH7f2GGufnw" sourceNode="_rfUNUK3tEeSuH7f2GGufnw" targetNode="_n9BLQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//State"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//State/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//State/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_rfbiEK3tEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_rfbiEa3tEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_rfbiEq3tEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_rfbiE63tEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_rfbiFK3tEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_rfbiFa3tEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_s-SFsK3tEeSuH7f2GGufnw" name="SimpleState" tooltipText="" outgoingEdges="_s-aBgK3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//SimpleState"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//SimpleState"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_s-SswK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_s-Sswa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_s-Sswq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_s-Ssw63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_s-SsxK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_s-aBgK3tEeSuH7f2GGufnw" sourceNode="_s-SFsK3tEeSuH7f2GGufnw" targetNode="_rfUNUK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//SimpleState"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//SimpleState/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_s-aBga3tEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_s-aBgq3tEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_s-aBg63tEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_s-aBhK3tEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_s-aBha3tEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_s-aBhq3tEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_uQQq8K3tEeSuH7f2GGufnw" name="CompositeState" tooltipText="" outgoingEdges="_uQYmzK3tEeSuH7f2GGufnw _uQZN3K3tEeSuH7f2GGufnw _uQab8K3tEeSuH7f2GGufnw _AJFtsK3uEeSuH7f2GGufnw _DlIWwK3uEeSuH7f2GGufnw _DlI90K3uEeSuH7f2GGufnw _DlJk4K3uEeSuH7f2GGufnw _ovoJkLCCEeS2zc2JFFVtPw" incomingEdges="_uQX_sK3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CompositeState"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//CompositeState"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_uQRSAK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_uQRSAa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_uQRSAq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_uQRSA63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_uQRSBK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_uQX_sK3tEeSuH7f2GGufnw" name="[1..1] top" sourceNode="_lilJIK3tEeSuH7f2GGufnw" targetNode="_uQQq8K3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//StateMachine/top"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//StateMachine/top"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9jEwK3wEeSuH7f2GGufnw" description="_T9idsq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9jEwa3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9jEwq3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9jEw63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9jExK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9jExa3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_uQYmzK3tEeSuH7f2GGufnw" name="[0..*] substates" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_rfUNUK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/substates"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/substates"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9rnoK3wEeSuH7f2GGufnw" description="_T9rAmK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9rnoa3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9rnoq3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9rno63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9rnpK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9rnpa3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_uQZN3K3tEeSuH7f2GGufnw" name="[0..*] transitions" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_myQBQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/transitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/transitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9sOsK3wEeSuH7f2GGufnw" description="_T9rnqK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9sOsa3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9sOsq3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9sOs63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9sOtK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9sOta3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_uQab8K3tEeSuH7f2GGufnw" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_rfUNUK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CompositeState"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//CompositeState/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_uQab8a3tEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_uQab8q3tEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_uQab863tEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_uQab9K3tEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_uQab9a3tEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_uQab9q3tEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_8VF3oK3tEeSuH7f2GGufnw" name="Pseudostate" tooltipText="" outgoingEdges="_8VPooK3tEeSuH7f2GGufnw" incomingEdges="_-Y5icK3tEeSuH7f2GGufnw __JkKYK3tEeSuH7f2GGufnw _AJIJ8K3uEeSuH7f2GGufnw _DlLaEK3uEeSuH7f2GGufnw _DlLaF63uEeSuH7f2GGufnw _DlMBJq3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Pseudostate"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Pseudostate"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_8VGesK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_8VGesa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_8VGesq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_8VGes63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_8VGetK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_8VPooK3tEeSuH7f2GGufnw" sourceNode="_8VF3oK3tEeSuH7f2GGufnw" targetNode="_n9BLQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Pseudostate"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Pseudostate/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_8VPooa3tEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_8VPooq3tEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_8VPoo63tEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_8VPopK3tEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_8VPopa3tEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_8VPopq3tEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_-YtVMK3tEeSuH7f2GGufnw" name="EntryPoint" tooltipText="" outgoingEdges="_-Y5icK3tEeSuH7f2GGufnw" incomingEdges="_-Y3GMK3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//EntryPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//EntryPoint"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_-Yt8QK3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_-Yt8Qa3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_-Yt8Qq3tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_-Yt8Q63tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_-Yt8RK3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_-Y3GMK3tEeSuH7f2GGufnw" name="[0..*] entryPoints" sourceNode="_rfUNUK3tEeSuH7f2GGufnw" targetNode="_-YtVMK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//State/entryPoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//State/entryPoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9n9Rq3wEeSuH7f2GGufnw" description="_T9n9Qq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9n9R63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9n9SK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9n9Sa3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9n9Sq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9n9S63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_-Y5icK3tEeSuH7f2GGufnw" sourceNode="_-YtVMK3tEeSuH7f2GGufnw" targetNode="_8VF3oK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//EntryPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//EntryPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_-Y6JgK3tEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_-Y6Jga3tEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_-Y6Jgq3tEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_-Y6Jg63tEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_-Y6JhK3tEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_-Y6Jha3tEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="__JZLQK3tEeSuH7f2GGufnw" name="ExitPoint" tooltipText="" outgoingEdges="__JkKYK3tEeSuH7f2GGufnw" incomingEdges="__JiVMK3tEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ExitPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ExitPoint"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="__JZLQa3tEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="__JZLQq3tEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="__JZLQ63tEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="__JZLRK3tEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="__JZLRa3tEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="__JiVMK3tEeSuH7f2GGufnw" name="[0..*] exitPoints" sourceNode="_rfUNUK3tEeSuH7f2GGufnw" targetNode="__JZLQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//State/exitPoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//State/exitPoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9nWNq3wEeSuH7f2GGufnw" description="_T9nWMq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9nWN63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9nWOK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9nWOa3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9nWOq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9nWO63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="__JkKYK3tEeSuH7f2GGufnw" sourceNode="__JZLQK3tEeSuH7f2GGufnw" targetNode="_8VF3oK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ExitPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ExitPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="__JkxcK3tEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="__Jkxca3tEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="__Jkxcq3tEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="__Jkxc63tEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="__JkxdK3tEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="__Jkxda3tEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_AI45YK3uEeSuH7f2GGufnw" name="InitialPoint" tooltipText="" outgoingEdges="_AJIJ8K3uEeSuH7f2GGufnw" incomingEdges="_AJFtsK3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//InitialPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//InitialPoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_AI5gcK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AI5gca3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_AI5gcq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_AI5gc63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_AI5gdK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_AJFtsK3uEeSuH7f2GGufnw" name="[0..1] initial" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_AI45YK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/initial"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/initial"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9okVq3wEeSuH7f2GGufnw" description="_T9okUq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9okV63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9okWK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9okWa3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9pLYK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9pLYa3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_AJIJ8K3uEeSuH7f2GGufnw" sourceNode="_AI45YK3uEeSuH7f2GGufnw" targetNode="_8VF3oK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//InitialPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//InitialPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_AJIJ8a3uEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_AJIJ8q3uEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_AJIJ863uEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AJIJ9K3uEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_AJIJ9a3uEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AJIJ9q3uEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Dk7icK3uEeSuH7f2GGufnw" name="DeepHistory" tooltipText="" outgoingEdges="_DlLaEK3uEeSuH7f2GGufnw" incomingEdges="_DlIWwK3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//DeepHistory"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//DeepHistory"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Dk8JgK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8Jga3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8Jgq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8Jg63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8JhK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Dk8wkK3uEeSuH7f2GGufnw" name="JunctionPoint" tooltipText="" outgoingEdges="_DlLaF63uEeSuH7f2GGufnw" incomingEdges="_DlI90K3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//JunctionPoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//JunctionPoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Dk8wka3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8wkq3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8wk63uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8wlK3uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk8wla3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Dk9XoK3uEeSuH7f2GGufnw" name="ChoicePoint" tooltipText="" outgoingEdges="_DlMBJq3uEeSuH7f2GGufnw" incomingEdges="_DlJk4K3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ChoicePoint"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ChoicePoint"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Dk9Xoa3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk9Xoq3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk9Xo63uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk9XpK3uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Dk9Xpa3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DlIWwK3uEeSuH7f2GGufnw" name="[0..1] deepHistory" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_Dk7icK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/deepHistory"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/deepHistory"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9pyca3wEeSuH7f2GGufnw" description="_T9pLZK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9pycq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9pyc63wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9pydK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9pyda3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9pydq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DlI90K3uEeSuH7f2GGufnw" name="[0..*] junctionPoints" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_Dk8wkK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/junctionPoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/junctionPoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9qZgK3wEeSuH7f2GGufnw" description="_T9pyea3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9qZga3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9qZgq3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9qZg63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9qZhK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9qZha3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DlJk4K3uEeSuH7f2GGufnw" name="[0..1] choicePoints" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_Dk9XoK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/choicePoints"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/choicePoints"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9rAkK3wEeSuH7f2GGufnw" description="_T9qZiK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9rAka3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9rAkq3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9rAk63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9rAlK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9rAla3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DlLaEK3uEeSuH7f2GGufnw" sourceNode="_Dk7icK3uEeSuH7f2GGufnw" targetNode="_8VF3oK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//DeepHistory"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//DeepHistory/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_DlLaEa3uEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_DlLaEq3uEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_DlLaE63uEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DlLaFK3uEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_DlLaFa3uEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DlLaFq3uEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DlLaF63uEeSuH7f2GGufnw" sourceNode="_Dk8wkK3uEeSuH7f2GGufnw" targetNode="_8VF3oK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//JunctionPoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//JunctionPoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_DlMBIK3uEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_DlMBIa3uEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_DlMBIq3uEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DlMBI63uEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_DlMBJK3uEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DlMBJa3uEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_DlMBJq3uEeSuH7f2GGufnw" sourceNode="_Dk9XoK3uEeSuH7f2GGufnw" targetNode="_8VF3oK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ChoicePoint"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//ChoicePoint/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_DlMBJ63uEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_DlMBKK3uEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_DlMBKa3uEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DlMBKq3uEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_DlMBK63uEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_DlMBLK3uEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_X74NcK3uEeSuH7f2GGufnw" name="Trigger" tooltipText="" incomingEdges="_X8Fo0K3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Trigger"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Trigger"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_X740gK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_X740ga3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_X740gq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_X740g63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_X740hK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_X8Fo0K3uEeSuH7f2GGufnw" name="[0..*] triggers" sourceNode="_myQBQK3tEeSuH7f2GGufnw" targetNode="_X74NcK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/triggers"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/triggers"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9k59q3wEeSuH7f2GGufnw" description="_T9k58q3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9k5963wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9k5-K3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9k5-a3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9k5-q3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9k5-63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_YZTwUK3uEeSuH7f2GGufnw" name="Guard" tooltipText="" incomingEdges="_YZhLsK3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Guard"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Guard"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_YZUXYK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_YZUXYa3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_YZUXYq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_YZUXY63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_YZUXZK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_YZhLsK3uEeSuH7f2GGufnw" name="[0..1] guard" sourceNode="_myQBQK3tEeSuH7f2GGufnw" targetNode="_YZTwUK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/guard"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/guard"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9lhBq3wEeSuH7f2GGufnw" description="_T9lhAq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9lhB63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9lhCK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9lhCa3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9lhCq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9lhC63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Y_HzIK3uEeSuH7f2GGufnw" name="ActionChain" tooltipText="" incomingEdges="_Y_gNoK3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ActionChain"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ActionChain"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Y_IaMK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Y_IaMa3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Y_IaMq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Y_IaM63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Y_IaNK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Y_gNoK3uEeSuH7f2GGufnw" name="[0..1] actionChain" sourceNode="_myQBQK3tEeSuH7f2GGufnw" targetNode="_Y_HzIK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Transition/actionChain"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Transition/actionChain"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T9mIFq3wEeSuH7f2GGufnw" description="_T9mIEq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T9mIF63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T9mIGK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9mIGa3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T9mIGq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T9mIG63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_ovoJkLCCEeS2zc2JFFVtPw" name="[0..*] /vertices" sourceNode="_uQQq8K3tEeSuH7f2GGufnw" targetNode="_n9BLQK3tEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CompositeState/vertices"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CompositeState/vertices"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_wNqBY7CCEeS2zc2JFFVtPw" description="_wNqBYLCCEeS2zc2JFFVtPw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_wNqBZLCCEeS2zc2JFFVtPw" red="114" green="159" blue="207"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_wNqBZbCCEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_wNqBZrCCEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_wNqBZ7CCEeS2zc2JFFVtPw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_wNqBaLCCEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_gEpg1a3tEeSuH7f2GGufnw"/>
+ <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+ <target xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </ownedRepresentations>
+ <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_01akkK3uEeSuH7f2GGufnw" name="xtUMLrt Common (Structure)">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_01bLo63uEeSuH7f2GGufnw" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="_01bLpK3uEeSuH7f2GGufnw" type="Sirius" element="_01akkK3uEeSuH7f2GGufnw" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_28wEgK3uEeSuH7f2GGufnw" type="2003" element="_28ovwK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_28wrkK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_28wrka3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_28wrkq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_28wrk63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_28wEga3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_28wEgq3uEeSuH7f2GGufnw" x="660" y="-336"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_5M47IK3uEeSuH7f2GGufnw" type="2003" element="_5MzbkK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_5M5iMK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_5M5iMa3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5M5iMq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5M5iM63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_5M47Ia3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5M47Iq3uEeSuH7f2GGufnw" x="846" y="171"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_55lCAK3uEeSuH7f2GGufnw" type="2003" element="_55dtQK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_55lpEK3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_55lpEa3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_55lpEq3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_55lpE63uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_55lCAa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_55lCAq3uEeSuH7f2GGufnw" x="1053" y="36"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_87fT0K3uEeSuH7f2GGufnw" type="2003" element="_87Ww8K3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_87fT063uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_87fT1K3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_87fT1a3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_87fT1q3uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_87fT0a3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87fT0q3uEeSuH7f2GGufnw" x="1028" y="419"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_92BCYK3uEeSuH7f2GGufnw" type="2003" element="_912qUK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_92BCY63uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_92BCZK3uEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_92BCZ63uEeSuH7f2GGufnw" type="3010" element="_918J4K3uEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxD8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_92BCaK3uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_92BCZa3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_92BCZq3uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_92BCYa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92BCYq3uEeSuH7f2GGufnw" x="189" y="268"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__mYMwK3uEeSuH7f2GGufnw" type="2003" element="__mPp4K3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="__mYz0K3uEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="__mYz0a3uEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="__mYz0q3uEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="__mYz063uEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="__mYMwa3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__mYMwq3uEeSuH7f2GGufnw" x="543" y="-84"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FfDQUK3vEeSuH7f2GGufnw" type="2003" element="_Fe3qIK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_FfD3YK3vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_FfD3Ya3vEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_FfEecK3vEeSuH7f2GGufnw" type="3010" element="_Fe-X0K3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxEMNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FfEeca3vEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FfEecq3vEeSuH7f2GGufnw" type="3010" element="_Fe--4K3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxEcNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FfEec63vEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FfEedK3vEeSuH7f2GGufnw" type="3010" element="_Fe--5a3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxEsNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FfEeda3vEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FfEedq3vEeSuH7f2GGufnw" type="3010" element="_Fe--6q3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxE8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FfEed63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_FfD3Yq3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_FfD3Y63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_FfDQUa3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FfDQUq3vEeSuH7f2GGufnw" x="135" y="45"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_IJMiYK3vEeSuH7f2GGufnw" type="2003" element="_IJAVIK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_IJNJcK3vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_IJNJca3vEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_IJNJcq3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_IJNJc63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_IJMiYa3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IJMiYq3vEeSuH7f2GGufnw" x="396" y="477"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_JkxvkK3vEeSuH7f2GGufnw" type="2003" element="_JkgCwK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Jkxvk63vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_JkyWoK3vEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_JkyWo63vEeSuH7f2GGufnw" type="3010" element="_Jkqa0K3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxFMNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_JkyWpK3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_JkyWoa3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_JkyWoq3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Jkxvka3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jkxvkq3vEeSuH7f2GGufnw" x="63" y="729"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_KolV8K3vEeSuH7f2GGufnw" type="2003" element="_KoX6kK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_KolV863vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_KolV9K3vEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_KolV9a3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_KolV9q3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_KolV8a3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KolV8q3vEeSuH7f2GGufnw" x="648" y="819"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYOvgK3vEeSuH7f2GGufnw" type="2003" element="_VYAtEK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_VYPWkK3vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_VYPWka3vEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_VYPWlK3vEeSuH7f2GGufnw" type="3010" element="_VYIo4K3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxFcNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VYPWla3vEeSuH7f2GGufnw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYPWlq3vEeSuH7f2GGufnw" type="3010" element="_VYIo5a3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxFsNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VYPWl63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_VYPWkq3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_VYPWk63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_VYOvga3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYOvgq3vEeSuH7f2GGufnw" x="1233" y="423"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Xa-DUK3vEeSuH7f2GGufnw" type="2003" element="_XaqhUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Xa-DU63vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Xa-DVK3vEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Xa-DVa3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Xa-DVq3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Xa-DUa3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa-DUq3vEeSuH7f2GGufnw" x="1431" y="423"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ZyLyUK3vEeSuH7f2GGufnw" type="2003" element="_Zxz-4K3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_ZyLyU63vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_ZyLyVK3vEeSuH7f2GGufnw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_ZyMZYK3vEeSuH7f2GGufnw" type="3010" element="_Zx_lEK3vEeSuH7f2GGufnw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxF8NUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZyMZYa3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ZyLyVa3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ZyLyVq3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_ZyLyUa3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZyLyUq3vEeSuH7f2GGufnw" x="1710" y="423"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bufG8K3vEeSuH7f2GGufnw" type="2003" element="_buMMAK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_bufuAK3vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_bufuAa3vEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_bufuAq3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_bufuA63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_bufG8a3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bufG8q3vEeSuH7f2GGufnw" x="1639" y="653"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_dkMEUK3vEeSuH7f2GGufnw" type="2003" element="_dj2GEK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_dkMrYK3vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_dkMrYa3vEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dkMrYq3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dkMrY63vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_dkMEUa3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dkMEUq3vEeSuH7f2GGufnw" x="1224" y="612"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_eUEpIK3vEeSuH7f2GGufnw" type="2003" element="_eTuD0K3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_eUEpI63vEeSuH7f2GGufnw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_eUEpJK3vEeSuH7f2GGufnw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_eUEpJa3vEeSuH7f2GGufnw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_eUEpJq3vEeSuH7f2GGufnw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_eUEpIa3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUEpIq3vEeSuH7f2GGufnw" x="1404" y="612"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Agv6wLCWEeS2zc2JFFVtPw" type="2003" element="_AgSnwLCWEeS2zc2JFFVtPw">
+ <children xmi:type="notation:Node" xmi:id="_Agwh0LCWEeS2zc2JFFVtPw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_Agwh0bCWEeS2zc2JFFVtPw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_Agxv8LCWEeS2zc2JFFVtPw" type="3010" element="_Agk7oLCWEeS2zc2JFFVtPw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxGMNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Agxv8bCWEeS2zc2JFFVtPw"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Agxv8rCWEeS2zc2JFFVtPw" type="3010" element="_AglisLCWEeS2zc2JFFVtPw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_d_jxGcNUEeS2b7b-DU5jjw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Agxv87CWEeS2zc2JFFVtPw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Agwh0rCWEeS2zc2JFFVtPw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Agwh07CWEeS2zc2JFFVtPw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_Agv6wbCWEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Agv6wrCWEeS2zc2JFFVtPw" x="1035" y="639"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_lGT8QLhTEeSH9PQiHQ6eWw" type="2003" element="_lF3QULhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_lGT8Q7hTEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_lGT8RLhTEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_lGT8RbhTEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_lGT8RrhTEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_lGT8QbhTEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lGT8QrhTEeSH9PQiHQ6eWw" x="696" y="-84"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_oysHYLhTEeSH9PQiHQ6eWw" type="2003" element="_oyR3sLhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_oyujoLhTEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_oyujobhTEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_oyujorhTEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_oyujo7hTEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_oysHYbhTEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oysHYrhTEeSH9PQiHQ6eWw" x="696" y="72"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_1RWngLhTEeSH9PQiHQ6eWw" type="2003" element="_1Q-NALhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_1RXOkrhTEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_1RX1oLhTEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_1RX1obhTEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_1RX1orhTEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_1RXOkLhTEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RXOkbhTEeSH9PQiHQ6eWw" x="1035" y="-336"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VZNp4LhWEeSH9PQiHQ6eWw" type="2003" element="_VYt6oLhWEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_VZNp47hWEeSH9PQiHQ6eWw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_VZNp5LhWEeSH9PQiHQ6eWw" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_VZNp5bhWEeSH9PQiHQ6eWw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_VZNp5rhWEeSH9PQiHQ6eWw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_VZNp4bhWEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZNp4rhWEeSH9PQiHQ6eWw" x="1281" y="-564"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_01bLpa3uEeSuH7f2GGufnw"/>
+ <edges xmi:type="notation:Edge" xmi:id="_87f67K3uEeSuH7f2GGufnw" type="4001" element="_87eFsK3uEeSuH7f2GGufnw" source="_87fT0K3uEeSuH7f2GGufnw" target="_5M47IK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_87gh863uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87gh9K3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_87gh9a3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87gh9q3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_87gh963uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87gh-K3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_87gh8K3uEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_87gh8a3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_87gh8q3uEeSuH7f2GGufnw" points="[0, -49, 182, 199]$[0, -108, 182, 140]$[-181, -108, 1, 140]$[-181, -199, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_87gh-a3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_87gh-q3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_92BpcK3uEeSuH7f2GGufnw" type="4001" element="_91-mIK3uEeSuH7f2GGufnw" source="_5M47IK3uEeSuH7f2GGufnw" target="_92BCYK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_92CQgK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92CQga3uEeSuH7f2GGufnw" x="34" y="-14"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_92CQgq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92CQg63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_92CQhK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92CQha3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_92Bpca3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_92Bpcq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_92Bpc63uEeSuH7f2GGufnw" points="[-59, -13, 585, -110]$[-149, -13, 495, -110]$[-149, 104, 495, 7]$[-572, 104, 72, 7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_92CQhq3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_92CQh63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_92CQiK3uEeSuH7f2GGufnw" type="4001" element="_91-mLa3uEeSuH7f2GGufnw" source="_92BCYK3uEeSuH7f2GGufnw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_92C3kK3uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92C3ka3uEeSuH7f2GGufnw" x="25" y="-58"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_92C3kq3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92C3k63uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_92C3lK3uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_92C3la3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_92CQia3uEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_92CQiq3uEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_92CQi63uEeSuH7f2GGufnw" points="[91, -31, -348, 573]$[140, -31, -299, 573]$[140, -635, -299, -31]$[380, -635, -59, -31]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_92C3lq3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_92C3l63uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="__mYz1K3uEeSuH7f2GGufnw" type="4001" element="__mXlsK3uEeSuH7f2GGufnw" source="__mYMwK3uEeSuH7f2GGufnw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="__mZa463uEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__mZa5K3uEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__mZa5a3uEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__mZa5q3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="__mZa563uEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__mZa6K3uEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="__mZa4K3uEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="__mZa4a3uEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__mZa4q3uEeSuH7f2GGufnw" points="[619, 213, 619, 213]$[657, 45, 657, 45]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__mZa6a3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__mZa6q3uEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_FfFFgK3vEeSuH7f2GGufnw" type="4001" element="_FfCCMK3vEeSuH7f2GGufnw" source="_92BCYK3uEeSuH7f2GGufnw" target="_FfDQUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_FfFFhK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FfFFha3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FfFFhq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FfFFh63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_FfFskK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FfFska3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_FfFFga3vEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_FfFFgq3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FfFFg63vEeSuH7f2GGufnw" points="[0, -49, 158, 86]$[0, -58, 158, 77]$[-157, -58, 1, 77]$[-157, -86, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FfFskq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FfFsk63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_IJNwgK3vEeSuH7f2GGufnw" type="4001" element="_IJJfEK3vEeSuH7f2GGufnw" source="_IJMiYK3vEeSuH7f2GGufnw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_IJNwhK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IJNwha3vEeSuH7f2GGufnw" x="-199" y="61"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_IJOXkK3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IJOXka3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_IJOXkq3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IJOXk63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_IJNwga3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_IJNwgq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IJNwg63vEeSuH7f2GGufnw" points="[57, -49, -207, 764]$[57, -812, -207, 1]$[205, -812, -59, 1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IJOXlK3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_IJOXla3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_JkzkwK3vEeSuH7f2GGufnw" type="4001" element="_JkteIK3vEeSuH7f2GGufnw" source="_IJMiYK3vEeSuH7f2GGufnw" target="_JkxvkK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Jk0L0K3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk0L0a3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Jk0L0q3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk0L063vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Jk0L1K3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk0L1a3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Jkzkwa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Jkzkwq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jkzkw63vEeSuH7f2GGufnw" points="[-59, 1, 270, -251]$[-95, 1, 234, -251]$[-95, 251, 234, -1]$[-265, 251, 64, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jk0L1q3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jk0L163vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Jk0L2K3vEeSuH7f2GGufnw" type="4001" element="_JkuFNq3vEeSuH7f2GGufnw" source="_JkxvkK3vEeSuH7f2GGufnw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Jk0L3K3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk0L3a3vEeSuH7f2GGufnw" x="29" y="28"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Jk0y4K3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk0y4a3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Jk0y4q3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk0y463vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Jk0L2a3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Jk0L2q3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jk0L263vEeSuH7f2GGufnw" points="[82, -19, -493, 1046]$[194, -19, -381, 1046]$[194, -337, -381, 728]$[310, -337, -265, 728]$[310, -1078, -265, -13]$[516, -1078, -59, -13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jk0y5K3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jk0y5a3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Jk0y5q3vEeSuH7f2GGufnw" type="4001" element="_JkvTUK3vEeSuH7f2GGufnw" source="_JkxvkK3vEeSuH7f2GGufnw" target="_FfDQUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Jk1Z8K3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk1Z8a3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Jk1Z8q3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk1Z863vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Jk1Z9K3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Jk1Z9a3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Jk0y563vEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Jk0y6K3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Jk0y6a3vEeSuH7f2GGufnw" points="[0, -49, 74, 614]$[0, -577, 74, 86]$[-73, -577, 1, 86]$[-73, -614, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jk1Z9q3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Jk1Z963vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Kol9AK3vEeSuH7f2GGufnw" type="4001" element="_KohrkK3vEeSuH7f2GGufnw" source="_5M47IK3uEeSuH7f2GGufnw" target="_KolV8K3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_KomkEK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KomkEa3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_KomkEq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KomkE63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_KomkFK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KomkFa3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Kol9Aa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Kol9Aq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Kol9A63vEeSuH7f2GGufnw" points="[846, 171, 846, 171]$[652, 779, 652, 779]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KomkFq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KomkF63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_KomkGK3vEeSuH7f2GGufnw" type="4001" element="_KojgwK3vEeSuH7f2GGufnw" source="_KolV8K3vEeSuH7f2GGufnw" target="_IJMiYK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_KomkHK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KomkHa3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_KomkHq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KomkH63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_KonLIK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_KonLIa3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_KomkGa3vEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_KomkGq3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KomkG63vEeSuH7f2GGufnw" points="[0, -49, 252, 293]$[0, -184, 252, 158]$[-251, -184, 1, 158]$[-251, -293, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KonLIq3vEeSuH7f2GGufnw" id="(0.26666666666666666,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_KonLI63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VYP9oK3vEeSuH7f2GGufnw" type="4001" element="_VYLsMK3vEeSuH7f2GGufnw" source="_87fT0K3uEeSuH7f2GGufnw" target="_VYOvgK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_VYP9pK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYP9pa3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYQksK3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYQksa3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VYQksq3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VYQks63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VYP9oa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VYP9oq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VYP9o63vEeSuH7f2GGufnw" points="[1028, 419, 1028, 419]$[1232, 445, 1232, 445]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VYQktK3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VYQkta3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Xa-qYK3vEeSuH7f2GGufnw" type="4001" element="_Xa4jwK3vEeSuH7f2GGufnw" source="_55lCAK3uEeSuH7f2GGufnw" target="_Xa-DUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Xa_RcK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa_Rca3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Xa_Rcq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa_Rc63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Xa_RdK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa_Rda3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Xa-qYa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Xa-qYq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Xa-qY63vEeSuH7f2GGufnw" points="[59, 1, -319, -386]$[377, 1, -1, -386]$[377, 338, -1, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xa_Rdq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xa_Rd63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Xa_ReK3vEeSuH7f2GGufnw" type="4001" element="_Xa5K3K3vEeSuH7f2GGufnw" source="_VYOvgK3vEeSuH7f2GGufnw" target="_Xa-DUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_Xa_4gK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa_4ga3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Xa_4gq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa_4g63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Xa_4hK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Xa_4ha3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Xa_Rea3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Xa_Req3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Xa_Re63vEeSuH7f2GGufnw" points="[1233, 423, 1233, 423]$[1277, 597, 1277, 597]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xa_4hq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Xa_4h63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_ZyMZYq3vEeSuH7f2GGufnw" type="4001" element="_ZyGSwK3vEeSuH7f2GGufnw" source="_Xa-DUK3vEeSuH7f2GGufnw" target="_ZyLyUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_ZyNAcK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZyNAca3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ZyNAcq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZyNAc63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ZyNAdK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZyNAda3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_ZyMZY63vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_ZyMZZK3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_ZyMZZa3vEeSuH7f2GGufnw" points="[1431, 423, 1431, 423]$[1520, 369, 1520, 369]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZyNAdq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZyNAd63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_bugVEK3vEeSuH7f2GGufnw" type="4001" element="_buaOcK3vEeSuH7f2GGufnw" source="_bufG8K3vEeSuH7f2GGufnw" target="_JkxvkK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_bugVFK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bugVFa3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bugVFq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bugVF63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bug8IK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bug8Ia3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_bugVEa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_bugVEq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_bugVE63vEeSuH7f2GGufnw" points="[3, 49, 1575, -27]$[3, 93, 1575, 17]$[-1460, 93, 112, 17]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_bug8Iq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_bug8I63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_bug8JK3vEeSuH7f2GGufnw" type="4001" element="_bucqsK3vEeSuH7f2GGufnw" source="_bufG8K3vEeSuH7f2GGufnw" target="_ZyLyUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_bug8KK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bug8Ka3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bug8Kq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bug8K63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bug8LK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bug8La3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_bug8Ja3vEeSuH7f2GGufnw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_bug8Jq3vEeSuH7f2GGufnw" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_bug8J63vEeSuH7f2GGufnw" points="[0, -49, -96, 181]$[0, -117, -96, 113]$[97, -117, 1, 113]$[97, -181, 1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_bug8Lq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_buhjMK3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_dkNScK3vEeSuH7f2GGufnw" type="4001" element="_dkGkwK3vEeSuH7f2GGufnw" source="_87fT0K3uEeSuH7f2GGufnw" target="_dkMEUK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_dkN5gK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dkN5ga3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_dkN5gq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dkN5g63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_dkN5hK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dkN5ha3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_dkNSca3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_dkNScq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_dkNSc63vEeSuH7f2GGufnw" points="[39, 49, -157, -144]$[39, 100, -157, -93]$[156, 100, -40, -93]$[156, 151, -40, -42]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dkN5hq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_dkOgkK3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_eUFQMK3vEeSuH7f2GGufnw" type="4001" element="_eUAXsK3vEeSuH7f2GGufnw" source="_dkMEUK3vEeSuH7f2GGufnw" target="_eUEpIK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_eUF3QK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUF3Qa3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_eUF3Qq3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUF3Q63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_eUF3RK3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUF3Ra3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_eUFQMa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_eUFQMq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUFQM63vEeSuH7f2GGufnw" points="[26, -7, -154, -7]$[121, -7, -59, -7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUF3Rq3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUF3R63vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_eUF3SK3vEeSuH7f2GGufnw" type="4001" element="_eUA-wK3vEeSuH7f2GGufnw" source="_eUEpIK3vEeSuH7f2GGufnw" target="_VYOvgK3vEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_eUF3TK3vEeSuH7f2GGufnw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUF3Ta3vEeSuH7f2GGufnw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_eUGeUK3vEeSuH7f2GGufnw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUGeUa3vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_eUGeUq3vEeSuH7f2GGufnw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eUGeU63vEeSuH7f2GGufnw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_eUF3Sa3vEeSuH7f2GGufnw" routing="Rectilinear" jumpLinkStatus="Above"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_eUF3Sq3vEeSuH7f2GGufnw" fontColor="7490599" fontName="Lucida Grande" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_eUF3S63vEeSuH7f2GGufnw" points="[1447, 654, 1447, 654]$[1233, 423, 1233, 423]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUGeVK3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_eUGeVa3vEeSuH7f2GGufnw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_CHClILCAEeS2zc2JFFVtPw" type="4001" element="_CGZr8LCAEeS2zc2JFFVtPw" source="_5M47IK3uEeSuH7f2GGufnw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_CHDMMLCAEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CHDMMbCAEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CHDMMrCAEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CHDMM7CAEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_CHDzQLCAEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_CHDzQbCAEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_CHClIbCAEeS2zc2JFFVtPw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_CHClIrCAEeS2zc2JFFVtPw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_CHClI7CAEeS2zc2JFFVtPw" points="[0, -49, 186, 458]$[0, -424, 186, 83]$[-187, -424, -1, 83]$[-187, -458, -1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CHGPgLCAEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_CHGPgbCAEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_H1cc8LCBEeS2zc2JFFVtPw" type="4001" element="_H1L-QLCBEeS2zc2JFFVtPw" source="_55lCAK3uEeSuH7f2GGufnw" target="_5M47IK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_H1cc9LCBEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_H1cc9bCBEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_H1dEALCBEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_H1dEAbCBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_H1dEArCBEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_H1dEA7CBEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_H1cc8bCBEeS2zc2JFFVtPw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_H1cc8rCBEeS2zc2JFFVtPw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_H1cc87CBEeS2zc2JFFVtPw" points="[-59, 8, 148, -127]$[-176, 8, 31, -127]$[-176, 86, 31, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_H1dEBLCBEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_H1drELCBEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_AgyXALCWEeS2zc2JFFVtPw" type="4001" element="_AgrCQLCWEeS2zc2JFFVtPw" source="_87fT0K3uEeSuH7f2GGufnw" target="_Agv6wLCWEeS2zc2JFFVtPw">
+ <children xmi:type="notation:Node" xmi:id="_AgyXBLCWEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AgyXBbCWEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Agy-ELCWEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Agy-EbCWEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_Agy-ErCWEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Agy-E7CWEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_AgyXAbCWEeS2zc2JFFVtPw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_AgyXArCWEeS2zc2JFFVtPw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_AgyXA7CWEeS2zc2JFFVtPw" points="[0, 49, -10, -171]$[0, 171, -10, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Agy-FLCWEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Agy-FbCWEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_Agy-FrCWEeS2zc2JFFVtPw" type="4001" element="_AgrpULCWEeS2zc2JFFVtPw" source="_Agv6wLCWEeS2zc2JFFVtPw" target="_87fT0K3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_AgzlILCWEeS2zc2JFFVtPw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AgzlIbCWEeS2zc2JFFVtPw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AgzlIrCWEeS2zc2JFFVtPw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AgzlI7CWEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_AgzlJLCWEeS2zc2JFFVtPw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_AgzlJbCWEeS2zc2JFFVtPw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_Agy-F7CWEeS2zc2JFFVtPw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Agy-GLCWEeS2zc2JFFVtPw" fontColor="7490599" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Agy-GbCWEeS2zc2JFFVtPw" points="[-62, -1, -52, 219]$[-107, -1, -97, 219]$[-107, -219, -97, 1]$[-69, -219, -59, 1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AgzlJrCWEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_AgzlJ7CWEeS2zc2JFFVtPw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_lGVKYLhTEeSH9PQiHQ6eWw" type="4001" element="_lGQ48LhTEeSH9PQiHQ6eWw" source="_lGT8QLhTEeSH9PQiHQ6eWw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_lGVKZLhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lGVKZbhTEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_lGVxcLhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lGVxcbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_lGVxcrhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lGVxc7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_lGVKYbhTEeSH9PQiHQ6eWw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lGVKYrhTEeSH9PQiHQ6eWw" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lGVKY7hTEeSH9PQiHQ6eWw" points="[850, 260, 850, 260]$[660, -337, 660, -337]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lGW_kLhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lGW_kbhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_oyvxwLhTEeSH9PQiHQ6eWw" type="4001" element="_oymn0LhTEeSH9PQiHQ6eWw" source="_lGT8QLhTEeSH9PQiHQ6eWw" target="_oysHYLhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_oyw_4LhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oyw_4bhTEeSH9PQiHQ6eWw" x="11" y="67"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_oyxm8LhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oyxm8bhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_oyxm8rhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oyxm87hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_oyvxwbhTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_oyvxwrhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oyvxw7hTEeSH9PQiHQ6eWw" points="[-1, 49, -1, -107]$[-1, 107, -1, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oyxm9LhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oyxm9bhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_oyxm9rhTEeSH9PQiHQ6eWw" type="4001" element="_oynO4LhTEeSH9PQiHQ6eWw" source="_oysHYLhTEeSH9PQiHQ6eWw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_oyyOALhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oyyOAbhTEeSH9PQiHQ6eWw" x="207" y="-46"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_oyy1ELhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oyy1EbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_oyy1ErhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oyy1E7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_oyxm97hTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_oyxm-LhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oyxm-bhTEeSH9PQiHQ6eWw" points="[59, 1, 95, 409]$[121, 1, 157, 409]$[121, -385, 157, 23]$[23, -385, 59, 23]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oyy1FLhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oyy1FbhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_1RYcsLhTEeSH9PQiHQ6eWw" type="4001" element="_1RRvALhTEeSH9PQiHQ6eWw" source="_55lCAK3uEeSuH7f2GGufnw" target="_1RWngLhTEeSH9PQiHQ6eWw">
+ <children xmi:type="notation:Node" xmi:id="_1RZDwLhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RZDwbhTEeSH9PQiHQ6eWw" x="-59" y="91"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_1RZDwrhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RZDw7hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_1RZDxLhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RZDxbhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_1RYcsbhTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_1RYcsrhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1RYcs7hTEeSH9PQiHQ6eWw" points="[7, -49, 25, 323]$[-20, -323, -2, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1RZDxrhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1RZDx7hTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_1RZq0LhTEeSH9PQiHQ6eWw" type="4001" element="_1RSWGrhTEeSH9PQiHQ6eWw" source="_1RWngLhTEeSH9PQiHQ6eWw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_1RZq1LhTEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RZq1bhTEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_1RZq1rhTEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RZq17hTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_1RZq2LhTEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1RZq2bhTEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_1RZq0bhTEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_1RZq0rhTEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1RZq07hTEeSH9PQiHQ6eWw" points="[-59, -25, 316, -25]$[-316, -25, 59, -25]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1RZq2rhTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1RZq27hTEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VZPfFrhWEeSH9PQiHQ6eWw" type="4001" element="_VZIKXLhWEeSH9PQiHQ6eWw" source="_VZNp4LhWEeSH9PQiHQ6eWw" target="_55lCAK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_VZQGILhWEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZQGIbhWEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VZQGIrhWEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZQGI7hWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VZQGJLhWEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZQGJbhWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VZPfF7hWEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VZPfGLhWEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VZPfGbhWEeSH9PQiHQ6eWw" points="[59, 1, 287, -599]$[76, 1, 304, -599]$[76, 623, 304, 23]$[-169, 623, 59, 23]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VZQGJrhWEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VZQGJ7hWEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_VZQGKLhWEeSH9PQiHQ6eWw" type="4001" element="_VZIxbLhWEeSH9PQiHQ6eWw" source="_VZNp4LhWEeSH9PQiHQ6eWw" target="_87fT0K3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_VZQGLLhWEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZQGLbhWEeSH9PQiHQ6eWw" x="117" y="-55"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VZQGLrhWEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZQGL7hWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_VZQtMLhWEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZQtMbhWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_VZQGKbhWEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VZQGKrhWEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VZQGK7hWEeSH9PQiHQ6eWw" points="[-30, 49, 223, -934]$[-30, 899, 223, -84]$[-224, 899, 29, -84]$[-224, 934, 29, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VZQtMrhWEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VZQtM7hWEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_w4uTALhWEeSH9PQiHQ6eWw" type="4001" element="_w4pagLhWEeSH9PQiHQ6eWw" source="_VZNp4LhWEeSH9PQiHQ6eWw" target="_28wEgK3uEeSuH7f2GGufnw">
+ <children xmi:type="notation:Node" xmi:id="_w4u6ELhWEeSH9PQiHQ6eWw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_w4u6EbhWEeSH9PQiHQ6eWw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_w4u6ErhWEeSH9PQiHQ6eWw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_w4u6E7hWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_w4u6FLhWEeSH9PQiHQ6eWw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_w4u6FbhWEeSH9PQiHQ6eWw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_w4uTAbhWEeSH9PQiHQ6eWw" routing="Rectilinear"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_w4uTArhWEeSH9PQiHQ6eWw" fontColor="7490599" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_w4uTA7hWEeSH9PQiHQ6eWw" points="[-59, 21, 562, -207]$[-622, 21, -1, -207]$[-622, 179, -1, -49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w4vhILhWEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_w4vhIbhWEeSH9PQiHQ6eWw" id="(0.5,0.5)"/>
+ </edges>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_55jM0a3uEeSuH7f2GGufnw" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_55jM0q3uEeSuH7f2GGufnw">
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-OaMa3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-OaMq3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-OaM63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-PoUa3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-PoUq3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-PoU63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-Rdgq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-Rdg63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-RdhK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-SEkq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-SEk63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-SElK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-Sroq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-Sro63wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-SrpK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-TSsa3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-TSsq3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-TSs63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-T5wa3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-T5wq3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-T5w63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-T5za3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-T5zq3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-T5z63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-Ug2K3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-Ug2a3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-Ug2q3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-VH4q3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-VH463wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-VH5K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-Vu9q3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-Vu963wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-Vu-K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-WWCK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-WWCa3wEeSuH7f2GGufnw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-WWCq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-W9Ga3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-W9Gq3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-W9G63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_T-XkKa3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_T-XkKq3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_T-XkK63wEeSuH7f2GGufnw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_H1MlUrCBEeS2zc2JFFVtPw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_H1MlU7CBEeS2zc2JFFVtPw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_H1MlVLCBEeS2zc2JFFVtPw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_AgrCQ7CWEeS2zc2JFFVtPw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_AgrCRLCWEeS2zc2JFFVtPw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_AgrCRbCWEeS2zc2JFFVtPw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_AgrpU7CWEeS2zc2JFFVtPw" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_AgrpVLCWEeS2zc2JFFVtPw" labelFormat="bold" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_AgrpVbCWEeS2zc2JFFVtPw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_oymn07hTEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_oymn1LhTEeSH9PQiHQ6eWw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_oymn1bhTEeSH9PQiHQ6eWw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_1RSWELhTEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_1RSWEbhTEeSH9PQiHQ6eWw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_1RSWErhTEeSH9PQiHQ6eWw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_VZIxYrhWEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_VZIxY7hWEeSH9PQiHQ6eWw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_VZIxZLhWEeSH9PQiHQ6eWw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_VZIxb7hWEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_VZIxcLhWEeSH9PQiHQ6eWw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_VZIxcbhWEeSH9PQiHQ6eWw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <computedStyleDescriptions xmi:type="style:EdgeStyleDescription" xmi:id="_w4pagrhWEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <centerLabelStyleDescription xmi:type="style:CenterLabelStyleDescription" xmi:id="_w4pag7hWEeSH9PQiHQ6eWw" showIcon="false" labelExpression="service:render">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ </centerLabelStyleDescription>
+ <endLabelStyleDescription xmi:type="style:EndLabelStyleDescription" xmi:id="_w4pahLhWEeSH9PQiHQ6eWw" labelSize="6" showIcon="false" labelExpression="service:eKeysLabel">
+ <labelColor xmi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='dark_blue']"/>
+ </endLabelStyleDescription>
+ </computedStyleDescriptions>
+ <cache xmi:type="diagram:DiagramElementMapping2ModelElement" xmi:id="_55jz4K3uEeSuH7f2GGufnw">
+ <key xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-NzIK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Entity/attributes"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-OaMK3wEeSuH7f2GGufnw" key="_91-mIK3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-OaNK3wEeSuH7f2GGufnw" value="_T-OaMa3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-PBQK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Entity/operations"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-PoUK3wEeSuH7f2GGufnw" key="_KohrkK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-PoVK3wEeSuH7f2GGufnw" value="_T-PoUa3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-RdgK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/protocols"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-Rdga3wEeSuH7f2GGufnw" key="_Xa4jwK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-Rdha3wEeSuH7f2GGufnw" value="_T-Rdgq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-SEkK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Capsule/ports"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-SEka3wEeSuH7f2GGufnw" key="_VYLsMK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-SEla3wEeSuH7f2GGufnw" value="_T-SEkq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-SroK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Capsule/connectors"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-Sroa3wEeSuH7f2GGufnw" key="_dkGkwK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-Srpa3wEeSuH7f2GGufnw" value="_T-Sroq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-SrrK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Attribute/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-TSsK3wEeSuH7f2GGufnw" key="_91-mLa3uEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-TStK3wEeSuH7f2GGufnw" value="_T-TSsa3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-TSu63wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/returnType"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-T5wK3wEeSuH7f2GGufnw" key="_IJJfEK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-T5xK3wEeSuH7f2GGufnw" value="_T-T5wa3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-T5y63wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/parameters"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-T5zK3wEeSuH7f2GGufnw" key="_JkteIK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-T50K3wEeSuH7f2GGufnw" value="_T-T5za3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-Ug1q3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Parameter/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-Ug163wEeSuH7f2GGufnw" key="_JkuFNq3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-Ug263wEeSuH7f2GGufnw" value="_T-Ug2K3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-VH4K3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Port/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-VH4a3wEeSuH7f2GGufnw" key="_Xa5K3K3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-VH5a3wEeSuH7f2GGufnw" value="_T-VH4q3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-Vu9K3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-Vu9a3wEeSuH7f2GGufnw" key="_ZyGSwK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-Vu-a3wEeSuH7f2GGufnw" value="_T-Vu9q3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-WWBq3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Signal/parameters"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-WWB63wEeSuH7f2GGufnw" key="_buaOcK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-W9EK3wEeSuH7f2GGufnw" value="_T-WWCK3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-W9F63wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Connector/ends"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-W9GK3wEeSuH7f2GGufnw" key="_eUAXsK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-XkIK3wEeSuH7f2GGufnw" value="_T-W9Ga3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_T-XkJ63wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/role"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_T-XkKK3wEeSuH7f2GGufnw" key="_eUA-wK3vEeSuH7f2GGufnw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_T-XkLK3wEeSuH7f2GGufnw" value="_T-XkKa3wEeSuH7f2GGufnw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_H1MlULCBEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/entities"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_H1MlUbCBEeS2zc2JFFVtPw" key="_H1L-QLCBEeS2zc2JFFVtPw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_H1MlVbCBEeS2zc2JFFVtPw" value="_H1MlUrCBEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_AgrCQbCWEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Capsule/parts"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_AgrCQrCWEeS2zc2JFFVtPw" key="_AgrCQLCWEeS2zc2JFFVtPw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_AgrCRrCWEeS2zc2JFFVtPw" value="_AgrCQ7CWEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_AgrpUbCWEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//CapsulePart/type"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_AgrpUrCWEeS2zc2JFFVtPw" key="_AgrpULCWEeS2zc2JFFVtPw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_AgrpVrCWEeS2zc2JFFVtPw" value="_AgrpU7CWEeS2zc2JFFVtPw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_oymn0bhTEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//StructType/structMembers"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_oymn0rhTEeSH9PQiHQ6eWw" key="_oymn0LhTEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_oymn1rhTEeSH9PQiHQ6eWw" value="_oymn07hTEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_1RRvAbhTEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Package/typedefinitions"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_1RRvArhTEeSH9PQiHQ6eWw" key="_1RRvALhTEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_1RSWE7hTEeSH9PQiHQ6eWw" value="_1RSWELhTEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_VZIKULhWEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/localScopeTemporaryTypes"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_w4pagbhWEeSH9PQiHQ6eWw" key="_w4pagLhWEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_w4pahbhWEeSH9PQiHQ6eWw" value="_w4pagrhWEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_VZIxYLhWEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/rootPackages"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_VZIxYbhWEeSH9PQiHQ6eWw" key="_VZIKXLhWEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_VZIxZbhWEeSH9PQiHQ6eWw" value="_VZIxYrhWEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ <value xmi:type="diagram:ModelElement2ViewVariable" xmi:id="_VZIxbbhWEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EReference" href="common.ecore#//Model/topEntities"/>
+ <value xmi:type="diagram:ViewVariable2ContainerVariable" xmi:id="_VZIxbrhWEeSH9PQiHQ6eWw" key="_VZIxbLhWEeSH9PQiHQ6eWw">
+ <value xmi:type="diagram:ContainerVariable2StyleDescription" xmi:id="_VZJYcLhWEeSH9PQiHQ6eWw" value="_VZIxb7hWEeSH9PQiHQ6eWw">
+ <key xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </value>
+ </value>
+ </value>
+ </cache>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_28ovwK3uEeSuH7f2GGufnw" name="Type" tooltipText="" incomingEdges="_91-mLa3uEeSuH7f2GGufnw __mXlsK3uEeSuH7f2GGufnw _IJJfEK3vEeSuH7f2GGufnw _JkuFNq3vEeSuH7f2GGufnw _CGZr8LCAEeS2zc2JFFVtPw _lGQ48LhTEeSH9PQiHQ6eWw _oynO4LhTEeSH9PQiHQ6eWw _1RSWGrhTEeSH9PQiHQ6eWw _w4pagLhWEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Type"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Type"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_28pW0K3uEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_interface.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_28pW0a3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.0/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_28pW0q3uEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_28pW063uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_28pW1K3uEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_5MzbkK3uEeSuH7f2GGufnw" name="Entity" tooltipText="" outgoingEdges="_91-mIK3uEeSuH7f2GGufnw _KohrkK3vEeSuH7f2GGufnw _CGZr8LCAEeS2zc2JFFVtPw" incomingEdges="_87eFsK3uEeSuH7f2GGufnw _H1L-QLCBEeS2zc2JFFVtPw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Entity"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Entity"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_5M0CoK3uEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_5M0Coa3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_5M0Coq3uEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_5M0Co63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_5M0CpK3uEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_55dtQK3uEeSuH7f2GGufnw" name="Package" tooltipText="" outgoingEdges="_Xa4jwK3vEeSuH7f2GGufnw _H1L-QLCBEeS2zc2JFFVtPw _1RRvALhTEeSH9PQiHQ6eWw" incomingEdges="_VZIKXLhWEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Package"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Package"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_55eUUK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_55eUUa3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_55eUUq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_55eUU63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_55eUVK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_87Ww8K3uEeSuH7f2GGufnw" name="Capsule" tooltipText="" outgoingEdges="_87eFsK3uEeSuH7f2GGufnw _VYLsMK3vEeSuH7f2GGufnw _dkGkwK3vEeSuH7f2GGufnw _AgrCQLCWEeS2zc2JFFVtPw" incomingEdges="_AgrpULCWEeS2zc2JFFVtPw _VZIxbLhWEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_87Ww8a3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_87Ww8q3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_87Ww863uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_87Ww9K3uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_87Ww9a3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_87eFsK3uEeSuH7f2GGufnw" sourceNode="_87Ww8K3uEeSuH7f2GGufnw" targetNode="_5MzbkK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Capsule"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Capsule/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Capsule/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_87eFsa3uEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_87eFsq3uEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_87eFs63uEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_87eFtK3uEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_87eFta3uEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_87eFtq3uEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_912qUK3uEeSuH7f2GGufnw" name="Attribute" tooltipText="" outgoingEdges="_91-mLa3uEeSuH7f2GGufnw _FfCCMK3vEeSuH7f2GGufnw" incomingEdges="_91-mIK3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_913RYK3uEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_913RYa3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_913RYq3uEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_913RY63uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_913RZK3uEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_918J4K3uEeSuH7f2GGufnw" name="visibility : VIsibilityKind = PUBLIC" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/visibility"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Attribute/visibility"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_918J4a3uEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_918J4q3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_918J463uEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_918J5K3uEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_91-mIK3uEeSuH7f2GGufnw" name="[0..*] attributes" sourceNode="_5MzbkK3uEeSuH7f2GGufnw" targetNode="_912qUK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Entity/attributes"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Entity/attributes"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-OaNa3wEeSuH7f2GGufnw" description="_T-OaMa3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-OaNq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-OaN63wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-OaOK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-OaOa3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-OaOq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_91-mLa3uEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_912qUK3uEeSuH7f2GGufnw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Attribute/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Attribute/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-TSta3wEeSuH7f2GGufnw" description="_T-TSsa3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-TStq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-TSt63wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-TSuK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-TSua3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-TSuq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="__mPp4K3uEeSuH7f2GGufnw" name="PrimitiveType" tooltipText="" outgoingEdges="__mXlsK3uEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="__mPp4a3uEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_interface.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="__mPp4q3uEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.0/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="__mPp463uEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="__mPp5K3uEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="__mPp5a3uEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="__mXlsK3uEeSuH7f2GGufnw" sourceNode="__mPp4K3uEeSuH7f2GGufnw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//PrimitiveType"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//PrimitiveType/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="__mXlsa3uEeSuH7f2GGufnw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="__mXlsq3uEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="__mXls63uEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="__mXltK3uEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="__mXlta3uEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="__mXltq3uEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Fe3qIK3vEeSuH7f2GGufnw" name="MultiplicityElement" tooltipText="" incomingEdges="_FfCCMK3vEeSuH7f2GGufnw _JkvTUK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//MultiplicityElement"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//MultiplicityElement"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Fe4RMK3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe4RMa3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe4RMq3vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe4RM63vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe4RNK3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Fe-X0K3vEeSuH7f2GGufnw" name="isUnique : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/isUnique"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/isUnique"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Fe-X0a3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe-X0q3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe-X063vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Fe-X1K3vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Fe--4K3vEeSuH7f2GGufnw" name="isOrdered : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/isOrdered"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/isOrdered"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Fe--4a3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe--4q3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe--463vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Fe--5K3vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Fe--5a3vEeSuH7f2GGufnw" name="lowerBound : EInt = 0" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/lowerBound"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/lowerBound"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Fe--5q3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe--563vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe--6K3vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Fe--6a3vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Fe--6q3vEeSuH7f2GGufnw" name="upperBound : EInt = 0" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/upperBound"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//MultiplicityElement/upperBound"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Fe_l8K3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe_l8a3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Fe_l8q3vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Fe_l863vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_FfCCMK3vEeSuH7f2GGufnw" sourceNode="_912qUK3uEeSuH7f2GGufnw" targetNode="_Fe3qIK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Attribute"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Attribute/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Attribute/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_FfCpQK3vEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_FfCpQa3vEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_FfCpQq3vEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_FfCpQ63vEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_FfCpRK3vEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_FfCpRa3vEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_IJAVIK3vEeSuH7f2GGufnw" name="OperationSignature" tooltipText="" outgoingEdges="_IJJfEK3vEeSuH7f2GGufnw _JkteIK3vEeSuH7f2GGufnw" incomingEdges="_KojgwK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//OperationSignature"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//OperationSignature"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_IJA8MK3vEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_IJA8Ma3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_IJA8Mq3vEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_IJA8M63vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_IJA8NK3vEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_IJJfEK3vEeSuH7f2GGufnw" name="[1..1] returnType" sourceNode="_IJAVIK3vEeSuH7f2GGufnw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/returnType"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/returnType"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-T5xa3wEeSuH7f2GGufnw" description="_T-T5wa3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-T5xq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-T5x63wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-T5yK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-T5ya3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-T5yq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_JkgCwK3vEeSuH7f2GGufnw" name="Parameter" tooltipText="" outgoingEdges="_JkuFNq3vEeSuH7f2GGufnw _JkvTUK3vEeSuH7f2GGufnw" incomingEdges="_JkteIK3vEeSuH7f2GGufnw _buaOcK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Jkgp0K3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkgp0a3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkgp0q3vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkgp063vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkgp1K3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Jkqa0K3vEeSuH7f2GGufnw" name="direction : DirectionKind = IN" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Parameter/direction"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Parameter/direction"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_JkrB4K3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_JkrB4a3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_JkrB4q3vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_JkrB463vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_JkteIK3vEeSuH7f2GGufnw" name="[0..*] parameters" sourceNode="_IJAVIK3vEeSuH7f2GGufnw" targetNode="_JkgCwK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/parameters"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//OperationSignature/parameters"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-Ug0K3wEeSuH7f2GGufnw" description="_T-T5za3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Ug0a3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-Ug0q3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Ug063wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-Ug1K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Ug1a3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_JkuFNq3vEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_JkgCwK3vEeSuH7f2GGufnw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Parameter/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Parameter/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-Ug3K3wEeSuH7f2GGufnw" description="_T-Ug2K3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Ug3a3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-Ug3q3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Ug363wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-Ug4K3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Ug4a3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_JkvTUK3vEeSuH7f2GGufnw" sourceNode="_JkgCwK3vEeSuH7f2GGufnw" targetNode="_Fe3qIK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Parameter"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Parameter/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Parameter/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_JkwhcK3vEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkwhca3vEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Jkwhcq3vEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkwhc63vEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_JkwhdK3vEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Jkwhda3vEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_KoX6kK3vEeSuH7f2GGufnw" name="Operation" tooltipText="" outgoingEdges="_KojgwK3vEeSuH7f2GGufnw" incomingEdges="_KohrkK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_KoYhoK3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_KoYhoa3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_KoYhoq3vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_KoYho63vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_KoYhpK3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_KohrkK3vEeSuH7f2GGufnw" name="[0..*] operations" sourceNode="_5MzbkK3uEeSuH7f2GGufnw" targetNode="_KoX6kK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Entity/operations"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Entity/operations"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-PoVa3wEeSuH7f2GGufnw" description="_T-PoUa3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-PoVq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-PoV63wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-PoWK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-PoWa3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-PoWq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_KojgwK3vEeSuH7f2GGufnw" sourceNode="_KoX6kK3vEeSuH7f2GGufnw" targetNode="_IJAVIK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Operation"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Operation/@eGenericSuperTypes.0"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Operation/@eGenericSuperTypes.1"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_Kojgwa3vEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_Kojgwq3vEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_Kojgw63vEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_KojgxK3vEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_Kojgxa3vEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Kojgxq3vEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_VYAtEK3vEeSuH7f2GGufnw" name="Port" tooltipText="" outgoingEdges="_Xa5K3K3vEeSuH7f2GGufnw" incomingEdges="_VYLsMK3vEeSuH7f2GGufnw _eUA-wK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Port"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Port"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_VYBUIK3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VYBUIa3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_VYBUIq3vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_VYBUI63vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_VYBUJK3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_VYIo4K3vEeSuH7f2GGufnw" name="conjugate : EBoolean = false" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//Port/conjugate"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//Port/conjugate"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_VYIo4a3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VYIo4q3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_VYIo463vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_VYIo5K3vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_VYIo5a3vEeSuH7f2GGufnw" name="multiplicity : EInt = 1" tooltipText="">
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_VYIo5q3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VYIo563vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_VYIo6K3vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_VYIo6a3vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VYLsMK3vEeSuH7f2GGufnw" name="[0..*] ports" sourceNode="_87Ww8K3uEeSuH7f2GGufnw" targetNode="_VYAtEK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Capsule/ports"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Capsule/ports"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-SElq3wEeSuH7f2GGufnw" description="_T-SEkq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-SEl63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-SEmK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-SEma3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-SEmq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-SEm63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_XaqhUK3vEeSuH7f2GGufnw" name="Protocol" tooltipText="" outgoingEdges="_ZyGSwK3vEeSuH7f2GGufnw" incomingEdges="_Xa4jwK3vEeSuH7f2GGufnw _Xa5K3K3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Protocol"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Protocol"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_XarIYK3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_XarIYa3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_XarIYq3vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_XarIY63vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_XarIZK3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Xa4jwK3vEeSuH7f2GGufnw" name="[0..*] protocols" sourceNode="_55dtQK3uEeSuH7f2GGufnw" targetNode="_XaqhUK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/protocols"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/protocols"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-Rdhq3wEeSuH7f2GGufnw" description="_T-Rdgq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Rdh63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-RdiK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Rdia3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-Rdiq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Rdi63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_Xa5K3K3vEeSuH7f2GGufnw" name="[1..1] type" sourceNode="_VYAtEK3vEeSuH7f2GGufnw" targetNode="_XaqhUK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Port/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Port/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-VH5q3wEeSuH7f2GGufnw" description="_T-VH4q3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-VH563wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-Vu8K3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Vu8a3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-Vu8q3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Vu863wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_Zxz-4K3vEeSuH7f2GGufnw" name="ProtocolBehaviourFeature" tooltipText="" incomingEdges="_ZyGSwK3vEeSuH7f2GGufnw _bucqsK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ProtocolBehaviourFeature"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ProtocolBehaviourFeature"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_Zxz-4a3vEeSuH7f2GGufnw" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Zxz-4q3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Zxz-463vEeSuH7f2GGufnw" red="125" green="125" blue="125"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Zxz-5K3vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_Zxz-5a3vEeSuH7f2GGufnw" red="228" green="228" blue="228"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Zx_lEK3vEeSuH7f2GGufnw" name="kind : ProtocolBehaviourFeatureKind = IN" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//ProtocolBehaviourFeature/kind"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//ProtocolBehaviourFeature/kind"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_ZyAMIK3vEeSuH7f2GGufnw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_ZyAMIa3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_ZyAMIq3vEeSuH7f2GGufnw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_ZyAMI63vEeSuH7f2GGufnw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_ZyGSwK3vEeSuH7f2GGufnw" name="[0..*] protocolBehaviourFeature" sourceNode="_XaqhUK3vEeSuH7f2GGufnw" targetNode="_Zxz-4K3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Protocol/protocolBehaviourFeatures"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-WWAK3wEeSuH7f2GGufnw" description="_T-Vu9q3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-WWAa3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-WWAq3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-WWA63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-WWBK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-WWBa3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_buMMAK3vEeSuH7f2GGufnw" name="Signal" tooltipText="" outgoingEdges="_buaOcK3vEeSuH7f2GGufnw _bucqsK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Signal"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Signal"/>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_buMMAa3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_buMMAq3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_buMMA63vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_buMMBK3vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_buMMBa3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_buaOcK3vEeSuH7f2GGufnw" name="[0..*] parameters" sourceNode="_buMMAK3vEeSuH7f2GGufnw" targetNode="_JkgCwK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Signal/parameters"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Signal/parameters"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-W9Ea3wEeSuH7f2GGufnw" description="_T-WWCK3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-W9Eq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-W9E63wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-W9FK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-W9Fa3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-W9Fq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_bucqsK3vEeSuH7f2GGufnw" sourceNode="_buMMAK3vEeSuH7f2GGufnw" targetNode="_Zxz-4K3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Signal"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Signal/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_bucqsa3vEeSuH7f2GGufnw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_bucqsq3vEeSuH7f2GGufnw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_bucqs63vEeSuH7f2GGufnw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_bucqtK3vEeSuH7f2GGufnw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_bucqta3vEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_bucqtq3vEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_dj2GEK3vEeSuH7f2GGufnw" name="Connector" tooltipText="" outgoingEdges="_eUAXsK3vEeSuH7f2GGufnw" incomingEdges="_dkGkwK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Connector"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Connector"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_dj2GEa3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_dj2GEq3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_dj2GE63vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_dj2GFK3vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_dj2GFa3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_dkGkwK3vEeSuH7f2GGufnw" name="[0..*] connectors" sourceNode="_87Ww8K3uEeSuH7f2GGufnw" targetNode="_dj2GEK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Capsule/connectors"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Capsule/connectors"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-Srpq3wEeSuH7f2GGufnw" description="_T-Sroq3wEeSuH7f2GGufnw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Srp63wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-SrqK3wEeSuH7f2GGufnw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Srqa3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-Srqq3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-Srq63wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_eTuD0K3vEeSuH7f2GGufnw" name="ConnectorEnd" tooltipText="" outgoingEdges="_eUA-wK3vEeSuH7f2GGufnw" incomingEdges="_eUAXsK3vEeSuH7f2GGufnw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//ConnectorEnd"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//ConnectorEnd"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_eTuD0a3vEeSuH7f2GGufnw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_eTuD0q3vEeSuH7f2GGufnw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_eTuD063vEeSuH7f2GGufnw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_eTuD1K3vEeSuH7f2GGufnw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_eTuD1a3vEeSuH7f2GGufnw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_eUAXsK3vEeSuH7f2GGufnw" name="[2..2] ends" sourceNode="_dj2GEK3vEeSuH7f2GGufnw" targetNode="_eTuD0K3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Connector/ends"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Connector/ends"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-XkIa3wEeSuH7f2GGufnw" description="_T-W9Ga3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-XkIq3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-XkI63wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-XkJK3wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-XkJa3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-XkJq3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_eUA-wK3vEeSuH7f2GGufnw" name="[1..1] role" sourceNode="_eTuD0K3vEeSuH7f2GGufnw" targetNode="_VYAtEK3vEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/role"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//ConnectorEnd/role"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_T-YLMK3wEeSuH7f2GGufnw" description="_T-XkKa3wEeSuH7f2GGufnw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_T-YLMa3wEeSuH7f2GGufnw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_T-YLMq3wEeSuH7f2GGufnw" labelFormat="bold" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-YLM63wEeSuH7f2GGufnw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_T-YLNK3wEeSuH7f2GGufnw" labelSize="6" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_T-YLNa3wEeSuH7f2GGufnw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_CGZr8LCAEeS2zc2JFFVtPw" sourceNode="_5MzbkK3uEeSuH7f2GGufnw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Entity"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//Entity/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_CGZr8bCAEeS2zc2JFFVtPw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_CGZr8rCAEeS2zc2JFFVtPw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_CGZr87CAEeS2zc2JFFVtPw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_CGZr9LCAEeS2zc2JFFVtPw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_CGZr9bCAEeS2zc2JFFVtPw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_CGZr9rCAEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_H1L-QLCBEeS2zc2JFFVtPw" name="[0..*] entities" sourceNode="_55dtQK3uEeSuH7f2GGufnw" targetNode="_5MzbkK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/entities"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/entities"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_H1MlVrCBEeS2zc2JFFVtPw" description="_H1MlUrCBEeS2zc2JFFVtPw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_H1MlV7CBEeS2zc2JFFVtPw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_H1MlWLCBEeS2zc2JFFVtPw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_H1MlWbCBEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_H1MlWrCBEeS2zc2JFFVtPw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_H1MlW7CBEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_AgSnwLCWEeS2zc2JFFVtPw" name="CapsulePart" tooltipText="" outgoingEdges="_AgrpULCWEeS2zc2JFFVtPw" incomingEdges="_AgrCQLCWEeS2zc2JFFVtPw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//CapsulePart"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//CapsulePart"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_AgTO0LCWEeS2zc2JFFVtPw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AgTO0bCWEeS2zc2JFFVtPw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_AgTO0rCWEeS2zc2JFFVtPw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_AgTO07CWEeS2zc2JFFVtPw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_AgTO1LCWEeS2zc2JFFVtPw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_Agk7oLCWEeS2zc2JFFVtPw" name="kind : CapsuleKind = FIXED" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//CapsulePart/kind"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//CapsulePart/kind"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_Agk7obCWEeS2zc2JFFVtPw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_Agk7orCWEeS2zc2JFFVtPw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Agk7o7CWEeS2zc2JFFVtPw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_Agk7pLCWEeS2zc2JFFVtPw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_AglisLCWEeS2zc2JFFVtPw" name="multiplicity : EInt = 1" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="common.ecore#//CapsulePart/multiplicity"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="common.ecore#//CapsulePart/multiplicity"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_AglisbCWEeS2zc2JFFVtPw" labelAlignment="LEFT">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AglisrCWEeS2zc2JFFVtPw"/>
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_Aglis7CWEeS2zc2JFFVtPw"/>
+ <color xmi:type="viewpoint:RGBValues" xmi:id="_AglitLCWEeS2zc2JFFVtPw"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_AgrCQLCWEeS2zc2JFFVtPw" name="[0..*] parts" sourceNode="_87Ww8K3uEeSuH7f2GGufnw" targetNode="_AgSnwLCWEeS2zc2JFFVtPw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Capsule/parts"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Capsule/parts"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_AgrCR7CWEeS2zc2JFFVtPw" description="_AgrCQ7CWEeS2zc2JFFVtPw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_AgrCSLCWEeS2zc2JFFVtPw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_AgrCSbCWEeS2zc2JFFVtPw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AgrCSrCWEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_AgrCS7CWEeS2zc2JFFVtPw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AgrCTLCWEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_AgrpULCWEeS2zc2JFFVtPw" name="[1..1] type" sourceNode="_AgSnwLCWEeS2zc2JFFVtPw" targetNode="_87Ww8K3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//CapsulePart/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//CapsulePart/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_AgrpV7CWEeS2zc2JFFVtPw" description="_AgrpU7CWEeS2zc2JFFVtPw" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_AgrpWLCWEeS2zc2JFFVtPw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_AgrpWbCWEeS2zc2JFFVtPw" labelFormat="bold" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AgrpWrCWEeS2zc2JFFVtPw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_AgrpW7CWEeS2zc2JFFVtPw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_AgrpXLCWEeS2zc2JFFVtPw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_lF3QULhTEeSH9PQiHQ6eWw" name="StructType" tooltipText="" outgoingEdges="_lGQ48LhTEeSH9PQiHQ6eWw _oymn0LhTEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructType"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//StructType"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_lF33YLhTEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_lF33YbhTEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_lF33YrhTEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_lF33Y7hTEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_lF33ZLhTEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_lGQ48LhTEeSH9PQiHQ6eWw" sourceNode="_lF3QULhTEeSH9PQiHQ6eWw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructType"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="common.ecore#//StructType/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_lGQ48bhTEeSH9PQiHQ6eWw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_lGQ48rhTEeSH9PQiHQ6eWw" red="136" green="136" blue="136"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_lGQ487hTEeSH9PQiHQ6eWw" labelFormat="italic" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_lGQ49LhTEeSH9PQiHQ6eWw"/>
+ </beginLabelStyle>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_lGQ49bhTEeSH9PQiHQ6eWw" showIcon="false">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_lGQ49rhTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_oyR3sLhTEeSH9PQiHQ6eWw" name="StructMember" tooltipText="" outgoingEdges="_oynO4LhTEeSH9PQiHQ6eWw" incomingEdges="_oymn0LhTEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//StructMember"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//StructMember"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_oyR3sbhTEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_oyR3srhTEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_oyR3s7hTEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_oyR3tLhTEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_oyR3tbhTEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_oymn0LhTEeSH9PQiHQ6eWw" name="[0..*] structMembers" sourceNode="_lF3QULhTEeSH9PQiHQ6eWw" targetNode="_oyR3sLhTEeSH9PQiHQ6eWw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//StructType/structMembers"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//StructType/structMembers"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_oymn17hTEeSH9PQiHQ6eWw" description="_oymn07hTEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_oymn2LhTEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_oymn2bhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_oymn2rhTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_oymn27hTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_oymn3LhTEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_oynO4LhTEeSH9PQiHQ6eWw" name="[0..1] type" sourceNode="_oyR3sLhTEeSH9PQiHQ6eWw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//StructMember/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//StructMember/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_oynO4bhTEeSH9PQiHQ6eWw" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_oynO4rhTEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_oynO47hTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_oynO5LhTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_oynO5bhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_oynO5rhTEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_1Q-NALhTEeSH9PQiHQ6eWw" name="TypeDefinition" tooltipText="" outgoingEdges="_1RSWGrhTEeSH9PQiHQ6eWw" incomingEdges="_1RRvALhTEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//TypeDefinition"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//TypeDefinition"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_1Q-0ELhTEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1Q-0EbhTEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_1Q-0ErhTEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_1Q-0E7hTEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_1Q-0FLhTEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_1RRvALhTEeSH9PQiHQ6eWw" name="[0..*] typedefinitions" sourceNode="_55dtQK3uEeSuH7f2GGufnw" targetNode="_1Q-NALhTEeSH9PQiHQ6eWw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Package/typedefinitions"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Package/typedefinitions"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_1RSWFLhTEeSH9PQiHQ6eWw" description="_1RSWELhTEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_1RSWFbhTEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_1RSWFrhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1RSWF7hTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_1RSWGLhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1RSWGbhTEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_1RSWGrhTEeSH9PQiHQ6eWw" name="[0..1] type" sourceNode="_1Q-NALhTEeSH9PQiHQ6eWw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//TypeDefinition/type"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//TypeDefinition/type"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_1RSWG7hTEeSH9PQiHQ6eWw" routingStyle="manhattan">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']/@style"/>
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_1RSWHLhTEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_1RSWHbhTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1RSWHrhTEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_1RSWH7hTEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_1RSWILhTEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_VYt6oLhWEeSH9PQiHQ6eWw" name="Model" tooltipText="" outgoingEdges="_VZIKXLhWEeSH9PQiHQ6eWw _VZIxbLhWEeSH9PQiHQ6eWw _w4pagLhWEeSH9PQiHQ6eWw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="common.ecore#//Model"/>
+ <semanticElements xmi:type="ecore:EClass" href="common.ecore#//Model"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_VYuhsLhWEeSH9PQiHQ6eWw" backgroundStyle="Liquid">
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VYuhsbhWEeSH9PQiHQ6eWw"/>
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ <borderColor xmi:type="viewpoint:RGBValues" xmi:id="_VYuhsrhWEeSH9PQiHQ6eWw"/>
+ <backgroundColor xmi:type="viewpoint:RGBValues" xmi:id="_VYuhs7hWEeSH9PQiHQ6eWw" red="255" green="255" blue="255"/>
+ <foregroundColor xmi:type="viewpoint:RGBValues" xmi:id="_VYuhtLhWEeSH9PQiHQ6eWw" red="255" green="252" blue="216"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VZIKXLhWEeSH9PQiHQ6eWw" name="[0..*] rootPackages" sourceNode="_VYt6oLhWEeSH9PQiHQ6eWw" targetNode="_55dtQK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/rootPackages"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/rootPackages"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VZIxZrhWEeSH9PQiHQ6eWw" description="_VZIxYrhWEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VZIxZ7hWEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VZIxaLhWEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VZIxabhWEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_VZIxarhWEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VZIxa7hWEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_VZIxbLhWEeSH9PQiHQ6eWw" name="[0..*] topCapsules" sourceNode="_VYt6oLhWEeSH9PQiHQ6eWw" targetNode="_87Ww8K3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/topEntities"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/topEntities"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_VZJYcbhWEeSH9PQiHQ6eWw" description="_VZIxb7hWEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_VZJYcrhWEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_VZJYc7hWEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VZJYdLhWEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_VZJYdbhWEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_VZJYdrhWEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_w4pagLhWEeSH9PQiHQ6eWw" name="[0..*] localScopeTemporaryTypes" sourceNode="_VYt6oLhWEeSH9PQiHQ6eWw" targetNode="_28ovwK3uEeSuH7f2GGufnw">
+ <target xmi:type="ecore:EReference" href="common.ecore#//Model/localScopeTemporaryTypes"/>
+ <semanticElements xmi:type="ecore:EReference" href="common.ecore#//Model/localScopeTemporaryTypes"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_w4pahrhWEeSH9PQiHQ6eWw" description="_w4pagrhWEeSH9PQiHQ6eWw" sourceArrow="FillDiamond" routingStyle="manhattan">
+ <strokeColor xmi:type="viewpoint:RGBValues" xmi:id="_w4pah7hWEeSH9PQiHQ6eWw"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_w4paiLhWEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_w4paibhWEeSH9PQiHQ6eWw"/>
+ </centerLabelStyle>
+ <endLabelStyle xmi:type="diagram:EndLabelStyle" xmi:id="_w4pairhWEeSH9PQiHQ6eWw" showIcon="false">
+ <customFeatures>labelSize</customFeatures>
+ <labelColor xmi:type="viewpoint:RGBValues" xmi:id="_w4pai7hWEeSH9PQiHQ6eWw" red="39" green="76" blue="114"/>
+ </endLabelStyle>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_01bLoq3uEeSuH7f2GGufnw"/>
+ <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+ <target xmi:type="ecore:EPackage" href="common.ecore#/"/>
+ </ownedRepresentations>
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_8fiGsK3lEeSuH7f2GGufnw" initialized="true">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Review']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_8fqCgK3lEeSuH7f2GGufnw" initialized="true">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_8hIpMK3lEeSuH7f2GGufnw" initialized="true">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Generation']"/>
+ </ownedViews>
+</viewpoint:DAnalysis>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/plugin.properties b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/plugin.properties
new file mode 100644
index 0000000..3cd052d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = xtumlrt Common Metamodel
+providerName = Zeligsoft
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/plugin.xml b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/plugin.xml
new file mode 100644
index 0000000..e714615
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated common -->
+ <package
+ uri="http://www.eclipse.org/papyrusrt/xtumlrt/common"
+ class="org.eclipse.papyrusrt.xtumlrt.common.CommonPackage"
+ genModel="model/common.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/pom.xml b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/pom.xml
new file mode 100644
index 0000000..19e017b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.common.model/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.xtumlrt.common.model</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <build>
+ <plugins>
+ <!-- from https://gist.github.com/hwellmann/6044835 -->
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-eclipserun-plugin</artifactId>
+ <version>${tycho.version}</version>
+ <configuration>
+ <!-- linebreaks not permitted in this arg line -->
+ <appArgLine>-data target/workspace -application org.eclipse.emf.codegen.ecore.Generator -projects ${project.basedir} -model ${project.basedir}/model/common.genmodel target/generated/emf</appArgLine>
+ <dependencies>
+ <dependency>
+ <artifactId>org.eclipse.emf.codegen.ecore</artifactId>
+ <type>eclipse-plugin</type>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>mars</id>
+ <url>${mars-repo.url}</url>
+ <layout>p2</layout>
+ </repository>
+ </repositories>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>eclipse-run</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.7</version>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.basedir}/src</outputDirectory>
+ <resources>
+ <resource>
+ <directory>target/generated/emf/src</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
+
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/.classpath b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/.classpath
new file mode 100644
index 0000000..3bc2475
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/.project b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/.project
new file mode 100644
index 0000000..19bbd42
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrusrt.xtumlrt.platform.cpp.model</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.sirius.nature.modelingproject</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/META-INF/MANIFEST.MF b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a474d7e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrusrt.xtumlrt.platform.cpp.model;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: org.eclipse.papyrusrt.xtumlrt.platformcppmodel;
+ uses:="org.eclipse.emf.ecore,
+ org.eclipse.papyrusrt.xtumlrt.platformmodel",
+ org.eclipse.papyrusrt.xtumlrt.platformcppmodel.impl;
+ uses:="org.eclipse.papyrusrt.xtumlrt.platformmodel.impl,
+ org.eclipse.emf.ecore,
+ org.eclipse.papyrusrt.xtumlrt.platformcppmodel,
+ org.eclipse.emf.ecore.impl",
+ org.eclipse.papyrusrt.xtumlrt.platformcppmodel.util;
+ uses:="org.eclipse.emf.ecore.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common.notify.impl,
+ org.eclipse.papyrusrt.xtumlrt.platformcppmodel,
+ org.eclipse.papyrusrt.xtumlrt.platformmodel,
+ org.eclipse.emf.common.notify"
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.papyrusrt.xtumlrt.common.model;visibility:=reexport,
+ org.eclipse.papyrusrt.xtumlrt.platform.model;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/about.html b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/about.html
new file mode 100755
index 0000000..82d49bf
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/about.properties b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/about.properties
new file mode 100755
index 0000000..275de06
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureText=Papyrus for Real Time (Papyrus-RT) \n\
+\n\
+Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others
+\n\
+Papyrus-RT is an industrial-grade, complete modeling environment for the development of complex, software intensive, real-time, embedded, cyber-physical systems.
+Visit https://projects.eclipse.org/projects/modeling.papyrus-rt
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/build.properties b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/build.properties
new file mode 100644
index 0000000..33c0a25
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ about.html
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.aird b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.aird
new file mode 100644
index 0000000..a60f49b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.aird
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_jOs1sMNcEeSzxea5KmjhZg" selectedViews="_jPpQ4MNcEeSzxea5KmjhZg _jPtiUMNcEeSzxea5KmjhZg _jSbfIMNcEeSzxea5KmjhZg" version="10.0.10.201502231700">
+ <models xmi:type="ecore:EPackage" href="platformcppmodel.ecore#/"/>
+ <models xmi:type="genmodel:GenModel" href="platformcppmodel.genmodel#/"/>
+ <models xmi:type="ecore:EPackage" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.ecore#/"/>
+ <models xmi:type="ecore:EPackage" href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+ <models xmi:type="genmodel:GenModel" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.common.model/model/common.genmodel#/"/>
+ <models xmi:type="genmodel:GenModel" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.genmodel#/"/>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_jPpQ4MNcEeSzxea5KmjhZg" initialized="true">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Review']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_jPtiUMNcEeSzxea5KmjhZg" initialized="true">
+ <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_jSTjUMNcEeSzxea5KmjhZg" name="platformcppmodel class diagram">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_jSUKYMNcEeSzxea5KmjhZg" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="_jSUKYcNcEeSzxea5KmjhZg" type="Sirius" element="_jSTjUMNcEeSzxea5KmjhZg" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_uQkAoMNcEeSzxea5KmjhZg" type="2003" element="_uQOpcMNcEeSzxea5KmjhZg">
+ <children xmi:type="notation:Node" xmi:id="_uQknsMNcEeSzxea5KmjhZg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_uQlOwMNcEeSzxea5KmjhZg" type="7004">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_uQlOwcNcEeSzxea5KmjhZg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_uQlOwsNcEeSzxea5KmjhZg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_uQkAocNcEeSzxea5KmjhZg" fontName=".Helvetica Neue DeskInterface" fontHeight="8" italic="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uQkAosNcEeSzxea5KmjhZg" x="336" y="117"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_ukY7kMNcEeSzxea5KmjhZg" type="2003" element="_ukIc4MNcEeSzxea5KmjhZg">
+ <children xmi:type="notation:Node" xmi:id="_ukZioMNcEeSzxea5KmjhZg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_ukaJsMNcEeSzxea5KmjhZg" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_yGvA8MNcEeSzxea5KmjhZg" type="3010" element="_yGa34MNcEeSzxea5KmjhZg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_yGvA8cNcEeSzxea5KmjhZg" fontColor="2697711" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_yGvA8sNcEeSzxea5KmjhZg"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_0BonYMNcEeSzxea5KmjhZg" type="3010" element="_0BYIsMNcEeSzxea5KmjhZg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_0BonYcNcEeSzxea5KmjhZg" fontColor="2697711" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0BonYsNcEeSzxea5KmjhZg"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ukaJscNcEeSzxea5KmjhZg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ukaJssNcEeSzxea5KmjhZg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_ukY7kcNcEeSzxea5KmjhZg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ukY7ksNcEeSzxea5KmjhZg" x="234" y="315" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_v25FQMNcEeSzxea5KmjhZg" type="2003" element="_v2tfEMNcEeSzxea5KmjhZg">
+ <children xmi:type="notation:Node" xmi:id="_v25sUMNcEeSzxea5KmjhZg" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_v25sUcNcEeSzxea5KmjhZg" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_1zzIkMNcEeSzxea5KmjhZg" type="3010" element="_1zfmkMNcEeSzxea5KmjhZg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_1zzIkcNcEeSzxea5KmjhZg" fontColor="2697711" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_1zzIksNcEeSzxea5KmjhZg"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_v25sUsNcEeSzxea5KmjhZg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_v25sU8NcEeSzxea5KmjhZg"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_v25FQcNcEeSzxea5KmjhZg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v25FQsNcEeSzxea5KmjhZg" x="453" y="315" width="120" height="100"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_pz2I4OU2EeSGKagC3h5lQw" type="2003" element="_pzXnwOU2EeSGKagC3h5lQw">
+ <children xmi:type="notation:Node" xmi:id="_p0H1sOU2EeSGKagC3h5lQw" type="5007"/>
+ <children xmi:type="notation:Node" xmi:id="_p0JD0OU2EeSGKagC3h5lQw" type="7004">
+ <children xmi:type="notation:Node" xmi:id="_tTccQOU2EeSGKagC3h5lQw" type="3010" element="_tTGeAOU2EeSGKagC3h5lQw">
+ <styles xmi:type="notation:FontStyle" xmi:id="_tTccQeU2EeSGKagC3h5lQw" fontColor="2697711" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_tTccQuU2EeSGKagC3h5lQw"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_p0JD0eU2EeSGKagC3h5lQw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_p0JD0uU2EeSGKagC3h5lQw"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_pz2I4eU2EeSGKagC3h5lQw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pz2I4uU2EeSGKagC3h5lQw" x="27" y="315" width="120" height="100"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_jSUKYsNcEeSzxea5KmjhZg"/>
+ <edges xmi:type="notation:Edge" xmi:id="_4CGzMMNcEeSzxea5KmjhZg" type="4001" element="_4BkAoMNcEeSzxea5KmjhZg" source="_ukY7kMNcEeSzxea5KmjhZg" target="_uQkAoMNcEeSzxea5KmjhZg">
+ <children xmi:type="notation:Node" xmi:id="_4CHaQMNcEeSzxea5KmjhZg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4CHaQcNcEeSzxea5KmjhZg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4CIBUMNcEeSzxea5KmjhZg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4CIBUcNcEeSzxea5KmjhZg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4CIBUsNcEeSzxea5KmjhZg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4CIBU8NcEeSzxea5KmjhZg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4CGzMcNcEeSzxea5KmjhZg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4CGzMsNcEeSzxea5KmjhZg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4CGzM8NcEeSzxea5KmjhZg" points="[0, 0, -62, 149]$[0, -54, -62, 95]$[61, -54, -1, 95]$[61, -100, -1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4CIBVMNcEeSzxea5KmjhZg" id="(0.5416666666666666,0.03)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4CIBVcNcEeSzxea5KmjhZg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_4nqXUMNcEeSzxea5KmjhZg" type="4001" element="_4nXcYMNcEeSzxea5KmjhZg" source="_v25FQMNcEeSzxea5KmjhZg" target="_uQkAoMNcEeSzxea5KmjhZg">
+ <children xmi:type="notation:Node" xmi:id="_4nq-YMNcEeSzxea5KmjhZg" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4nq-YcNcEeSzxea5KmjhZg" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4nq-YsNcEeSzxea5KmjhZg" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4nq-Y8NcEeSzxea5KmjhZg" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_4nrlcMNcEeSzxea5KmjhZg" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4nrlccNcEeSzxea5KmjhZg" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_4nqXUcNcEeSzxea5KmjhZg" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_4nqXUsNcEeSzxea5KmjhZg" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_4nqXU8NcEeSzxea5KmjhZg" points="[0, 0, 118, 149]$[0, -54, 118, 95]$[-108, -54, 10, 95]$[-108, -100, 10, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4nrlcsNcEeSzxea5KmjhZg" id="(0.4583333333333333,0.04)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_4nrlc8NcEeSzxea5KmjhZg" id="(0.5,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Edge" xmi:id="_wpoU8OU2EeSGKagC3h5lQw" type="4001" element="_wpXPMOU2EeSGKagC3h5lQw" source="_pz2I4OU2EeSGKagC3h5lQw" target="_uQkAoMNcEeSzxea5KmjhZg">
+ <children xmi:type="notation:Node" xmi:id="_wppjEOU2EeSGKagC3h5lQw" type="6001">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wppjEeU2EeSGKagC3h5lQw" y="-10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_wpqxMOU2EeSGKagC3h5lQw" type="6002">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wpqxMeU2EeSGKagC3h5lQw" y="10"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_wprYQOU2EeSGKagC3h5lQw" type="6003">
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wprYQeU2EeSGKagC3h5lQw" y="10"/>
+ </children>
+ <styles xmi:type="notation:ConnectorStyle" xmi:id="_wpoU8eU2EeSGKagC3h5lQw" routing="Tree"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_wpoU8uU2EeSGKagC3h5lQw" fontName=".Helvetica Neue DeskInterface" fontHeight="8"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_wpoU8-U2EeSGKagC3h5lQw" points="[0, -27, -250, 149]$[0, -81, -250, 95]$[249, -81, -1, 95]$[249, -127, -1, 49]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wpsmYOU2EeSGKagC3h5lQw" id="(0.525,0.07)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wpsmYeU2EeSGKagC3h5lQw" id="(0.5,0.5)"/>
+ </edges>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_yGcGAMNcEeSzxea5KmjhZg" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_yGcGAcNcEeSzxea5KmjhZg"/>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_uQOpcMNcEeSzxea5KmjhZg" name="PlatformElement" tooltipText="" incomingEdges="_4BkAoMNcEeSzxea5KmjhZg _4nXcYMNcEeSzxea5KmjhZg _wpXPMOU2EeSGKagC3h5lQw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.ecore#//PlatformElement"/>
+ <semanticElements xmi:type="ecore:EClass" href="platform:/resource/org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.ecore#//PlatformElement"/>
+ <decorations xmi:type="viewpoint:Decoration" xmi:id="_uQfIIMNcEeSzxea5KmjhZg">
+ <description xmi:type="description:SemanticBasedDecoration" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@decorationDescriptionsSet/@decorationDescriptions[name='External']"/>
+ </decorations>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_uQP3kMNcEeSzxea5KmjhZg" labelFormat="italic" iconPath="/org.eclipse.emf.ecoretools.design/icons/full/obj16/EClass_abstract.gif" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="228,228,228">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@conditionnalStyles.1/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_ukIc4MNcEeSzxea5KmjhZg" name="CppInclude" tooltipText="" outgoingEdges="_4BkAoMNcEeSzxea5KmjhZg" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platformcppmodel.ecore#//CppInclude"/>
+ <semanticElements xmi:type="ecore:EClass" href="platformcppmodel.ecore#//CppInclude"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_1UYosMNcEeSzxea5KmjhZg" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_yGa34MNcEeSzxea5KmjhZg" name="header : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//CppInclude/header"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//CppInclude/header"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_zeOYUMNcEeSzxea5KmjhZg" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_0BYIsMNcEeSzxea5KmjhZg" name="body : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//CppInclude/body"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//CppInclude/body"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_1UbE8MNcEeSzxea5KmjhZg" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_v2tfEMNcEeSzxea5KmjhZg" name="CppPtr" tooltipText="" outgoingEdges="_4nXcYMNcEeSzxea5KmjhZg" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platformcppmodel.ecore#//CppPtr"/>
+ <semanticElements xmi:type="ecore:EClass" href="platformcppmodel.ecore#//CppPtr"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_3GKvYMNcEeSzxea5KmjhZg" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_1zfmkMNcEeSzxea5KmjhZg" name="declaration : EString" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//CppPtr/declaration"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//CppPtr/declaration"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_3GNLoMNcEeSzxea5KmjhZg" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4BkAoMNcEeSzxea5KmjhZg" sourceNode="_ukIc4MNcEeSzxea5KmjhZg" targetNode="_uQOpcMNcEeSzxea5KmjhZg">
+ <target xmi:type="ecore:EClass" href="platformcppmodel.ecore#//CppInclude"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="platformcppmodel.ecore#//CppInclude/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4BlOwMNcEeSzxea5KmjhZg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_4BlOwsNcEeSzxea5KmjhZg" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4BlOxMNcEeSzxea5KmjhZg" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_4nXcYMNcEeSzxea5KmjhZg" sourceNode="_v2tfEMNcEeSzxea5KmjhZg" targetNode="_uQOpcMNcEeSzxea5KmjhZg">
+ <target xmi:type="ecore:EClass" href="platformcppmodel.ecore#//CppPtr"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="platformcppmodel.ecore#//CppPtr/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_4nYDcMNcEeSzxea5KmjhZg" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_4nYDcsNcEeSzxea5KmjhZg" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_4nYDdMNcEeSzxea5KmjhZg" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeList" xmi:id="_pzXnwOU2EeSGKagC3h5lQw" name="GenerationProperties" tooltipText="" outgoingEdges="_wpXPMOU2EeSGKagC3h5lQw" width="12" height="10">
+ <target xmi:type="ecore:EClass" href="platformcppmodel.ecore#//GenerationProperties"/>
+ <semanticElements xmi:type="ecore:EClass" href="platformcppmodel.ecore#//GenerationProperties"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_uqr8AOU2EeSGKagC3h5lQw" backgroundStyle="Liquid" foregroundColor="255,252,216">
+ <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
+ <ownedElements xmi:type="diagram:DNodeListElement" xmi:id="_tTGeAOU2EeSGKagC3h5lQw" name="generate : EBoolean = true" tooltipText="">
+ <target xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//GenerationProperties/generate"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="platformcppmodel.ecore#//GenerationProperties/generate"/>
+ <ownedStyle xmi:type="diagram:BundledImage" xmi:id="_uqu_UOU2EeSGKagC3h5lQw" labelAlignment="LEFT">
+ <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
+ </ownedElements>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DEdge" xmi:id="_wpXPMOU2EeSGKagC3h5lQw" sourceNode="_pzXnwOU2EeSGKagC3h5lQw" targetNode="_uQOpcMNcEeSzxea5KmjhZg">
+ <target xmi:type="ecore:EClass" href="platformcppmodel.ecore#//GenerationProperties"/>
+ <semanticElements xmi:type="ecore:EGenericType" href="platformcppmodel.ecore#//GenerationProperties/@eGenericSuperTypes.0"/>
+ <ownedStyle xmi:type="diagram:EdgeStyle" xmi:id="_wpX2QOU2EeSGKagC3h5lQw" targetArrow="InputClosedArrow" routingStyle="tree">
+ <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/>
+ <beginLabelStyle xmi:type="diagram:BeginLabelStyle" xmi:id="_wpX2QeU2EeSGKagC3h5lQw" labelFormat="italic" showIcon="false"/>
+ <centerLabelStyle xmi:type="diagram:CenterLabelStyle" xmi:id="_wpX2QuU2EeSGKagC3h5lQw" showIcon="false"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_jSTjVcNcEeSzxea5KmjhZg"/>
+ <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Package']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@additionalLayers[name='Validation']"/>
+ <activatedLayers xmi:type="description_1:AdditionalLayer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']/@ownedRepresentationExtensions[name='Entities%20With%20Archetypes']/@layers[name='Archetypes']"/>
+ <target xmi:type="ecore:EPackage" href="platformcppmodel.ecore#/"/>
+ </ownedRepresentations>
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
+ </ownedViews>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_jSbfIMNcEeSzxea5KmjhZg" initialized="true">
+ <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Archetype']"/>
+ </ownedViews>
+</viewpoint:DAnalysis>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.ecore b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.ecore
new file mode 100644
index 0000000..a03b18d
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.ecore
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="platformcppmodel" nsURI="http://www.eclipse.org/papyrusrt/xtumlrt/platformcppmodel"
+ nsPrefix="platformcppmodel">
+ <eClassifiers xsi:type="ecore:EClass" name="CppInclude" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.ecore#//PlatformElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="header" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="body" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="CppPtr" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.ecore#//PlatformElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="declaration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="GenerationProperties" eSuperTypes="../../org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.ecore#//PlatformElement">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="generate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+ defaultValueLiteral="true"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.genmodel b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.genmodel
new file mode 100644
index 0000000..cf14bd6
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/model/platformcppmodel.genmodel
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/src"
+ editDirectory="/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model.edit/src" editorDirectory="/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model.editor/src"
+ modelPluginID="org.eclipse.papyrusrt.xtumlrt.platform.cpp.model" modelName="Platformcppmodel"
+ modelPluginClass="" editPluginClass="org.eclipse.papyrusrt.xtumlrt.platformcppmodel.provider.PlatformcppmodelEditPlugin"
+ editorPluginClass="org.eclipse.papyrusrt.xtumlrt.platformcppmodel.presentation.PlatformcppmodelEditorPlugin"
+ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" testSuiteClass="org.eclipse.papyrusrt.xtumlrt.platformcppmodel.tests.PlatformcppmodelAllTests"
+ importerID="org.eclipse.emf.importer.ecore" complianceLevel="6.0" copyrightFields="false"
+ editPluginID="org.eclipse.papyrusrt.xtumlrt.platform.cpp.model.edit" editorPluginID="org.eclipse.papyrusrt.xtumlrt.platform.cpp.model.editor"
+ usedGenPackages="../../org.eclipse.papyrusrt.xtumlrt.common.model/model/common.genmodel#//common ../../org.eclipse.papyrusrt.xtumlrt.platform.model/model/platformmodel.genmodel#//platformmodel"
+ operationReflection="true" importOrganizing="true">
+ <foreignModel>platformcppmodel.ecore</foreignModel>
+ <genPackages prefix="Platformcppmodel" basePackage="org.eclipse.papyrusrt.xtumlrt"
+ disposableProviderFactory="true" ecorePackage="platformcppmodel.ecore#/">
+ <genClasses ecoreClass="platformcppmodel.ecore#//CppInclude">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platformcppmodel.ecore#//CppInclude/header"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platformcppmodel.ecore#//CppInclude/body"/>
+ </genClasses>
+ <genClasses ecoreClass="platformcppmodel.ecore#//CppPtr">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platformcppmodel.ecore#//CppPtr/declaration"/>
+ </genClasses>
+ <genClasses ecoreClass="platformcppmodel.ecore#//GenerationProperties">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platformcppmodel.ecore#//GenerationProperties/generate"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/plugin.properties b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/plugin.properties
new file mode 100644
index 0000000..5d3377e
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Platform C++ Metamodel
+providerName = Zeligsoft
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/plugin.xml b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/plugin.xml
new file mode 100644
index 0000000..045c317
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated platformcppmodel -->
+ <package
+ uri="http://www.eclipse.org/papyrusrt/xtumlrt/platformcppmodel"
+ class="org.eclipse.papyrusrt.xtumlrt.platformcppmodel.PlatformcppmodelPackage"
+ genModel="model/platformcppmodel.genmodel"/>
+ </extension>
+
+</plugin>
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/pom.xml b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/pom.xml
new file mode 100644
index 0000000..d89137b
--- /dev/null
+++ b/codegen/org.eclipse.papyrusrt.xtumlrt.platform.cpp.model/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>org.eclipse.papyrusrt.xtumlrt.platform.cpp.model</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <parent>
+ <groupId>org.eclipse.papyrusrt</groupId>
+ <artifactId>umlrt.code-generator</artifactId>
+ <version>0.5.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <build>
+ <plugins>
+ <!-- from https://gist.github.com/hwellmann/6044835 -->
+ <plugin>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-eclipserun-plugin</artifactId>
+ <version>${tycho.version}</version>
+ <configuration>
+ <!-- linebreaks not permitted in this arg line -->
+ <appArgLine>-data target/workspace -application org.eclipse.emf.codegen.ecore.Generator -projects ${project.basedir} -model ${project.basedir}/model/platformcppmodel.genmodel target/generated/emf</appArgLine>
+ <dependencies>
+ <dependency>
+ <artifactId>org.eclipse.emf.codegen.ecore</artifactId>
+ <type>eclipse-plugin</type>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>mars</id>
+ <url>${mars-repo.url}</url>
+ <layout>p2</layout>
+ </repository>
+ </repositories>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>eclipse-run</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.7</version>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.basedir}/src</outputDirectory>
+ <resources>
+ <resource>
+ <directory>target/generated/emf/src</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
+
diff --git a/codegen/org.eclipse.papyrusrt.xtumlrt.platform.model/.classpath b/codegen/org.