commit
					93878ac5e6
				
				 49 changed files with 3559 additions and 0 deletions
			
			
		@ -0,0 +1 @@ | 
				
			|||||||
 | 
					/target/ | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<projectDescription> | 
				
			||||||
 | 
						<name>com.irtsaintexupery.capella2aadl-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> | 
				
			||||||
@ -0,0 +1,13 @@ | 
				
			|||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# Copyright (c) 2015, 2016 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					# All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					# are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					# which accompanies this distribution, and is available at | 
				
			||||||
 | 
					# http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Contributors: | 
				
			||||||
 | 
					#     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					#      | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					bin.includes = feature.xml,\ | 
				
			||||||
 | 
					               feature.properties | 
				
			||||||
@ -0,0 +1,27 @@ | 
				
			|||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# Copyright (c) 2015, 2016 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					# All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					# are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					# which accompanies this distribution, and is available at | 
				
			||||||
 | 
					# http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Contributors: | 
				
			||||||
 | 
					#     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					#      | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					featureName=Capella2AADL | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					providerName=IRT AESE (IRT Saint Exupéry) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description=Capella2AADL is a model transformation from Capella physical\n\ | 
				
			||||||
 | 
					architecture to an abstract AADL architecture.\n\ | 
				
			||||||
 | 
					Its goal is to make the transition between system engineering\n\ | 
				
			||||||
 | 
					and hardware and software engineering easier. | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					copyright=\ | 
				
			||||||
 | 
					Copyright (c) 2000, 2017 IRT AESE (IRT Saint Exupéry).\n\ | 
				
			||||||
 | 
					All rights reserved. This program and the accompanying materials\n\ | 
				
			||||||
 | 
					are made available under the terms of the Eclipse Public License v1.0\n\ | 
				
			||||||
 | 
					which accompanies this distribution, and is available at\n\ | 
				
			||||||
 | 
					http://www.eclipse.org/legal/epl-v10.html\n | 
				
			||||||
@ -0,0 +1,47 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<!-- | 
				
			||||||
 | 
					    Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					    All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					    are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					    which accompanies this distribution, and is available at | 
				
			||||||
 | 
					    http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					    | 
				
			||||||
 | 
					    Contributors: | 
				
			||||||
 | 
					        Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					 --> | 
				
			||||||
 | 
					<feature | 
				
			||||||
 | 
					      id="com.irtsaintexupery.capella2aadl" | 
				
			||||||
 | 
					      label="%featureName" | 
				
			||||||
 | 
					      version="1.1.2.qualifier" | 
				
			||||||
 | 
					      provider-name="%providerName" | 
				
			||||||
 | 
					      license-feature="com.irtsaintexupery.epl" | 
				
			||||||
 | 
					      license-feature-version="1.0.0.qualifier"> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <description> | 
				
			||||||
 | 
					      %description | 
				
			||||||
 | 
					   </description> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <copyright url="http://www.irt-saintexupery.com"> | 
				
			||||||
 | 
					      %copyright | 
				
			||||||
 | 
					   </copyright> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <license url="%licenseURL"> | 
				
			||||||
 | 
					      %license | 
				
			||||||
 | 
					   </license> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <plugin | 
				
			||||||
 | 
					         id="com.irtsaintexupery.capella2aadl" | 
				
			||||||
 | 
					         download-size="0" | 
				
			||||||
 | 
					         install-size="0" | 
				
			||||||
 | 
					         version="0.0.0" | 
				
			||||||
 | 
					         unpack="false"/> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <plugin | 
				
			||||||
 | 
					         id="com.irtsaintexupery.capella2aadl.ui" | 
				
			||||||
 | 
					         download-size="0" | 
				
			||||||
 | 
					         install-size="0" | 
				
			||||||
 | 
					         version="0.0.0" | 
				
			||||||
 | 
					         unpack="false"/> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</feature> | 
				
			||||||
@ -0,0 +1,30 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<!-- | 
				
			||||||
 | 
					    Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					    All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					    are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					    which accompanies this distribution, and is available at | 
				
			||||||
 | 
					    http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					    | 
				
			||||||
 | 
					    Contributors: | 
				
			||||||
 | 
					        Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					 --> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<parent> | 
				
			||||||
 | 
							<groupId>com.irtsaintexupery</groupId> | 
				
			||||||
 | 
							<artifactId>parent</artifactId> | 
				
			||||||
 | 
							<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
							<relativePath>../../releng/com.irtsaintexupery.parent</relativePath> | 
				
			||||||
 | 
						</parent> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<groupId>com.irtsaintexupery.features</groupId> | 
				
			||||||
 | 
						<artifactId>com.irtsaintexupery.capella2aadl</artifactId> | 
				
			||||||
 | 
						<version>1.1.2-SNAPSHOT</version> | 
				
			||||||
 | 
						<packaging>eclipse-feature</packaging> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</project> | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<projectDescription> | 
				
			||||||
 | 
						<name>com.irtsaintexupery.epl</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> | 
				
			||||||
@ -0,0 +1,6 @@ | 
				
			|||||||
 | 
					bin.includes = feature.xml,\ | 
				
			||||||
 | 
					               license.html,\ | 
				
			||||||
 | 
					               epl-v10.html,\ | 
				
			||||||
 | 
					               feature.properties,\ | 
				
			||||||
 | 
					               build.properties | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,261 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="ISO-8859-1" ?> | 
				
			||||||
 | 
					<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||||
 | 
					<html xmlns="http://www.w3.org/1999/xhtml"> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<head> | 
				
			||||||
 | 
					<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> | 
				
			||||||
 | 
					<title>Eclipse Public License - Version 1.0</title> | 
				
			||||||
 | 
					<style type="text/css"> | 
				
			||||||
 | 
					  body { | 
				
			||||||
 | 
					    size: 8.5in 11.0in; | 
				
			||||||
 | 
					    margin: 0.25in 0.5in 0.25in 0.5in; | 
				
			||||||
 | 
					    tab-interval: 0.5in; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  p {  	 | 
				
			||||||
 | 
					    margin-left: auto; | 
				
			||||||
 | 
					    margin-top:  0.5em; | 
				
			||||||
 | 
					    margin-bottom: 0.5em; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  p.list { | 
				
			||||||
 | 
					  	margin-left: 0.5in; | 
				
			||||||
 | 
					    margin-top:  0.05em; | 
				
			||||||
 | 
					    margin-bottom: 0.05em; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  </style> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</head> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body lang="EN-US"> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h2>Eclipse Public License - v 1.0</h2> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>1. DEFINITIONS</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>"Contribution" means:</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">a) in the case of the initial Contributor, the initial | 
				
			||||||
 | 
					code and documentation distributed under this Agreement, and</p> | 
				
			||||||
 | 
					<p class="list">b) in the case of each subsequent Contributor:</p> | 
				
			||||||
 | 
					<p class="list">i) changes to the Program, and</p> | 
				
			||||||
 | 
					<p class="list">ii) additions to the Program;</p> | 
				
			||||||
 | 
					<p class="list">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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>"Contributor" means any person or entity that distributes | 
				
			||||||
 | 
					the Program.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>"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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>"Program" means the Contributions distributed in accordance | 
				
			||||||
 | 
					with this Agreement.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>"Recipient" means anyone who receives the Program under | 
				
			||||||
 | 
					this Agreement, including all Contributors.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>2. GRANT OF RIGHTS</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">a) Subject to the terms of this Agreement, each | 
				
			||||||
 | 
					Contributor hereby grants Recipient a non-exclusive, worldwide, | 
				
			||||||
 | 
					royalty-free copyright license to 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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">b) Subject to the terms of this Agreement, each | 
				
			||||||
 | 
					Contributor hereby grants Recipient a non-exclusive, worldwide, | 
				
			||||||
 | 
					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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>3. REQUIREMENTS</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>A Contributor may choose to distribute the Program in object code | 
				
			||||||
 | 
					form under its own license agreement, provided that:</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">a) it complies with the terms and conditions of this | 
				
			||||||
 | 
					Agreement; and</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">b) its license agreement:</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">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;</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">ii) effectively excludes on behalf of all Contributors | 
				
			||||||
 | 
					all liability for damages, including direct, indirect, special, | 
				
			||||||
 | 
					incidental and consequential damages, such as lost profits;</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">iii) states that any provisions which differ from this | 
				
			||||||
 | 
					Agreement are offered by that Contributor alone and not by any other | 
				
			||||||
 | 
					party; and</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>When the Program is made available in source code form:</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">a) it must be made available under this Agreement; and</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p class="list">b) a copy of this Agreement must be included with each | 
				
			||||||
 | 
					copy of the Program.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>Contributors may not remove or alter any copyright notices contained | 
				
			||||||
 | 
					within the Program.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>4. COMMERCIAL DISTRIBUTION</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>5. NO WARRANTY</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>6. DISCLAIMER OF LIABILITY</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p><b>7. GENERAL</b></p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>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.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html> | 
				
			||||||
@ -0,0 +1,150 @@ | 
				
			|||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# Copyright (c) 2015 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					# All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					# are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					# which accompanies this distribution, and is available at | 
				
			||||||
 | 
					# http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Contributors: | 
				
			||||||
 | 
					#     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					#      | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# "copyright" property - text of the "Feature Update Copyright" | 
				
			||||||
 | 
					copyright=\ | 
				
			||||||
 | 
					Copyright (c) 2000, 2017 IRT AESE (IRT Saint Exupéry).\n\ | 
				
			||||||
 | 
					All rights reserved. This program and the accompanying materials\n\ | 
				
			||||||
 | 
					are made available under the terms of the Eclipse Public License v1.0\n\ | 
				
			||||||
 | 
					which accompanies this distribution, and is available at\n\ | 
				
			||||||
 | 
					http://www.eclipse.org/legal/epl-v10.html\n | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# "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=\ | 
				
			||||||
 | 
					IRT AESE (IRT Saint Exupéry) Software User Agreement\n\ | 
				
			||||||
 | 
					August 17, 2017\n\ | 
				
			||||||
 | 
					\n\ | 
				
			||||||
 | 
					Usage Of Content\n\ | 
				
			||||||
 | 
					\n\ | 
				
			||||||
 | 
					THE IRT AESE (IRT SAINT EXUPERY) MAKES AVAILABLE SOFTWARE, DOCUMENTATION,\n\ | 
				
			||||||
 | 
					INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY\n\ | 
				
			||||||
 | 
					"CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF\n\ | 
				
			||||||
 | 
					THIS 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\ | 
				
			||||||
 | 
					IRT AESE (IRT Saint Exupéry) 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 provided\n\ | 
				
			||||||
 | 
					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 IRT AESE (IRT Saint Exupéry) 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 IRT AESE (IRT Saint Exupéry) 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 IRT AESE (IRT Saint Exupéry) to determine what terms and conditions\n\ | 
				
			||||||
 | 
					govern that particular Content.\n\ | 
				
			||||||
 | 
					\n\ | 
				
			||||||
 | 
					\n\Use of Provisioning Technology\n\ | 
				
			||||||
 | 
					\n\ | 
				
			||||||
 | 
					The IRT AESE (IRT Saint Exupéry) 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 ########################################## | 
				
			||||||
@ -0,0 +1,20 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<feature | 
				
			||||||
 | 
					      id="com.irtsaintexupery.epl" | 
				
			||||||
 | 
					      label="EPL license for IRT Saint Exupéry" | 
				
			||||||
 | 
					      version="1.0.0.qualifier" | 
				
			||||||
 | 
					      provider-name="IRT AESE (IRT Saint Exupéry)"> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <description> | 
				
			||||||
 | 
					      EPL license for IRT AESE (IRT Saint Exupéry). | 
				
			||||||
 | 
					   </description> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <copyright url="http://www.irt-saintexupery.com"> | 
				
			||||||
 | 
					      %copyright | 
				
			||||||
 | 
					   </copyright> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   <license url="%licenseURL"> | 
				
			||||||
 | 
					      %license | 
				
			||||||
 | 
					   </license> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</feature> | 
				
			||||||
@ -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>IRT AESE (IRT Saint Exupéry) Software User Agreement</title> | 
				
			||||||
 | 
					</head> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body lang="EN-US"> | 
				
			||||||
 | 
					<h2>IRT AESE (IRT Saint Exupéry) Software User Agreement</h2> | 
				
			||||||
 | 
					<p>August 17, 2017</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h3>Usage Of Content</h3> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>THE IRT AESE (IRT SAINT EXUPERY) 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 IRT AESE (IRT Saint Exupéry) 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 IRT AESE (IRT Saint Exupéry) 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 IRT AESE (IRT Saint Exupéry) 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 IRT AESE (IRT Saint Exupéry) to determine what terms and conditions govern that particular Content.</p> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h3>Use of Provisioning Technology</h3> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>The IRT AESE (IRT Saint Exupéry) 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> | 
				
			||||||
@ -0,0 +1,18 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<parent> | 
				
			||||||
 | 
							<groupId>com.irtsaintexupery</groupId> | 
				
			||||||
 | 
							<artifactId>parent</artifactId> | 
				
			||||||
 | 
							<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
							<relativePath>../../releng/com.irtsaintexupery.parent</relativePath> | 
				
			||||||
 | 
						</parent> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<groupId>com.irtsaintexupery.features</groupId> | 
				
			||||||
 | 
						<artifactId>com.irtsaintexupery.epl</artifactId> | 
				
			||||||
 | 
						<packaging>eclipse-feature</packaging> | 
				
			||||||
 | 
						<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</project> | 
				
			||||||
@ -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/J2SE-1.5"/> | 
				
			||||||
 | 
						<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> | 
				
			||||||
 | 
						<classpathentry kind="src" path="src"/> | 
				
			||||||
 | 
						<classpathentry kind="output" path="bin"/> | 
				
			||||||
 | 
					</classpath> | 
				
			||||||
@ -0,0 +1,2 @@ | 
				
			|||||||
 | 
					/bin | 
				
			||||||
 | 
					/target/ | 
				
			||||||
@ -0,0 +1,28 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<projectDescription> | 
				
			||||||
 | 
						<name>com.irtsaintexupery.capella2aadl.ui</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> | 
				
			||||||
@ -0,0 +1,6 @@ | 
				
			|||||||
 | 
					eclipse.preferences.version=1 | 
				
			||||||
 | 
					org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 | 
				
			||||||
 | 
					org.eclipse.jdt.core.compiler.compliance=1.5 | 
				
			||||||
 | 
					org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | 
				
			||||||
 | 
					org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | 
				
			||||||
 | 
					org.eclipse.jdt.core.compiler.source=1.5 | 
				
			||||||
@ -0,0 +1,21 @@ | 
				
			|||||||
 | 
					Manifest-Version: 1.0 | 
				
			||||||
 | 
					Bundle-ManifestVersion: 2 | 
				
			||||||
 | 
					Bundle-Name: %pluginName | 
				
			||||||
 | 
					Bundle-SymbolicName: com.irtsaintexupery.capella2aadl.ui;singleton:=true | 
				
			||||||
 | 
					Bundle-Version: 1.1.1.qualifier | 
				
			||||||
 | 
					Bundle-Activator: com.irtsaintexupery.capella2aadl.ui.Activator | 
				
			||||||
 | 
					Bundle-Vendor: %providerName | 
				
			||||||
 | 
					Bundle-Localization: plugin | 
				
			||||||
 | 
					Require-Bundle: org.eclipse.ui, | 
				
			||||||
 | 
					 org.eclipse.core.runtime, | 
				
			||||||
 | 
					 org.eclipse.core.resources,  | 
				
			||||||
 | 
					 com.irtsaintexupery.capella2aadl, | 
				
			||||||
 | 
					 org.eclipse.emf.ecore, | 
				
			||||||
 | 
					 org.eclipse.emf.ecore.xmi, | 
				
			||||||
 | 
					 org.eclipse.ocl, | 
				
			||||||
 | 
					 org.eclipse.ocl.ecore, | 
				
			||||||
 | 
					 org.eclipse.acceleo.model, | 
				
			||||||
 | 
					 org.eclipse.acceleo.engine | 
				
			||||||
 | 
					Bundle-RequiredExecutionEnvironment: J2SE-1.5 | 
				
			||||||
 | 
					Bundle-ActivationPolicy: lazy | 
				
			||||||
 | 
					Eclipse-LazyStart: true | 
				
			||||||
@ -0,0 +1,9 @@ | 
				
			|||||||
 | 
					source.. = src/ | 
				
			||||||
 | 
					output.. = bin/ | 
				
			||||||
 | 
					bin.includes = META-INF/,\ | 
				
			||||||
 | 
					               plugin.properties,\ | 
				
			||||||
 | 
					               .,\ | 
				
			||||||
 | 
					               plugin.xml,\ | 
				
			||||||
 | 
					               icons/ | 
				
			||||||
 | 
					bin.excludes = icons/Capella2aadl16x16.xcf | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 779 B  | 
									
										Binary file not shown.
									
								
							
						@ -0,0 +1,15 @@ | 
				
			|||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# Copyright (c) 2015, 2016 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					# All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					# are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					# which accompanies this distribution, and is available at | 
				
			||||||
 | 
					# http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Contributors: | 
				
			||||||
 | 
					#     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					#      | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pluginName = Capella2AADL UI | 
				
			||||||
 | 
					providerName = IRT AESE (IRT Saint Exupéry) | 
				
			||||||
@ -0,0 +1,49 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<?eclipse version="3.2"?> | 
				
			||||||
 | 
					<!-- | 
				
			||||||
 | 
					    Copyright (c) 2015, 2016 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					    All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					    are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					    which accompanies this distribution, and is available at | 
				
			||||||
 | 
					    http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					    | 
				
			||||||
 | 
					    Contributors: | 
				
			||||||
 | 
					        Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					 --> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<plugin> | 
				
			||||||
 | 
					   <extension | 
				
			||||||
 | 
					         point="org.eclipse.ui.menus"> | 
				
			||||||
 | 
					      <menuContribution | 
				
			||||||
 | 
					            allPopups="false" | 
				
			||||||
 | 
					            locationURI="popup:org.eclipse.ui.popup.any?after=additions"> | 
				
			||||||
 | 
					         <command | 
				
			||||||
 | 
					               commandId="com.irtsaintexupery.capella2aadl.translate" | 
				
			||||||
 | 
					               icon="icons/Capella2aadl16x16.png" | 
				
			||||||
 | 
					               style="push"> | 
				
			||||||
 | 
					            <visibleWhen | 
				
			||||||
 | 
					                  checkEnabled="false"> | 
				
			||||||
 | 
					               <with | 
				
			||||||
 | 
					                     variable="activeMenuSelection"> | 
				
			||||||
 | 
					                  <iterate | 
				
			||||||
 | 
					                        ifEmpty="false" | 
				
			||||||
 | 
					                        operator="and"> | 
				
			||||||
 | 
					                     <adapt | 
				
			||||||
 | 
					                           type="org.eclipse.core.resources.IFile"> | 
				
			||||||
 | 
					                     </adapt> | 
				
			||||||
 | 
					                  </iterate> | 
				
			||||||
 | 
					               </with> | 
				
			||||||
 | 
					            </visibleWhen> | 
				
			||||||
 | 
					         </command> | 
				
			||||||
 | 
					      </menuContribution> | 
				
			||||||
 | 
					   </extension> | 
				
			||||||
 | 
					   <extension | 
				
			||||||
 | 
					         point="org.eclipse.ui.commands"> | 
				
			||||||
 | 
					      <command | 
				
			||||||
 | 
					            defaultHandler="com.irtsaintexupery.capella2aadl.ui.popupMenus.Capella2AADLTransformer" | 
				
			||||||
 | 
					            id="com.irtsaintexupery.capella2aadl.translate" | 
				
			||||||
 | 
					            name="Transform Capella into AADL"> | 
				
			||||||
 | 
					      </command> | 
				
			||||||
 | 
					   </extension> | 
				
			||||||
 | 
					</plugin> | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<parent> | 
				
			||||||
 | 
							<groupId>com.irtsaintexupery</groupId> | 
				
			||||||
 | 
							<artifactId>parent</artifactId> | 
				
			||||||
 | 
							<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
							<relativePath>../../releng/com.irtsaintexupery.parent</relativePath> | 
				
			||||||
 | 
						</parent> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<artifactId>com.irtsaintexupery.capella2aadl.ui</artifactId> | 
				
			||||||
 | 
						<packaging>eclipse-plugin</packaging> | 
				
			||||||
 | 
						<version>1.1.1-SNAPSHOT</version> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</project> | 
				
			||||||
@ -0,0 +1,68 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2008, 2012 Obeo. | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Obeo - initial API and implementation | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.ui; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 = "com.irtsaintexupery.capella2aadl.ui"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The shared instance. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static Activator plugin; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The constructor. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public Activator() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**{@inheritDoc} | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) | 
				
			||||||
 | 
						 * @generated | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@Override | 
				
			||||||
 | 
						public void start(BundleContext context) throws Exception { | 
				
			||||||
 | 
							super.start(context); | 
				
			||||||
 | 
							plugin = this; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**{@inheritDoc} | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) | 
				
			||||||
 | 
						 * @generated | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						@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; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,92 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2008, 2012 Obeo. | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Obeo - initial API and implementation | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.ui.common; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.eclipse.core.resources.IContainer; | 
				
			||||||
 | 
					import org.eclipse.core.runtime.IProgressMonitor; | 
				
			||||||
 | 
					import org.eclipse.emf.common.util.BasicMonitor; | 
				
			||||||
 | 
					import org.eclipse.emf.common.util.URI; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Main entry point of the 'Capella2aadl' generation module. | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class GenerateAll { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The model URI. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private URI modelURI; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The output folder. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private IContainer targetFolder; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The other arguments. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						List<? extends Object> arguments; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Constructor. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param modelURI | 
				
			||||||
 | 
						 *            is the URI of the model. | 
				
			||||||
 | 
						 * @param targetFolder | 
				
			||||||
 | 
						 *            is the output folder | 
				
			||||||
 | 
						 * @param arguments | 
				
			||||||
 | 
						 *            are the other arguments | 
				
			||||||
 | 
						 * @throws IOException | 
				
			||||||
 | 
						 *             Thrown when the output cannot be saved. | 
				
			||||||
 | 
						 * @generated | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public GenerateAll(URI modelURI, IContainer targetFolder, List<? extends Object> arguments) { | 
				
			||||||
 | 
							this.modelURI = modelURI; | 
				
			||||||
 | 
							this.targetFolder = targetFolder; | 
				
			||||||
 | 
							this.arguments = arguments; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Launches the generation. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @param monitor | 
				
			||||||
 | 
						 *            This will be used to display progress information to the user. | 
				
			||||||
 | 
						 * @throws IOException | 
				
			||||||
 | 
						 *             Thrown when the output cannot be saved. | 
				
			||||||
 | 
						 * @generated | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public void doGenerate(IProgressMonitor monitor) throws IOException { | 
				
			||||||
 | 
							if (!targetFolder.getLocation().toFile().exists()) { | 
				
			||||||
 | 
								targetFolder.getLocation().toFile().mkdirs(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							// final URI template0 = getTemplateURI("com.irtsaintexupery.capella2aadl", new Path("/com/irtsaintexupery/capella2aadl/main/capella2aadl.emtl"));
 | 
				
			||||||
 | 
							// com.irtsaintexupery.capella2aadl.main.Capella2aadl gen0 = new com.irtsaintexupery.capella2aadl.main.Capella2aadl(modelURI, targetFolder.getLocation().toFile(), arguments) {
 | 
				
			||||||
 | 
							//	protected URI createTemplateURI(String entry) {
 | 
				
			||||||
 | 
							//		return template0;
 | 
				
			||||||
 | 
							//	}
 | 
				
			||||||
 | 
							//};
 | 
				
			||||||
 | 
							//gen0.doGenerate(BasicMonitor.toMonitor(monitor));
 | 
				
			||||||
 | 
							monitor.subTask("Loading..."); | 
				
			||||||
 | 
							com.irtsaintexupery.capella2aadl.main.Capella2aadl gen0 = new com.irtsaintexupery.capella2aadl.main.Capella2aadl(modelURI, targetFolder.getLocation().toFile(), arguments); | 
				
			||||||
 | 
							monitor.worked(1); | 
				
			||||||
 | 
							String generationID = org.eclipse.acceleo.engine.utils.AcceleoLaunchingUtil.computeUIProjectID("com.irtsaintexupery.capella2aadl", "com.irtsaintexupery.capella2aadl.main.Capella2aadl", modelURI.toString(), targetFolder.getFullPath().toString(), new ArrayList<String>()); | 
				
			||||||
 | 
							gen0.setGenerationID(generationID); | 
				
			||||||
 | 
							gen0.doGenerate(BasicMonitor.toMonitor(monitor)); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,120 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2016 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.ui.popupMenus; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.lang.reflect.InvocationTargetException; | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					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.resources.IContainer; | 
				
			||||||
 | 
					import org.eclipse.core.resources.IFile; | 
				
			||||||
 | 
					import org.eclipse.core.resources.IResource; | 
				
			||||||
 | 
					import org.eclipse.core.runtime.CoreException; | 
				
			||||||
 | 
					import org.eclipse.core.runtime.IProgressMonitor; | 
				
			||||||
 | 
					import org.eclipse.core.runtime.IStatus; | 
				
			||||||
 | 
					import org.eclipse.core.runtime.Status; | 
				
			||||||
 | 
					import org.eclipse.emf.common.util.URI; | 
				
			||||||
 | 
					import org.eclipse.jface.operation.IRunnableWithProgress; | 
				
			||||||
 | 
					import org.eclipse.jface.viewers.ISelection; | 
				
			||||||
 | 
					import org.eclipse.jface.viewers.IStructuredSelection; | 
				
			||||||
 | 
					import org.eclipse.ui.PlatformUI; | 
				
			||||||
 | 
					import org.eclipse.ui.handlers.HandlerUtil; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.irtsaintexupery.capella2aadl.ui.Activator; | 
				
			||||||
 | 
					import com.irtsaintexupery.capella2aadl.ui.common.GenerateAll; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Capella2AADLTransformer extends AbstractHandler { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public Object execute(ExecutionEvent event) throws ExecutionException { | 
				
			||||||
 | 
							ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (selection != null & selection instanceof IStructuredSelection) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								IStructuredSelection strucSelection = (IStructuredSelection) selection; | 
				
			||||||
 | 
								for (Object element : strucSelection.toList()) { | 
				
			||||||
 | 
									if (element instanceof IFile) { | 
				
			||||||
 | 
										final IFile input_file = (IFile) element; | 
				
			||||||
 | 
										IRunnableWithProgress operation = new IRunnableWithProgress() { | 
				
			||||||
 | 
											public void run(IProgressMonitor monitor) { | 
				
			||||||
 | 
												try { | 
				
			||||||
 | 
													try { | 
				
			||||||
 | 
														IContainer target = input_file.getProject().getFolder("aadl-gen"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
														if (target.exists()) { | 
				
			||||||
 | 
															// Clean up target folder of its aadl
 | 
				
			||||||
 | 
															// files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
															for (IResource f : target.members()) { | 
				
			||||||
 | 
																String ext = f.getFileExtension(); | 
				
			||||||
 | 
																if (ext != null ? ext.equals("aadl") : false) | 
				
			||||||
 | 
																	f.delete(true, null); | 
				
			||||||
 | 
															} | 
				
			||||||
 | 
														} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													} finally { | 
				
			||||||
 | 
														input_file.getProject().refreshLocal(IResource.DEPTH_INFINITE, null); | 
				
			||||||
 | 
													} | 
				
			||||||
 | 
												} catch (CoreException e) { | 
				
			||||||
 | 
													IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); | 
				
			||||||
 | 
													Activator.getDefault().getLog().log(status); | 
				
			||||||
 | 
												} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												try { | 
				
			||||||
 | 
													URI modelURI = URI.createPlatformResourceURI(input_file.getFullPath().toString(), true); | 
				
			||||||
 | 
													IContainer target = input_file.getProject().getFolder("aadl-gen"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													GenerateAll generator = new GenerateAll(modelURI, target, getArguments()); | 
				
			||||||
 | 
													generator.doGenerate(monitor); | 
				
			||||||
 | 
												} catch (IOException e) { | 
				
			||||||
 | 
													IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); | 
				
			||||||
 | 
													Activator.getDefault().getLog().log(status); | 
				
			||||||
 | 
												} finally { | 
				
			||||||
 | 
													try { | 
				
			||||||
 | 
														input_file.getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor); | 
				
			||||||
 | 
													} catch (CoreException e) { | 
				
			||||||
 | 
														IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); | 
				
			||||||
 | 
														Activator.getDefault().getLog().log(status); | 
				
			||||||
 | 
													} | 
				
			||||||
 | 
												} | 
				
			||||||
 | 
											} | 
				
			||||||
 | 
										}; | 
				
			||||||
 | 
										try { | 
				
			||||||
 | 
											PlatformUI.getWorkbench().getProgressService().run(true, true, operation); | 
				
			||||||
 | 
										} catch (InvocationTargetException e) { | 
				
			||||||
 | 
											IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); | 
				
			||||||
 | 
											Activator.getDefault().getLog().log(status); | 
				
			||||||
 | 
										} catch (InterruptedException e) { | 
				
			||||||
 | 
											IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); | 
				
			||||||
 | 
											Activator.getDefault().getLog().log(status); | 
				
			||||||
 | 
										} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							return null; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Computes the arguments of the generator. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @return the arguments | 
				
			||||||
 | 
						 * @generated | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						protected List<? extends Object> getArguments() { | 
				
			||||||
 | 
							return new ArrayList<String>(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -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" output="bin" path="src"/> | 
				
			||||||
 | 
						<classpathentry kind="output" path="bin"/> | 
				
			||||||
 | 
					</classpath> | 
				
			||||||
@ -0,0 +1,3 @@ | 
				
			|||||||
 | 
					/tasks | 
				
			||||||
 | 
					/bin | 
				
			||||||
 | 
					/target/ | 
				
			||||||
@ -0,0 +1,50 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<projectDescription> | 
				
			||||||
 | 
						<name>com.irtsaintexupery.capella2aadl</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> | 
				
			||||||
 | 
							<buildCommand> | 
				
			||||||
 | 
								<name>org.eclipse.acceleo.ide.ui.acceleoBuilder</name> | 
				
			||||||
 | 
								<arguments> | 
				
			||||||
 | 
									<dictionary> | 
				
			||||||
 | 
										<key>compilation.kind</key> | 
				
			||||||
 | 
										<value>compilation.platform.resource</value> | 
				
			||||||
 | 
									</dictionary> | 
				
			||||||
 | 
									<dictionary> | 
				
			||||||
 | 
										<key>compliance</key> | 
				
			||||||
 | 
										<value>pragmatic</value> | 
				
			||||||
 | 
									</dictionary> | 
				
			||||||
 | 
									<dictionary> | 
				
			||||||
 | 
										<key>resource.kind</key> | 
				
			||||||
 | 
										<value>xmi</value> | 
				
			||||||
 | 
									</dictionary> | 
				
			||||||
 | 
									<dictionary> | 
				
			||||||
 | 
										<key>trim-position</key> | 
				
			||||||
 | 
										<value>false</value> | 
				
			||||||
 | 
									</dictionary> | 
				
			||||||
 | 
								</arguments> | 
				
			||||||
 | 
							</buildCommand> | 
				
			||||||
 | 
						</buildSpec> | 
				
			||||||
 | 
						<natures> | 
				
			||||||
 | 
							<nature>org.eclipse.acceleo.ide.ui.acceleoNature</nature> | 
				
			||||||
 | 
							<nature>org.eclipse.jdt.core.javanature</nature> | 
				
			||||||
 | 
							<nature>org.eclipse.pde.PluginNature</nature> | 
				
			||||||
 | 
						</natures> | 
				
			||||||
 | 
					</projectDescription> | 
				
			||||||
@ -0,0 +1,26 @@ | 
				
			|||||||
 | 
					Manifest-Version: 1.0 | 
				
			||||||
 | 
					Bundle-ManifestVersion: 2 | 
				
			||||||
 | 
					Bundle-Name: %pluginName | 
				
			||||||
 | 
					Bundle-SymbolicName: com.irtsaintexupery.capella2aadl | 
				
			||||||
 | 
					Bundle-Version: 1.2.2.qualifier | 
				
			||||||
 | 
					Bundle-Activator: com.irtsaintexupery.capella2aadl.Activator | 
				
			||||||
 | 
					Bundle-Vendor: %providerName | 
				
			||||||
 | 
					Bundle-Localization: plugin | 
				
			||||||
 | 
					Require-Bundle: org.eclipse.core.runtime, | 
				
			||||||
 | 
					 org.polarsys.capella.core.data.gen;bundle-version="1.1.0", | 
				
			||||||
 | 
					 org.eclipse.emf.ecore, | 
				
			||||||
 | 
					 org.eclipse.emf.ecore.xmi, | 
				
			||||||
 | 
					 org.eclipse.ocl, | 
				
			||||||
 | 
					 org.eclipse.ocl.ecore, | 
				
			||||||
 | 
					 org.eclipse.acceleo.common;bundle-version="3.3.0", | 
				
			||||||
 | 
					 org.eclipse.acceleo.model;bundle-version="3.3.0", | 
				
			||||||
 | 
					 org.eclipse.acceleo.profiler;bundle-version="3.3.0", | 
				
			||||||
 | 
					 org.eclipse.acceleo.engine;bundle-version="3.3.0", | 
				
			||||||
 | 
					 com.google.guava, | 
				
			||||||
 | 
					 org.polarsys.capella.common.libraries.gen;bundle-version="1.1.0" | 
				
			||||||
 | 
					Bundle-RequiredExecutionEnvironment: JavaSE-1.7 | 
				
			||||||
 | 
					Bundle-ActivationPolicy: lazy | 
				
			||||||
 | 
					Eclipse-LazyStart: true | 
				
			||||||
 | 
					Export-Package: com.irtsaintexupery.capella2aadl.main, | 
				
			||||||
 | 
					 com.irtsaintexupery.capella2aadl.requests | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# Copyright (c) 2015 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					# All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					# are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					# which accompanies this distribution, and is available at | 
				
			||||||
 | 
					# http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Contributors: | 
				
			||||||
 | 
					#     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					#      | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source.. = src/ | 
				
			||||||
 | 
					output.. = bin/ | 
				
			||||||
 | 
					bin.includes = plugin.properties, META-INF/,\ | 
				
			||||||
 | 
					               . | 
				
			||||||
 | 
					jre.compilation.profile = JavaSE-1.7 | 
				
			||||||
@ -0,0 +1,14 @@ | 
				
			|||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					# Copyright (c) 2015, 2016 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					# All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					# are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					# which accompanies this distribution, and is available at | 
				
			||||||
 | 
					# http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					# | 
				
			||||||
 | 
					# Contributors: | 
				
			||||||
 | 
					#     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					#      | 
				
			||||||
 | 
					############################################################################### | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pluginName = Capella2AADL | 
				
			||||||
 | 
					providerName = IRT AESE (IRT Saint Exupéry) | 
				
			||||||
@ -0,0 +1,60 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<!-- | 
				
			||||||
 | 
					    Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					    All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					    are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					    which accompanies this distribution, and is available at | 
				
			||||||
 | 
					    http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					    | 
				
			||||||
 | 
					    Contributors: | 
				
			||||||
 | 
					        Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					 --> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<parent> | 
				
			||||||
 | 
							<groupId>com.irtsaintexupery</groupId> | 
				
			||||||
 | 
							<artifactId>parent</artifactId> | 
				
			||||||
 | 
							<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
							<relativePath>../../releng/com.irtsaintexupery.parent</relativePath> | 
				
			||||||
 | 
						</parent> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<artifactId>com.irtsaintexupery.capella2aadl</artifactId> | 
				
			||||||
 | 
						<packaging>eclipse-plugin</packaging> | 
				
			||||||
 | 
						<version>1.2.2-SNAPSHOT</version> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<build> | 
				
			||||||
 | 
							<plugins> | 
				
			||||||
 | 
								<plugin> | 
				
			||||||
 | 
									<groupId>org.eclipse.acceleo</groupId> | 
				
			||||||
 | 
									<artifactId>org.eclipse.acceleo.maven</artifactId> | 
				
			||||||
 | 
									<configuration> | 
				
			||||||
 | 
										<useBinaryResources>false</useBinaryResources> | 
				
			||||||
 | 
										<usePlatformResourcePath>true</usePlatformResourcePath> | 
				
			||||||
 | 
										<acceleoProject> | 
				
			||||||
 | 
											<root>${project.basedir}</root> | 
				
			||||||
 | 
											<entries> | 
				
			||||||
 | 
												<entry> | 
				
			||||||
 | 
													<input>src</input> | 
				
			||||||
 | 
													<output>target/classes</output> | 
				
			||||||
 | 
												</entry> | 
				
			||||||
 | 
											</entries> | 
				
			||||||
 | 
										</acceleoProject> | 
				
			||||||
 | 
										<packagesToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.eclipse.emf.ecore.EcorePackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.core.data.pa.PaPackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.core.data.cs.CsPackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.core.data.capellacore.CapellacorePackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.core.data.capellamodeller.CapellamodellerPackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.common.libraries.LibrariesPackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.core.data.capellacommon.CapellacommonPackage</packageToRegister> | 
				
			||||||
 | 
											<packageToRegister>org.polarsys.capella.core.data.capellacore.CapellacorePackage</packageToRegister> | 
				
			||||||
 | 
										</packagesToRegister> | 
				
			||||||
 | 
									</configuration> | 
				
			||||||
 | 
								</plugin> | 
				
			||||||
 | 
							</plugins> | 
				
			||||||
 | 
						</build> | 
				
			||||||
 | 
					</project> | 
				
			||||||
@ -0,0 +1,69 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.eclipse.core.runtime.Plugin; | 
				
			||||||
 | 
					import org.osgi.framework.BundleContext; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * The activator class controls the plug-in life cycle. | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class Activator extends Plugin { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * The plug-in ID. | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public static final String PLUGIN_ID = "com.irtsaintexupery.capella2aadl"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * The shared instance. | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private static Activator plugin; | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * The constructor. | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public Activator() { | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * {@inheritDoc} | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext) | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
						public void start(BundleContext context) throws Exception { | 
				
			||||||
 | 
					        super.start(context); | 
				
			||||||
 | 
					        plugin = this; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * {@inheritDoc} | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @see org.eclipse.core.runtime.Plugin#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; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,407 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.main; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File; | 
				
			||||||
 | 
					import java.io.IOException; | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener; | 
				
			||||||
 | 
					import org.eclipse.acceleo.engine.generation.strategy.IAcceleoGenerationStrategy; | 
				
			||||||
 | 
					import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator; | 
				
			||||||
 | 
					import org.eclipse.emf.common.util.BasicMonitor; | 
				
			||||||
 | 
					import org.eclipse.emf.common.util.Monitor; | 
				
			||||||
 | 
					import org.eclipse.emf.common.util.URI; | 
				
			||||||
 | 
					import org.eclipse.emf.ecore.EObject; | 
				
			||||||
 | 
					import org.eclipse.emf.ecore.resource.ResourceSet; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Entry point of the 'Capella2aadl' generation module. | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @generated | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class Capella2aadl extends AbstractAcceleoGenerator { | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * The name of the module. | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public static final String MODULE_FILE_NAME = "/com/irtsaintexupery/capella2aadl/main/capella2aadl"; | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * The name of the templates that are to be generated. | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public static final String[] TEMPLATE_NAMES = { "generateProject" }; | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * The list of properties files from the launch parameters (Launch configuration). | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    private List<String> propertiesFiles = new ArrayList<String>(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * Allows the public constructor to be used. Note that a generator created | 
				
			||||||
 | 
					     * this way cannot be used to launch generations before one of | 
				
			||||||
 | 
					     * {@link #initialize(EObject, File, List)} or | 
				
			||||||
 | 
					     * {@link #initialize(URI, File, List)} is called. | 
				
			||||||
 | 
					     * <p> | 
				
			||||||
 | 
					     * The main reason for this constructor is to allow clients of this | 
				
			||||||
 | 
					     * generation to call it from another Java file, as it allows for the | 
				
			||||||
 | 
					     * retrieval of {@link #getProperties()} and | 
				
			||||||
 | 
					     * {@link #getGenerationListeners()}. | 
				
			||||||
 | 
					     * </p> | 
				
			||||||
 | 
					     * | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public Capella2aadl() { | 
				
			||||||
 | 
					        // Empty implementation
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This allows clients to instantiates a generator with all required information. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param modelURI | 
				
			||||||
 | 
					     *            URI where the model on which this generator will be used is located. | 
				
			||||||
 | 
					     * @param targetFolder | 
				
			||||||
 | 
					     *            This will be used as the output folder for this generation : it will be the base path | 
				
			||||||
 | 
					     *            against which all file block URLs will be resolved. | 
				
			||||||
 | 
					     * @param arguments | 
				
			||||||
 | 
					     *            If the template which will be called requires more than one argument taken from the model, | 
				
			||||||
 | 
					     *            pass them here. | 
				
			||||||
 | 
					     * @throws IOException | 
				
			||||||
 | 
					     *             This can be thrown in three scenarios : the module cannot be found, it cannot be loaded, or | 
				
			||||||
 | 
					     *             the model cannot be loaded. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public Capella2aadl(URI modelURI, File targetFolder, | 
				
			||||||
 | 
					            List<? extends Object> arguments) throws IOException { | 
				
			||||||
 | 
					        initialize(modelURI, targetFolder, arguments); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This allows clients to instantiates a generator with all required information. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param model | 
				
			||||||
 | 
					     *            We'll iterate over the content of this element to find Objects matching the first parameter | 
				
			||||||
 | 
					     *            of the template we need to call. | 
				
			||||||
 | 
					     * @param targetFolder | 
				
			||||||
 | 
					     *            This will be used as the output folder for this generation : it will be the base path | 
				
			||||||
 | 
					     *            against which all file block URLs will be resolved. | 
				
			||||||
 | 
					     * @param arguments | 
				
			||||||
 | 
					     *            If the template which will be called requires more than one argument taken from the model, | 
				
			||||||
 | 
					     *            pass them here. | 
				
			||||||
 | 
					     * @throws IOException | 
				
			||||||
 | 
					     *             This can be thrown in two scenarios : the module cannot be found, or it cannot be loaded. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public Capella2aadl(EObject model, File targetFolder, | 
				
			||||||
 | 
					            List<? extends Object> arguments) throws IOException { | 
				
			||||||
 | 
					        initialize(model, targetFolder, arguments); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This can be used to launch the generation from a standalone application. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param args | 
				
			||||||
 | 
					     *            Arguments of the generation. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    public static void main(String[] args) { | 
				
			||||||
 | 
					        try { | 
				
			||||||
 | 
					            if (args.length < 2) { | 
				
			||||||
 | 
					                System.out.println("Arguments not valid : {model, folder}."); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					                URI modelURI = URI.createFileURI(args[0]); | 
				
			||||||
 | 
					                File folder = new File(args[1]); | 
				
			||||||
 | 
					                 | 
				
			||||||
 | 
					                List<String> arguments = new ArrayList<String>(); | 
				
			||||||
 | 
					                 | 
				
			||||||
 | 
					                /* | 
				
			||||||
 | 
					                 * If you want to change the content of this method, do NOT forget to change the "@generated" | 
				
			||||||
 | 
					                 * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation | 
				
			||||||
 | 
					                 * of the Acceleo module with the main template that has caused the creation of this class will | 
				
			||||||
 | 
					                 * revert your modifications. | 
				
			||||||
 | 
					                 */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                /* | 
				
			||||||
 | 
					                 * Add in this list all the arguments used by the starting point of the generation | 
				
			||||||
 | 
					                 * If your main template is called on an element of your model and a String, you can | 
				
			||||||
 | 
					                 * add in "arguments" this "String" attribute. | 
				
			||||||
 | 
					                 */ | 
				
			||||||
 | 
					                 | 
				
			||||||
 | 
					                Capella2aadl generator = new Capella2aadl(modelURI, folder, arguments); | 
				
			||||||
 | 
					                 | 
				
			||||||
 | 
					                /* | 
				
			||||||
 | 
					                 * Add the properties from the launch arguments. | 
				
			||||||
 | 
					                 * If you want to programmatically add new properties, add them in "propertiesFiles" | 
				
			||||||
 | 
					                 * You can add the absolute path of a properties files, or even a project relative path. | 
				
			||||||
 | 
					                 * If you want to add another "protocol" for your properties files, please override  | 
				
			||||||
 | 
					                 * "getPropertiesLoaderService(AcceleoService)" in order to return a new property loader. | 
				
			||||||
 | 
					                 * The behavior of the properties loader service is explained in the Acceleo documentation | 
				
			||||||
 | 
					                 * (Help -> Help Contents). | 
				
			||||||
 | 
					                 */ | 
				
			||||||
 | 
					                  | 
				
			||||||
 | 
					                for (int i = 2; i < args.length; i++) { | 
				
			||||||
 | 
					                    generator.addPropertiesFile(args[i]); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                 | 
				
			||||||
 | 
					                generator.doGenerate(new BasicMonitor()); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } catch (IOException e) { | 
				
			||||||
 | 
					            e.printStackTrace(); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * Launches the generation described by this instance. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param monitor | 
				
			||||||
 | 
					     *            This will be used to display progress information to the user. | 
				
			||||||
 | 
					     * @throws IOException | 
				
			||||||
 | 
					     *             This will be thrown if any of the output files cannot be saved to disk. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void doGenerate(Monitor monitor) throws IOException { | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * TODO if you wish to change the generation as a whole, override this. The default behavior should | 
				
			||||||
 | 
					         * be sufficient in most cases. If you want to change the content of this method, do NOT forget to | 
				
			||||||
 | 
					         * change the "@generated" tag in the Javadoc of this method to "@generated NOT". Without this new tag, | 
				
			||||||
 | 
					         * any compilation of the Acceleo module with the main template that has caused the creation of this | 
				
			||||||
 | 
					         * class will revert your modifications. If you encounter a problem with an unresolved proxy during the | 
				
			||||||
 | 
					         * generation, you can remove the comments in the following instructions to check for problems. Please | 
				
			||||||
 | 
					         * note that those instructions may have a significant impact on the performances. | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //org.eclipse.emf.ecore.util.EcoreUtil.resolveAll(model);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * If you want to check for potential errors in your models before the launch of the generation, you | 
				
			||||||
 | 
					         * use the code below. | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //if (model != null && model.eResource() != null) {
 | 
				
			||||||
 | 
					        //    List<org.eclipse.emf.ecore.resource.Resource.Diagnostic> errors = model.eResource().getErrors();
 | 
				
			||||||
 | 
					        //    for (org.eclipse.emf.ecore.resource.Resource.Diagnostic diagnostic : errors) {
 | 
				
			||||||
 | 
					        //        System.err.println(diagnostic.toString());
 | 
				
			||||||
 | 
					        //    }
 | 
				
			||||||
 | 
					        //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        super.doGenerate(monitor); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * If this generator needs to listen to text generation events, listeners can be returned from here. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @return List of listeners that are to be notified when text is generated through this launch. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public List<IAcceleoTextGenerationListener> getGenerationListeners() { | 
				
			||||||
 | 
					        List<IAcceleoTextGenerationListener> listeners = super.getGenerationListeners(); | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * TODO if you need to listen to generation event, add listeners to the list here. If you want to change | 
				
			||||||
 | 
					         * the content of this method, do NOT forget to change the "@generated" tag in the Javadoc of this method | 
				
			||||||
 | 
					         * to "@generated NOT". Without this new tag, any compilation of the Acceleo module with the main template | 
				
			||||||
 | 
					         * that has caused the creation of this class will revert your modifications. | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					        return listeners; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * If you need to change the way files are generated, this is your entry point. | 
				
			||||||
 | 
					     * <p> | 
				
			||||||
 | 
					     * The default is {@link org.eclipse.acceleo.engine.generation.strategy.DefaultStrategy}; it generates | 
				
			||||||
 | 
					     * files on the fly. If you only need to preview the results, return a new | 
				
			||||||
 | 
					     * {@link org.eclipse.acceleo.engine.generation.strategy.PreviewStrategy}. Both of these aren't aware of | 
				
			||||||
 | 
					     * the running Eclipse and can be used standalone. | 
				
			||||||
 | 
					     * </p> | 
				
			||||||
 | 
					     * <p> | 
				
			||||||
 | 
					     * If you need the file generation to be aware of the workspace (A typical example is when you wanna | 
				
			||||||
 | 
					     * override files that are under clear case or any other VCS that could forbid the overriding), then | 
				
			||||||
 | 
					     * return a new {@link org.eclipse.acceleo.engine.generation.strategy.WorkspaceAwareStrategy}. | 
				
			||||||
 | 
					     * <b>Note</b>, however, that this <b>cannot</b> be used standalone. | 
				
			||||||
 | 
					     * </p> | 
				
			||||||
 | 
					     * <p> | 
				
			||||||
 | 
					     * All three of these default strategies support merging through JMerge. | 
				
			||||||
 | 
					     * </p> | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @return The generation strategy that is to be used for generations launched through this launcher. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public IAcceleoGenerationStrategy getGenerationStrategy() { | 
				
			||||||
 | 
					        return super.getGenerationStrategy(); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This will be called in order to find and load the module that will be launched through this launcher. | 
				
			||||||
 | 
					     * We expect this name not to contain file extension, and the module to be located beside the launcher. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @return The name of the module that is to be launched. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String getModuleName() { | 
				
			||||||
 | 
					        return MODULE_FILE_NAME; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * If the module(s) called by this launcher require properties files, return their qualified path from | 
				
			||||||
 | 
					     * here.Take note that the first added properties files will take precedence over subsequent ones if they | 
				
			||||||
 | 
					     * contain conflicting keys. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @return The list of properties file we need to add to the generation context. | 
				
			||||||
 | 
					     * @see java.util.ResourceBundle#getBundle(String) | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public List<String> getProperties() { | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * If you want to change the content of this method, do NOT forget to change the "@generated" | 
				
			||||||
 | 
					         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation | 
				
			||||||
 | 
					         * of the Acceleo module with the main template that has caused the creation of this class will | 
				
			||||||
 | 
					         * revert your modifications. | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * TODO if your generation module requires access to properties files, add their qualified path to the list here. | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * Properties files can be located in an Eclipse plug-in or in the file system (all Acceleo projects are Eclipse | 
				
			||||||
 | 
					         * plug-in). In order to use properties files located in an Eclipse plugin, you need to add the path of the properties | 
				
			||||||
 | 
					         * files to the "propertiesFiles" list: | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * final String prefix = "platform:/plugin/"; | 
				
			||||||
 | 
					         * final String pluginName = "org.eclipse.acceleo.module.sample"; | 
				
			||||||
 | 
					         * final String packagePath = "/org/eclipse/acceleo/module/sample/properties/"; | 
				
			||||||
 | 
					         * final String fileName = "default.properties"; | 
				
			||||||
 | 
					         * propertiesFiles.add(prefix + pluginName + packagePath + fileName); | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * With this mechanism, you can load properties files from your plugin or from another plugin. | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * You may want to load properties files from the file system, for that you need to add the absolute path of the file: | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * propertiesFiles.add("C:\Users\MyName\MyFile.properties"); | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * If you want to let your users add properties files located in the same folder as the model: | 
				
			||||||
 | 
					         * | 
				
			||||||
 | 
					         * if (EMFPlugin.IS_ECLIPSE_RUNNING && model != null && model.eResource() != null) {  | 
				
			||||||
 | 
					         *     propertiesFiles.addAll(AcceleoEngineUtils.getPropertiesFilesNearModel(model.eResource())); | 
				
			||||||
 | 
					         * } | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * To learn more about Properties Files, have a look at the Acceleo documentation (Help -> Help Contents). | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					        return propertiesFiles; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * Adds a properties file in the list of properties files. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param propertiesFile | 
				
			||||||
 | 
					     *            The properties file to add. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     * @since 3.1 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void addPropertiesFile(String propertiesFile) { | 
				
			||||||
 | 
					        this.propertiesFiles.add(propertiesFile); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This will be used to get the list of templates that are to be launched by this launcher. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @return The list of templates to call on the module {@link #getModuleName()}. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public String[] getTemplateNames() { | 
				
			||||||
 | 
					        return TEMPLATE_NAMES; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This can be used to update the resource set's package registry with all needed EPackages. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param resourceSet | 
				
			||||||
 | 
					     *            The resource set which registry has to be updated. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void registerPackages(ResourceSet resourceSet) { | 
				
			||||||
 | 
					        super.registerPackages(resourceSet); | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * If you want to change the content of this method, do NOT forget to change the "@generated" | 
				
			||||||
 | 
					         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation | 
				
			||||||
 | 
					         * of the Acceleo module with the main template that has caused the creation of this class will | 
				
			||||||
 | 
					         * revert your modifications. | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * If you need additional package registrations, you can register them here. The following line | 
				
			||||||
 | 
					         * (in comment) is an example of the package registration for UML. | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * You can use the method  "isInWorkspace(Class c)" to check if the package that you are about to | 
				
			||||||
 | 
					         * register is in the workspace. | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * To register a package properly, please follow the following conventions: | 
				
			||||||
 | 
					         * | 
				
			||||||
 | 
					         * If the package is located in another plug-in, already installed in Eclipse. The following content should | 
				
			||||||
 | 
					         * have been generated at the beginning of this method. Do not register the package using this mechanism if | 
				
			||||||
 | 
					         * the metamodel is located in the workspace. | 
				
			||||||
 | 
					         *   | 
				
			||||||
 | 
					         * if (!isInWorkspace(UMLPackage.class)) { | 
				
			||||||
 | 
					         *     // The normal package registration if your metamodel is in a plugin.
 | 
				
			||||||
 | 
					         *     resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE); | 
				
			||||||
 | 
					         * } | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * If the package is located in another project in your workspace, the plugin containing the package has not | 
				
			||||||
 | 
					         * been register by EMF and Acceleo should register it automatically. If you want to use the generator in | 
				
			||||||
 | 
					         * stand alone, the regular registration (seen a couple lines before) is needed. | 
				
			||||||
 | 
					         *  | 
				
			||||||
 | 
					         * To learn more about Package Registration, have a look at the Acceleo documentation (Help -> Help Contents). | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * This can be used to update the resource set's resource factory registry with all needed factories. | 
				
			||||||
 | 
					     *  | 
				
			||||||
 | 
					     * @param resourceSet | 
				
			||||||
 | 
					     *            The resource set which registry has to be updated. | 
				
			||||||
 | 
					     * @generated | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void registerResourceFactories(ResourceSet resourceSet) { | 
				
			||||||
 | 
					        super.registerResourceFactories(resourceSet); | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * If you want to change the content of this method, do NOT forget to change the "@generated" | 
				
			||||||
 | 
					         * tag in the Javadoc of this method to "@generated NOT". Without this new tag, any compilation | 
				
			||||||
 | 
					         * of the Acceleo module with the main template that has caused the creation of this class will | 
				
			||||||
 | 
					         * revert your modifications. | 
				
			||||||
 | 
					         */ | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					        /* | 
				
			||||||
 | 
					         * TODO If you need additional resource factories registrations, you can register them here. the following line | 
				
			||||||
 | 
					         * (in comment) is an example of the resource factory registration for UML. | 
				
			||||||
 | 
					         * | 
				
			||||||
 | 
					         * If you want to use the generator in stand alone, the resource factory registration will be required. | 
				
			||||||
 | 
					         *   | 
				
			||||||
 | 
					         * To learn more about the registration of Resource Factories, have a look at the Acceleo documentation (Help -> Help Contents).  | 
				
			||||||
 | 
					         */  | 
				
			||||||
 | 
					         | 
				
			||||||
 | 
					        // resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,234 @@ | 
				
			|||||||
 | 
					[comment encoding = UTF-8 /] | 
				
			||||||
 | 
					[** | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 */] | 
				
			||||||
 | 
					[module capella2aadl('http://www.polarsys.org/capella/core/pa/1.1.0','http://www.polarsys.org/capella/core/core/1.1.0','http://www.polarsys.org/capella/core/modeller/1.1.0','http://www.polarsys.org/capella/common/libraries/1.1.0','http://www.polarsys.org/capella/common/core/1.1.0','http://www.polarsys.org/capella/core/common/1.1.0', 'http://www.polarsys.org/capella/core/cs/1.1.0', 'http://www.polarsys.org/capella/core/fa/1.1.0')] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[import com::irtsaintexupery::capella2aadl::requests::capella2aadl_queries /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateProject(aProject: Project)] | 
				
			||||||
 | 
					[comment @main/] | 
				
			||||||
 | 
					[transformCapellaPhysicalLinksIntoAADLBusTopology(aProject)/] | 
				
			||||||
 | 
					[transformCapellaComponentExchangeIntoAADLConnections(aProject)/] | 
				
			||||||
 | 
					[for(cat: String | getBusNames(aProject))][generateBus(cat)/][/for] | 
				
			||||||
 | 
					[for(component: PhysicalComponent | PhysicalComponent.allInstances())][generatePhysicalComponent(component)/][/for] | 
				
			||||||
 | 
					[/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[** | 
				
			||||||
 | 
					 * The documentation of the template generatePhysicalComponent. | 
				
			||||||
 | 
					 * @param aPhysicalComponent | 
				
			||||||
 | 
					 */] | 
				
			||||||
 | 
					[template public generatePhysicalComponent(aPhysicalComponent : PhysicalComponent)] | 
				
			||||||
 | 
					[let PcName : String = aPhysicalComponent.name.replaceAll(' ', '_') ] | 
				
			||||||
 | 
					[if(not aPhysicalComponent.hasPropertyValue('isBus'))] | 
				
			||||||
 | 
					[file ((PcName + '.aadl').toLower(), false, 'UTF-8')] | 
				
			||||||
 | 
					package [PcName/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public | 
				
			||||||
 | 
					[for(name: String | aPhysicalComponent.ownedPhysicalComponents->select(nature = PhysicalComponentNature::NODE).name->asSet()->union(getSyntheticPorts(aPhysicalComponent).getBusTypeForPort()->asSet())->sortedBy(s: String | s))] | 
				
			||||||
 | 
					    with [name.replaceAll(' ', '_')/]; renames [name.replaceAll(' ', '_')/]::all; | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[for(processor: PhysicalComponent | aPhysicalComponent.ownedPhysicalComponents->select(kind=PhysicalComponentKind::SOFTWARE_EXECUTION_UNIT))] | 
				
			||||||
 | 
					[let processorPart: Part = Part.allInstances()->select(abstractType=processor)->any(eContainer()=aPhysicalComponent and name=processor.name)] | 
				
			||||||
 | 
					[let deployedParts: Sequence(Part) = processorPart.ownedDeploymentLinks.deployedElement] | 
				
			||||||
 | 
					    [for(part: Part | deployedParts->sortedBy(name))] | 
				
			||||||
 | 
					    with [part.abstractType.name.replaceAll(' ', '_')/]; renames [part.abstractType.name.replaceAll(' ', '_')/]::all; | 
				
			||||||
 | 
					    [/for] | 
				
			||||||
 | 
					[/let][/let] | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[if(aPhysicalComponent.nature = PhysicalComponentNature::BEHAVIOR)] | 
				
			||||||
 | 
					    [generateBehavior(aPhysicalComponent)/] | 
				
			||||||
 | 
					[else] | 
				
			||||||
 | 
					    [generateNode(aPhysicalComponent)/] | 
				
			||||||
 | 
					[/if] | 
				
			||||||
 | 
					end [PcName/]; | 
				
			||||||
 | 
					[/file] | 
				
			||||||
 | 
					[/if][/let][/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateBehavior(aPhysicalComponent : PhysicalComponent)] | 
				
			||||||
 | 
					[let PcName : String = aPhysicalComponent.name.replaceAll(' ', '_') ] | 
				
			||||||
 | 
					process [PcName/] | 
				
			||||||
 | 
					[if(aPhysicalComponent.ownedFeatures->filter(ComponentPort)->notEmpty())]     | 
				
			||||||
 | 
					    features | 
				
			||||||
 | 
					[for(port1: ComponentPort | aPhysicalComponent.ownedFeatures->filter(ComponentPort)->sortedBy(name))] | 
				
			||||||
 | 
					[if(port1.kind=ComponentPortKind::FLOW)]        [port1.name.replaceAll(' ', '_')/]: [port1.orientation.getPortDirection()/] feature;[/if] | 
				
			||||||
 | 
					[/for][/if] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end [PcName/]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					process implementation [PcName/].impl | 
				
			||||||
 | 
					end [PcName/].impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[/let] | 
				
			||||||
 | 
					[/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateNode(aPhysicalComponent : PhysicalComponent)] | 
				
			||||||
 | 
					[if(aPhysicalComponent.kind=PhysicalComponentKind::SOFTWARE_EXECUTION_UNIT)] | 
				
			||||||
 | 
					[generateProcessor(aPhysicalComponent)/] | 
				
			||||||
 | 
					[elseif(aPhysicalComponent.kind=PhysicalComponentKind::HARDWARE)] | 
				
			||||||
 | 
					[generateDevice(aPhysicalComponent)/] | 
				
			||||||
 | 
					[else] | 
				
			||||||
 | 
					[generateSystem(aPhysicalComponent)/] | 
				
			||||||
 | 
					[/if][/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateProcessor(aPhysicalComponent : PhysicalComponent)] | 
				
			||||||
 | 
					[let PcName : String = aPhysicalComponent.name.replaceAll(' ', '_') ] | 
				
			||||||
 | 
					processor [PcName/] | 
				
			||||||
 | 
					[if(getSyntheticPorts(aPhysicalComponent)->notEmpty())] | 
				
			||||||
 | 
					    features | 
				
			||||||
 | 
					[for(pport: PhysicalPort | getSyntheticPorts(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					        [pport.name.toLowerCase().replaceAll(' ', '_')/]: requires bus access [getBusTypeForPort(pport).replaceAll(' ', '_')/].impl; | 
				
			||||||
 | 
					[/for][/if] | 
				
			||||||
 | 
					end [PcName/]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					processor implementation [PcName/].impl | 
				
			||||||
 | 
					end [PcName/].impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[/let] | 
				
			||||||
 | 
					[/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateDevice(aPhysicalComponent : PhysicalComponent)] | 
				
			||||||
 | 
					[let PcName : String = aPhysicalComponent.name.replaceAll(' ', '_') ] | 
				
			||||||
 | 
					device [PcName/] | 
				
			||||||
 | 
					[if(getSyntheticPorts(aPhysicalComponent)->union(getComponentVirtualBehaviorPort(aPhysicalComponent))->notEmpty())] | 
				
			||||||
 | 
					    features | 
				
			||||||
 | 
					[for(pport: PhysicalPort | getSyntheticPorts(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					        [pport.name.toLowerCase().replaceAll(' ', '_')/]: requires bus access [getBusTypeForPort(pport).replaceAll(' ', '_')/].impl; | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[for(pport: PhysicalPort | getComponentVirtualBehaviorPort(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					        [pport.name.toLowerCase().replaceAll(' ', '_')/]: [pport.getStringPropertyValue('orientation')/] feature; | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[/if] | 
				
			||||||
 | 
					end [PcName/]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					device implementation [PcName/].impl | 
				
			||||||
 | 
					end [PcName/].impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[/let] | 
				
			||||||
 | 
					[/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateBus(name : String)] | 
				
			||||||
 | 
					[let busName: String = name.replaceAll(' ', '_')] | 
				
			||||||
 | 
					[file ((busName + '.aadl').toLower(), false, 'UTF-8')] | 
				
			||||||
 | 
					package [busName/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bus [busName/] | 
				
			||||||
 | 
					end [busName/]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bus implementation [busName/].impl | 
				
			||||||
 | 
					end [busName/].impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end [busName/]; | 
				
			||||||
 | 
					[/file][/let] | 
				
			||||||
 | 
					[/template] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[template public generateSystem(aPhysicalComponent : PhysicalComponent)] | 
				
			||||||
 | 
					[let PcName : String = aPhysicalComponent.name.replaceAll(' ', '_') ] | 
				
			||||||
 | 
					system [PcName/] | 
				
			||||||
 | 
					[if(getSyntheticPorts(aPhysicalComponent)->union(getComponentVirtualBehaviorPort(aPhysicalComponent))->notEmpty())] | 
				
			||||||
 | 
					    features | 
				
			||||||
 | 
					[for(pport: PhysicalPort | getSyntheticPorts(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					        [pport.name.toLowerCase().replaceAll(' ', '_')/]: requires bus access [getBusTypeForPort(pport).replaceAll(' ', '_')/].impl; | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[for(pport: PhysicalPort | getComponentVirtualBehaviorPort(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					        [pport.name.toLowerCase().replaceAll(' ', '_')/]: [pport.getStringPropertyValue('orientation')/] feature; | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[/if] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end [PcName/]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					system implementation [PcName/].impl | 
				
			||||||
 | 
					[if(aPhysicalComponent.ownedPhysicalComponents->select(nature = PhysicalComponentNature::NODE)->notEmpty())] | 
				
			||||||
 | 
					    subcomponents | 
				
			||||||
 | 
					[for(bus: PhysicalComponent | aPhysicalComponent.ownedPhysicalComponents->select(nature = PhysicalComponentNature::NODE)->sortedBy(name))] | 
				
			||||||
 | 
					    [if(not bus.hasPropertyValue('isBus'))] | 
				
			||||||
 | 
					        [bus.name.toLower().replaceAll(' ', '_')/]_part: [getAADLNature(bus)/] [bus.name.replaceAll(' ', '_')/].impl; | 
				
			||||||
 | 
					    [else] | 
				
			||||||
 | 
					        [bus.getStringPropertyValue('busName').toLower().replaceAll(' ', '_')/]: [getAADLNature(bus)/] [bus.name.replaceAll(' ', '_')/].impl; | 
				
			||||||
 | 
					    [/if]     | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[for(processor: PhysicalComponent | aPhysicalComponent.ownedPhysicalComponents->select(kind=PhysicalComponentKind::SOFTWARE_EXECUTION_UNIT)->sortedBy(name))] | 
				
			||||||
 | 
					[let processorPart: Part = Part.allInstances()->select(abstractType=processor)->any(eContainer()=aPhysicalComponent and name=processor.name)] | 
				
			||||||
 | 
					[let deployedParts: Sequence(Part) = processorPart.ownedDeploymentLinks.deployedElement] | 
				
			||||||
 | 
					    [for(part: Part | deployedParts->sortedBy(name))] | 
				
			||||||
 | 
					        [part.name.toLower().replaceAll(' ', '_')/]_part: process [part.abstractType.name.replaceAll(' ', '_')/].impl; | 
				
			||||||
 | 
					    [/for] | 
				
			||||||
 | 
					[/let][/let] | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[/if] | 
				
			||||||
 | 
					[if(getSyntheticLinks(aPhysicalComponent)->union(getComponentVirtualBehaviorLink(aPhysicalComponent))->notEmpty())] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connections | 
				
			||||||
 | 
					        -- Bus accesses | 
				
			||||||
 | 
					[for(link: PhysicalLink | getSyntheticLinks(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					[let pp1: PhysicalPort = link.linkEnds->at(1).oclAsType(PhysicalPort)] | 
				
			||||||
 | 
					[let pp2: PhysicalPort = link.linkEnds->at(2).oclAsType(PhysicalPort)] | 
				
			||||||
 | 
					[let linkEnd_1_container: String = if(pp1.eContainer() <> aPhysicalComponent) then pp1.eContainer().oclAsType(PhysicalComponent).name.toLower().replaceAll(' ', '_') else '' endif] | 
				
			||||||
 | 
					[let linkEnd_2_container: String = if(pp2.eContainer() <> aPhysicalComponent) then pp2.eContainer().oclAsType(PhysicalComponent).name.toLower().replaceAll(' ', '_') else '' endif] | 
				
			||||||
 | 
					    [if(not pp2.eContainer().oclAsType(PhysicalComponent).hasPropertyValue('isBus'))] | 
				
			||||||
 | 
					        [link.name.toLower().replaceAll(' ', '_')/]_connection: bus access [if(linkEnd_1_container<>'')][linkEnd_1_container/]_part.[/if][pp1.name.toLower().replaceAll(' ', '_')/] -> [if(linkEnd_2_container<>'')][linkEnd_2_container/]_part.[/if][pp2.name.toLower().replaceAll(' ', '_')/]; | 
				
			||||||
 | 
					    [else] | 
				
			||||||
 | 
					        [link.name.toLower().replaceAll(' ', '_')/]_connection: bus access [if(linkEnd_1_container<>'')][linkEnd_1_container/]_part.[/if][pp1.name.toLower().replaceAll(' ', '_')/] -> [pp2.eContainer().oclAsType(PhysicalComponent).getStringPropertyValue('busName').toLower().replaceAll(' ', '_')/]; | 
				
			||||||
 | 
					    [/if] | 
				
			||||||
 | 
					[/let][/let][/let][/let] | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        -- Logical connections | 
				
			||||||
 | 
					[for(link: PhysicalLink | getComponentVirtualBehaviorLink(aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
					[let pp1: PhysicalPort = link.linkEnds->at(1).oclAsType(PhysicalPort)] | 
				
			||||||
 | 
					[let pp2: PhysicalPort = link.linkEnds->at(2).oclAsType(PhysicalPort)] | 
				
			||||||
 | 
					[let linkEnd_1_container: String = if(pp1.eContainer() <> aPhysicalComponent) then pp1.eContainer().oclAsType(PhysicalComponent).name.toLower().replaceAll(' ', '_') else '' endif] | 
				
			||||||
 | 
					[let linkEnd_2_container: String = if(pp2.eContainer() <> aPhysicalComponent) then pp2.eContainer().oclAsType(PhysicalComponent).name.toLower().replaceAll(' ', '_') else '' endif] | 
				
			||||||
 | 
					        [link.name.toLower().replaceAll(' ', '_')/]_connection: feature [if(linkEnd_1_container<>'')][linkEnd_1_container/]_part.[/if][pp1.name.toLower().replaceAll(' ', '_')/] -> [if(linkEnd_2_container<>'')][linkEnd_2_container/]_part.[/if][pp2.name.toLower().replaceAll(' ', '_')/]; | 
				
			||||||
 | 
					[/let][/let] | 
				
			||||||
 | 
					[/let][/let] | 
				
			||||||
 | 
					[/for] | 
				
			||||||
 | 
					[/if] | 
				
			||||||
 | 
					[let processors: OrderedSet(PhysicalComponent) = aPhysicalComponent.ownedPhysicalComponents->select(kind=PhysicalComponentKind::SOFTWARE_EXECUTION_UNIT)] | 
				
			||||||
 | 
					[let parts: Bag(DeployableElement) = Part.allInstances()->select(processors->includes(abstractType) and eContainer()=aPhysicalComponent).ownedDeploymentLinks.deployedElement] | 
				
			||||||
 | 
					[let buses: OrderedSet(PhysicalComponent) = aPhysicalComponent.ownedPhysicalComponents->select(nature = PhysicalComponentNature::NODE and hasPropertyValue('isBus'))->sortedBy(name)] | 
				
			||||||
 | 
					[let links: Sequence(PhysicalLink) = getAllocatedVirtualBehaviorLink(aPhysicalComponent)->select(l: PhysicalLink | buses->select(b: PhysicalComponent | b.getStringPropertyValue('busName') = l.getStringPropertyValue('allocatedToBus'))->notEmpty())] | 
				
			||||||
 | 
					[comment] | 
				
			||||||
 | 
					-- processors: [processors.name->sep(', ')/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- parts: [parts.name->sep(', ')/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- buses: [buses.getStringPropertyValue('busName')->sep(', ')/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- links: [links.name->sep(', ')/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- links allocatedToBus: [links.getStringPropertyValue('allocatedToBus')->sep(', ')/] | 
				
			||||||
 | 
					[/comment] | 
				
			||||||
 | 
					[if(parts->notEmpty() or links->notEmpty())] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    properties | 
				
			||||||
 | 
						[for(processor: PhysicalComponent | processors->sortedBy(name))] | 
				
			||||||
 | 
							[for(processorPart: Part | Part.allInstances()->select(abstractType=processor and eContainer()=aPhysicalComponent)->sortedBy(name))] | 
				
			||||||
 | 
								[let deployedParts: Sequence(Part) = processorPart.ownedDeploymentLinks.deployedElement] | 
				
			||||||
 | 
					    			[for(part: Part | deployedParts->sortedBy(name))] | 
				
			||||||
 | 
					        Actual_Processor_Binding => (reference ([processorPart.name.toLower().replaceAll(' ', '_')/]_part)) applies to [part.name.toLower().replaceAll(' ', '_')/]_part; | 
				
			||||||
 | 
					    			[/for] | 
				
			||||||
 | 
								[/let] | 
				
			||||||
 | 
							[/for] | 
				
			||||||
 | 
						[/for] | 
				
			||||||
 | 
						[for(bus: PhysicalComponent | buses)] | 
				
			||||||
 | 
					    	[for(link: PhysicalLink | links->select(l: PhysicalLink | bus.getStringPropertyValue('busName') = l.getStringPropertyValue('allocatedToBus')))] | 
				
			||||||
 | 
					    	Actual_Connection_Binding => (reference ([bus.getStringPropertyValue('busName').toLower().replaceAll(' ', '_')/])) applies to [getVirtualBehaviorLinkRelativeInstancePath(link, aPhysicalComponent)/]_connection; | 
				
			||||||
 | 
					    	[/for] | 
				
			||||||
 | 
						[/for] | 
				
			||||||
 | 
					[/if] | 
				
			||||||
 | 
					[/let][/let][/let][/let] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end [PcName/].impl; | 
				
			||||||
 | 
					[/let][/template] | 
				
			||||||
@ -0,0 +1,73 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.requests; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					import java.util.Set; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellamodeller.Project; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Bus { | 
				
			||||||
 | 
						private String name; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private String type; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static Map<String, int[]> busCounters = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static Set<String> getBusNames(Project project) { | 
				
			||||||
 | 
							return busCounters.keySet(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static Bus createIncrementedNameFromCategory(String type) { | 
				
			||||||
 | 
							if(busCounters == null) { | 
				
			||||||
 | 
								init(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!busCounters.containsKey(type)) { | 
				
			||||||
 | 
								busCounters.put(type, new int[] { 1 }); | 
				
			||||||
 | 
							} else { | 
				
			||||||
 | 
								busCounters.get(type)[0]++; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							return new Bus(type + "_" + busCounters.get(type)[0], type); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private Bus(String aName) { | 
				
			||||||
 | 
							name = aName; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private Bus(String aName, String aType) { | 
				
			||||||
 | 
							name = aName; | 
				
			||||||
 | 
							type = aType; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public String getType() { | 
				
			||||||
 | 
							return type; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void setType(String type) { | 
				
			||||||
 | 
							this.type = type; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public String getName() { | 
				
			||||||
 | 
							return name; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void setName(String name) { | 
				
			||||||
 | 
							this.name = name; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						public static void init() { | 
				
			||||||
 | 
							 busCounters = new HashMap<String, int[]>(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,22 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.requests; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Capella2AADLException extends Exception { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = 1089748525850510492L; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public Capella2AADLException(String message) { | 
				
			||||||
 | 
							super(message); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,493 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.requests; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.Collection; | 
				
			||||||
 | 
					import java.util.HashMap; | 
				
			||||||
 | 
					import java.util.HashSet; | 
				
			||||||
 | 
					import java.util.Iterator; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					import java.util.Set; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.eclipse.emf.ecore.EObject; | 
				
			||||||
 | 
					import org.eclipse.emf.ecore.util.EcoreUtil; | 
				
			||||||
 | 
					import org.polarsys.capella.common.data.modellingcore.AbstractType; | 
				
			||||||
 | 
					import org.polarsys.capella.common.helpers.EcoreUtil2; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.CapellacoreFactory; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.ModellingArchitecture; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.StringPropertyValue; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellamodeller.Project; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellamodeller.SystemEngineering; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.AbstractDeploymentLink; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.CsFactory; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.DeployableElement; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.Part; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.PhysicalLink; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.PhysicalPort; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.fa.ComponentExchange; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.fa.ComponentPort; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.fa.ComponentPortAllocation; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.fa.OrientationPortKind; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PaFactory; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalArchitecture; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalComponent; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalComponentKind; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalComponentNature; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.common.collect.ArrayListMultimap; | 
				
			||||||
 | 
					import com.google.common.collect.Multimap; | 
				
			||||||
 | 
					import com.google.common.collect.Multimaps; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * This class provides various static methods for transforming Capella physical | 
				
			||||||
 | 
					 * architecture into a preliminary but yet complete AADL model. The main | 
				
			||||||
 | 
					 * transformation consists in moving from the 1 to 1 communication model used by | 
				
			||||||
 | 
					 * {@link ComponentExchange} to a bus oriented topology closer to AADL bus | 
				
			||||||
 | 
					 * accesses | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class ComponentExchangeUtils { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This map provides the list of dummy {@link PhysicalComponent} | 
				
			||||||
 | 
						 * representing deployed bahevior nodes for each {@link PhysicalComponent} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static ArrayListMultimap<PhysicalComponent, PhysicalComponent> componentVirtualBehaviorNode; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static ArrayListMultimap<PhysicalComponent, PhysicalPort> componentVirtualBehaviorPort; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static ArrayListMultimap<PhysicalComponent, PhysicalLink> componentVirtualBehaviorLink; | 
				
			||||||
 | 
						private static Multimap<PhysicalLink, PhysicalComponent> virtualBehaviorLinkComponent = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static ArrayListMultimap<String, PhysicalLink> allocationOfVirtualLinkToPhysicalComponent; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private static Map<ComponentPort, PhysicalPort> allocationOfComponentPortToPhysicalPort; | 
				
			||||||
 | 
						 | 
				
			||||||
 | 
						private static List<PhysicalLink> allocatedVirtualBehaviorLink; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param pc | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static List<PhysicalComponent> getComponentVirtualBehaviorNode(PhysicalComponent pc) { | 
				
			||||||
 | 
							return componentVirtualBehaviorNode.get(pc); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param pc | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static List<PhysicalPort> getComponentVirtualBehaviorPort(PhysicalComponent pc) { | 
				
			||||||
 | 
							return componentVirtualBehaviorPort.get(pc); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param pc | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static List<PhysicalLink> getComponentVirtualBehaviorLink(PhysicalComponent pc) { | 
				
			||||||
 | 
							return componentVirtualBehaviorLink.get(pc); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param link | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static Collection<PhysicalComponent> getVirtualBehaviorLinkComponent(PhysicalLink link) { | 
				
			||||||
 | 
							if(virtualBehaviorLinkComponent == null) { | 
				
			||||||
 | 
								virtualBehaviorLinkComponent = Multimaps.invertFrom(componentVirtualBehaviorLink, ArrayListMultimap.<PhysicalLink, PhysicalComponent>create()); | 
				
			||||||
 | 
					//			System.out.println("Reversing component/link map...");
 | 
				
			||||||
 | 
					//			for(PhysicalLink l: virtualBehaviorLinkComponent.keySet()) {
 | 
				
			||||||
 | 
					//				System.out.println(l.getName() + ":");
 | 
				
			||||||
 | 
					//				for(PhysicalComponent c: virtualBehaviorLinkComponent.get(l)) {
 | 
				
			||||||
 | 
					//					System.out.println("\t" + c.getName());
 | 
				
			||||||
 | 
					//				}
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							return virtualBehaviorLinkComponent.get(link); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param pc | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static List<PhysicalLink> getAllocatedVirtualBehaviorLink() { | 
				
			||||||
 | 
							return allocatedVirtualBehaviorLink; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static void transformCapellaComponentExchangeIntoAADLConnections(Project project) throws Capella2AADLException { | 
				
			||||||
 | 
							// Get the physical architecture from Project in Capella model
 | 
				
			||||||
 | 
							List<ModellingArchitecture> architectures = ((SystemEngineering) (project.getOwnedModelRoots().get(0))).getOwnedArchitectures(); | 
				
			||||||
 | 
							PhysicalArchitecture physicalArchitecture = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (ModellingArchitecture architecture : architectures) { | 
				
			||||||
 | 
								if (architecture instanceof PhysicalArchitecture) { | 
				
			||||||
 | 
									physicalArchitecture = (PhysicalArchitecture) architecture; | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// If no physical architecture has been found, the transformation
 | 
				
			||||||
 | 
							// doesn't apply
 | 
				
			||||||
 | 
							if (physicalArchitecture == null) { | 
				
			||||||
 | 
								throw new Capella2AADLException("Physical Architecture not found."); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							PhysicalComponent physicalSystem = physicalArchitecture.getOwnedPhysicalComponent(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Index the PhysicalComponent parts (nature NODE, kind
 | 
				
			||||||
 | 
							// SOFTWARE_EXECUTION_UNIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println("CPU/Device parts:"); | 
				
			||||||
 | 
							List<Part> hardwareParts = new ArrayList<>(); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							allocationOfComponentPortToPhysicalPort = new HashMap<>(); | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							for (Iterator<EObject> it = physicalSystem.eAllContents(); it.hasNext();) { | 
				
			||||||
 | 
								EObject eo = it.next(); | 
				
			||||||
 | 
								if (eo instanceof Part) { | 
				
			||||||
 | 
									Part part = (Part) eo; | 
				
			||||||
 | 
									AbstractType abstractType = part.getAbstractType(); | 
				
			||||||
 | 
									if (abstractType instanceof PhysicalComponent) { | 
				
			||||||
 | 
										PhysicalComponent typeComponent = (PhysicalComponent) abstractType; | 
				
			||||||
 | 
										if ((typeComponent.getKind().equals(PhysicalComponentKind.SOFTWARE_EXECUTION_UNIT) || typeComponent.getKind().equals( | 
				
			||||||
 | 
												PhysicalComponentKind.HARDWARE)) | 
				
			||||||
 | 
												&& typeComponent.getNature().equals(PhysicalComponentNature.NODE)) { | 
				
			||||||
 | 
											hardwareParts.add(part); | 
				
			||||||
 | 
											System.out.println("\t" + PhysicalLinkUtils.getFullQualifiedName(part) + " (" + part.getAbstractType().getName() + ")"); | 
				
			||||||
 | 
										} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
								if(eo instanceof ComponentPortAllocation) { | 
				
			||||||
 | 
									ComponentPortAllocation cpa = (ComponentPortAllocation) eo; | 
				
			||||||
 | 
									allocationOfComponentPortToPhysicalPort.put((ComponentPort) cpa.getTargetElement(), (PhysicalPort) cpa.getSourceElement()); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println(); | 
				
			||||||
 | 
							System.out.println("Deployed components:"); | 
				
			||||||
 | 
							// Build a Behavioral node to CPU/device part map
 | 
				
			||||||
 | 
							Map<PhysicalComponent, Part> behaviourNode2Part = new HashMap<>(); | 
				
			||||||
 | 
							for (Part part : hardwareParts) { | 
				
			||||||
 | 
								for (AbstractDeploymentLink deployableLink : part.getOwnedDeploymentLinks()) { | 
				
			||||||
 | 
									DeployableElement deployableElement = deployableLink.getDeployedElement(); | 
				
			||||||
 | 
									if (deployableElement instanceof Part) { | 
				
			||||||
 | 
										Part deployedPart = (Part) deployableElement; | 
				
			||||||
 | 
										AbstractType deployedPartType = deployedPart.getAbstractType(); | 
				
			||||||
 | 
										if (deployedPartType instanceof PhysicalComponent) { | 
				
			||||||
 | 
											PhysicalComponent deployedPhysicalComponent = (PhysicalComponent) deployedPartType; | 
				
			||||||
 | 
											behaviourNode2Part.put(deployedPhysicalComponent, part); | 
				
			||||||
 | 
											System.out.println("\t" + deployedPhysicalComponent.getName() + " is deployed on " + PhysicalLinkUtils.getFullQualifiedName(part)); | 
				
			||||||
 | 
										} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println(); | 
				
			||||||
 | 
							componentVirtualBehaviorNode = ArrayListMultimap.create(); | 
				
			||||||
 | 
							componentVirtualBehaviorPort = ArrayListMultimap.create(); | 
				
			||||||
 | 
							componentVirtualBehaviorLink = ArrayListMultimap.create(); | 
				
			||||||
 | 
							allocationOfVirtualLinkToPhysicalComponent = ArrayListMultimap.create(); | 
				
			||||||
 | 
							allocatedVirtualBehaviorLink = new ArrayList<>(); | 
				
			||||||
 | 
							virtualBehaviorLinkComponent = null; | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							// Fow now let's consider ComponentExchanges are all in the root
 | 
				
			||||||
 | 
							// physical system
 | 
				
			||||||
 | 
							for (ComponentExchange ce : physicalSystem.getOwnedComponentExchanges()) { | 
				
			||||||
 | 
								// First determine which PhysicalComponent is the virtual parent of
 | 
				
			||||||
 | 
								// the ports' containers
 | 
				
			||||||
 | 
								ComponentPort sourcePort = (ComponentPort) ce.getSource(); | 
				
			||||||
 | 
								ComponentPort targetPort = (ComponentPort) ce.getTarget(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Re-orient the link if needed. The sourcePort must really be the sender
 | 
				
			||||||
 | 
								if(sourcePort.getOrientation().equals(OrientationPortKind.IN)) { | 
				
			||||||
 | 
									ComponentPort tmpPort = targetPort; | 
				
			||||||
 | 
									targetPort = sourcePort; | 
				
			||||||
 | 
									sourcePort = tmpPort; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								boolean physicalComponentCleanUpNeeded = false; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								System.out.println("Processing ComponentExchange " + PhysicalLinkUtils.getFullQualifiedName(sourcePort) + " <-> " | 
				
			||||||
 | 
										+ PhysicalLinkUtils.getFullQualifiedName(targetPort)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								PhysicalComponent sourcePortContainer = (PhysicalComponent) sourcePort.eContainer(); | 
				
			||||||
 | 
								PhysicalComponent targetPortContainer = (PhysicalComponent) targetPort.eContainer(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								System.out.println("\tsourcePortContainer: " + PhysicalLinkUtils.getFullQualifiedName(sourcePortContainer)); | 
				
			||||||
 | 
								System.out.println("\ttargetPortContainer: " + PhysicalLinkUtils.getFullQualifiedName(targetPortContainer)); | 
				
			||||||
 | 
								// Search now the PhysicalComponent part (nature NODE, kind
 | 
				
			||||||
 | 
								// SOFTWARE_EXECUTION_UNIT) referencing these containers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// The parent of this part/type is the virtual parent of the
 | 
				
			||||||
 | 
								// ports' containers
 | 
				
			||||||
 | 
								Part virtualSourcePortParentPart = behaviourNode2Part.get(sourcePortContainer); | 
				
			||||||
 | 
								Part virtualTargetPortParentPart = behaviourNode2Part.get(targetPortContainer); | 
				
			||||||
 | 
								PhysicalComponent virtualSourcePortGrandParent = null; | 
				
			||||||
 | 
								PhysicalComponent virtualTargetPortGrandParent = null; | 
				
			||||||
 | 
								if (virtualSourcePortParentPart != null) { | 
				
			||||||
 | 
									switch (((PhysicalComponent) behaviourNode2Part.get(sourcePortContainer).getAbstractType()).getKind()) { | 
				
			||||||
 | 
									case SOFTWARE_EXECUTION_UNIT: { | 
				
			||||||
 | 
										virtualSourcePortGrandParent = (PhysicalComponent) behaviourNode2Part.get(sourcePortContainer).eContainer(); | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									case HARDWARE: { | 
				
			||||||
 | 
										virtualSourcePortGrandParent = (PhysicalComponent) behaviourNode2Part.get(sourcePortContainer).getAbstractType(); | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									default: { | 
				
			||||||
 | 
										throw new Capella2AADLException("Unknown PhysicalComponent kind"); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
								if (virtualTargetPortParentPart != null) { | 
				
			||||||
 | 
									switch (((PhysicalComponent) behaviourNode2Part.get(targetPortContainer).getAbstractType()).getKind()) { | 
				
			||||||
 | 
									case SOFTWARE_EXECUTION_UNIT: { | 
				
			||||||
 | 
										virtualTargetPortGrandParent = (PhysicalComponent) behaviourNode2Part.get(targetPortContainer).eContainer(); | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									case HARDWARE: { | 
				
			||||||
 | 
										virtualTargetPortGrandParent = (PhysicalComponent) behaviourNode2Part.get(targetPortContainer).getAbstractType(); | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									default: { | 
				
			||||||
 | 
										throw new Capella2AADLException("Unknown PhysicalComponent kind"); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (virtualSourcePortGrandParent != null && virtualTargetPortGrandParent != null) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									System.out.println("\tvirtualSourcePortGrandParent: " + PhysicalLinkUtils.getFullQualifiedName(virtualSourcePortGrandParent)); | 
				
			||||||
 | 
									System.out.println("\tvirtualTargetPortGrandParent: " + PhysicalLinkUtils.getFullQualifiedName(virtualTargetPortGrandParent)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									PhysicalComponent virtualSourcePortParent = null; | 
				
			||||||
 | 
									PhysicalComponent virtualTargetPortParent = null; | 
				
			||||||
 | 
									switch (((PhysicalComponent) behaviourNode2Part.get(sourcePortContainer).getAbstractType()).getKind()) { | 
				
			||||||
 | 
									case SOFTWARE_EXECUTION_UNIT: { | 
				
			||||||
 | 
										virtualSourcePortParent = PaFactory.eINSTANCE.createPhysicalComponent(sourcePortContainer.getName()); | 
				
			||||||
 | 
										componentVirtualBehaviorNode.put(virtualSourcePortGrandParent, virtualSourcePortParent); | 
				
			||||||
 | 
										virtualSourcePortGrandParent.getOwnedPhysicalComponents().add(virtualSourcePortParent); | 
				
			||||||
 | 
										physicalComponentCleanUpNeeded = true; | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									case HARDWARE: { | 
				
			||||||
 | 
										// Connect directly to the device
 | 
				
			||||||
 | 
										virtualSourcePortParent = virtualSourcePortGrandParent; | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									default: { | 
				
			||||||
 | 
										throw new Capella2AADLException("Unknown PhysicalComponent kind"); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									switch (((PhysicalComponent) behaviourNode2Part.get(targetPortContainer).getAbstractType()).getKind()) { | 
				
			||||||
 | 
									case SOFTWARE_EXECUTION_UNIT: { | 
				
			||||||
 | 
										virtualTargetPortParent = PaFactory.eINSTANCE.createPhysicalComponent(targetPortContainer.getName()); | 
				
			||||||
 | 
										componentVirtualBehaviorNode.put(virtualTargetPortGrandParent, virtualTargetPortParent); | 
				
			||||||
 | 
										virtualTargetPortGrandParent.getOwnedPhysicalComponents().add(virtualTargetPortParent); | 
				
			||||||
 | 
										physicalComponentCleanUpNeeded = true; | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									case HARDWARE: { | 
				
			||||||
 | 
										// Connect directly to the device
 | 
				
			||||||
 | 
										virtualTargetPortParent = virtualTargetPortGrandParent; | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									default: { | 
				
			||||||
 | 
										throw new Capella2AADLException("Unknown PhysicalComponent kind"); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Add tip ports
 | 
				
			||||||
 | 
									// And the property "orientation" provides the orientation of
 | 
				
			||||||
 | 
									// the port
 | 
				
			||||||
 | 
									StringPropertyValue outOrientationProperty = CapellacoreFactory.eINSTANCE.createStringPropertyValue("orientation"); | 
				
			||||||
 | 
									outOrientationProperty.setValue("out"); | 
				
			||||||
 | 
									StringPropertyValue inOrientationProperty = CapellacoreFactory.eINSTANCE.createStringPropertyValue("orientation"); | 
				
			||||||
 | 
									inOrientationProperty.setValue("in"); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									PhysicalPort virtualSourcePort = CsFactory.eINSTANCE.createPhysicalPort(sourcePort.getName()); | 
				
			||||||
 | 
									PhysicalPort virtualTargetPort = CsFactory.eINSTANCE.createPhysicalPort(targetPort.getName()); | 
				
			||||||
 | 
									virtualSourcePort.getOwnedPropertyValues().add(outOrientationProperty); | 
				
			||||||
 | 
									virtualTargetPort.getOwnedPropertyValues().add(inOrientationProperty); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									componentVirtualBehaviorPort.put(virtualSourcePortParent, virtualSourcePort); | 
				
			||||||
 | 
									componentVirtualBehaviorPort.put(virtualTargetPortParent, virtualTargetPort); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// BEWARE: here the orginal PhysicalComponent representing a
 | 
				
			||||||
 | 
									// device is directly modified.
 | 
				
			||||||
 | 
									// This strategy would impact the bus topology transformation.
 | 
				
			||||||
 | 
									// Therefore, the ComponentExchange processing
 | 
				
			||||||
 | 
									// shall be done AFTER the bus topology.
 | 
				
			||||||
 | 
									virtualSourcePortParent.getOwnedFeatures().add(virtualSourcePort); | 
				
			||||||
 | 
									virtualTargetPortParent.getOwnedFeatures().add(virtualTargetPort); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Create virtualLink
 | 
				
			||||||
 | 
									PhysicalLink link = CsFactory.eINSTANCE.createPhysicalLink(ce.getName()); | 
				
			||||||
 | 
									link.getLinkEnds().add(virtualSourcePort); | 
				
			||||||
 | 
									link.getLinkEnds().add(virtualTargetPort); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Extracting allocation to bus
 | 
				
			||||||
 | 
									Set<Bus> allocatingBuses = new HashSet<Bus>(); | 
				
			||||||
 | 
									Bus lastAllocatingBus = null; | 
				
			||||||
 | 
									Bus tmpBus = PhysicalLinkUtils.getBusForPort(allocationOfComponentPortToPhysicalPort.get(sourcePort)); | 
				
			||||||
 | 
									if (tmpBus != null) { | 
				
			||||||
 | 
										lastAllocatingBus = tmpBus; | 
				
			||||||
 | 
										allocatingBuses.add(lastAllocatingBus); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									tmpBus = PhysicalLinkUtils.getBusForPort(allocationOfComponentPortToPhysicalPort.get(targetPort)); | 
				
			||||||
 | 
									if (tmpBus != null) { | 
				
			||||||
 | 
										lastAllocatingBus = tmpBus; | 
				
			||||||
 | 
										allocatingBuses.add(lastAllocatingBus); | 
				
			||||||
 | 
									}		 | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									if(allocatingBuses.size() > 1) | 
				
			||||||
 | 
									{ | 
				
			||||||
 | 
										// Error : a link cannot be allocated to several buses
 | 
				
			||||||
 | 
										throw new Capella2AADLException("Ports " + PhysicalLinkUtils.getFullQualifiedName(sourcePort) + " and " + PhysicalLinkUtils.getFullQualifiedName(targetPort) + " shall be allocated to the same bus"); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									 | 
				
			||||||
 | 
									if(allocatingBuses.isEmpty()) | 
				
			||||||
 | 
									{ | 
				
			||||||
 | 
										// Error : a link shall be allocated to one bus
 | 
				
			||||||
 | 
										throw new Capella2AADLException("Ports " + PhysicalLinkUtils.getFullQualifiedName(sourcePort) + " or " + PhysicalLinkUtils.getFullQualifiedName(targetPort) + " shall be allocated to a bus"); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									synthesizePortsAndLinks(link, lastAllocatingBus); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (physicalComponentCleanUpNeeded) { | 
				
			||||||
 | 
										virtualTargetPortGrandParent.getOwnedPhysicalComponents().remove(virtualTargetPortParent); | 
				
			||||||
 | 
										virtualSourcePortGrandParent.getOwnedPhysicalComponents().remove(virtualSourcePortParent); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static void synthesizePortsAndLinks(PhysicalLink link, Bus bus) throws Capella2AADLException { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// This algorithm only works if link is between a tip port and the bus
 | 
				
			||||||
 | 
							// port.
 | 
				
			||||||
 | 
							// In this situation, the bus is always contained in the closest common
 | 
				
			||||||
 | 
							// ancestor of all tip ports and links are always exclusively ascending
 | 
				
			||||||
 | 
							// in the hierarchy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Note: in Capella models, the grand parent of a PhysicalPort cannot be
 | 
				
			||||||
 | 
							// null
 | 
				
			||||||
 | 
							PhysicalPort sourcePort, targetPort; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Origin and destination ports (links are not oriented)
 | 
				
			||||||
 | 
							sourcePort = (PhysicalPort) link.getLinkEnds().get(0); | 
				
			||||||
 | 
							targetPort = (PhysicalPort) link.getLinkEnds().get(1); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println(PhysicalLinkUtils.getFullQualifiedName(sourcePort) + " <-> " + PhysicalLinkUtils.getFullQualifiedName(targetPort)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							PhysicalPort lastPort1 = createBottomUpLinks(sourcePort, targetPort, link.getName(), OrientationPortKind.OUT); | 
				
			||||||
 | 
							PhysicalPort lastPort2 = createBottomUpLinks(targetPort, sourcePort, link.getName(), OrientationPortKind.IN); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Now take care of the final case where ancestor = busPortGrandParent.
 | 
				
			||||||
 | 
							// Here ports have already been created and it may only be needed to
 | 
				
			||||||
 | 
							// connect ports. The algorithm is exactly the same as above.
 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							createSyntheticLink(link.getName(), lastPort1, lastPort2, (PhysicalComponent) EcoreUtil2.getCommonAncestor(sourcePort, targetPort), bus); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static PhysicalPort createBottomUpLinks(PhysicalPort sourcePort, PhysicalPort targetport, String name, OrientationPortKind orientation) throws Capella2AADLException { | 
				
			||||||
 | 
							PhysicalComponent ancestor = (PhysicalComponent) sourcePort.eContainer().eContainer(); | 
				
			||||||
 | 
							PhysicalComponent targetPortGrandParent = (PhysicalComponent) targetport.eContainer().eContainer(); | 
				
			||||||
 | 
							PhysicalPort origin = sourcePort; | 
				
			||||||
 | 
							PhysicalPort syntheticPhysicalPort; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							while (!EcoreUtil.isAncestor(ancestor, targetPortGrandParent)) { | 
				
			||||||
 | 
								syntheticPhysicalPort = CsFactory.eINSTANCE.createPhysicalPort(name); | 
				
			||||||
 | 
								componentVirtualBehaviorPort.put(ancestor, syntheticPhysicalPort); | 
				
			||||||
 | 
								ancestor.getOwnedFeatures().add(syntheticPhysicalPort); | 
				
			||||||
 | 
								// And the property "orientation" provides the orientation of the
 | 
				
			||||||
 | 
								// port
 | 
				
			||||||
 | 
								StringPropertyValue orientationProperty = CapellacoreFactory.eINSTANCE.createStringPropertyValue("orientation"); | 
				
			||||||
 | 
								switch(orientation) { | 
				
			||||||
 | 
								case IN: | 
				
			||||||
 | 
									orientationProperty.setValue("in"); | 
				
			||||||
 | 
									createSyntheticLink(name, syntheticPhysicalPort, origin, ancestor); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								case OUT:  | 
				
			||||||
 | 
									orientationProperty.setValue("out"); | 
				
			||||||
 | 
									createSyntheticLink(name, origin, syntheticPhysicalPort, ancestor); | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								default:  | 
				
			||||||
 | 
									throw new Capella2AADLException("Unknown orientation"); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
								syntheticPhysicalPort.getOwnedPropertyValues().add(orientationProperty); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								System.out.println("Create port " + PhysicalLinkUtils.getFullQualifiedName(syntheticPhysicalPort)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Move the origin to the syntheticPort, reset syntheticPort and
 | 
				
			||||||
 | 
								// move ancestor one step upward in the hierarchy
 | 
				
			||||||
 | 
								origin = syntheticPhysicalPort; | 
				
			||||||
 | 
								ancestor = (PhysicalComponent) ancestor.eContainer(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							return origin; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This method creates a {@link PhysicalLink} between {@link PhysicalPort} | 
				
			||||||
 | 
						 * <code>origin</code> and <code>destination</code> and stores it in | 
				
			||||||
 | 
						 * {@link PhysicalComponent} <code>ancestor</code> only if no such link | 
				
			||||||
 | 
						 * already exists. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param prefix | 
				
			||||||
 | 
						 *            Name of the new link | 
				
			||||||
 | 
						 * @param origin | 
				
			||||||
 | 
						 *            Port of origin | 
				
			||||||
 | 
						 * @param destination | 
				
			||||||
 | 
						 *            Port of destination | 
				
			||||||
 | 
						 * @param ancestor | 
				
			||||||
 | 
						 *            Container of the new link | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void createSyntheticLink(String prefix, PhysicalPort origin, PhysicalPort destination, PhysicalComponent ancestor) { | 
				
			||||||
 | 
							createSyntheticLink(prefix, origin, destination, ancestor, null); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static void createSyntheticLink(String prefix, PhysicalPort origin, PhysicalPort destination, PhysicalComponent ancestor, Bus allocatedTo) { | 
				
			||||||
 | 
							boolean needToCreateNewLink = true; | 
				
			||||||
 | 
							for (PhysicalLink l : componentVirtualBehaviorLink.get(ancestor)) { | 
				
			||||||
 | 
								if ((l.getLinkEnds().get(0).equals(destination) && l.getLinkEnds().get(1).equals(origin)) | 
				
			||||||
 | 
										|| (l.getLinkEnds().get(0).equals(origin) && l.getLinkEnds().get(1).equals(destination))) { | 
				
			||||||
 | 
									needToCreateNewLink = false; | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (needToCreateNewLink) { | 
				
			||||||
 | 
								PhysicalLink syntheticPhysicalLink = CsFactory.eINSTANCE.createPhysicalLink(prefix + "_" + (componentVirtualBehaviorLink.get(ancestor).size() + 1)); | 
				
			||||||
 | 
								syntheticPhysicalLink.getLinkEnds().add(origin); | 
				
			||||||
 | 
								syntheticPhysicalLink.getLinkEnds().add(destination); | 
				
			||||||
 | 
								componentVirtualBehaviorLink.put(ancestor, syntheticPhysicalLink); | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								if(allocatedTo != null) { | 
				
			||||||
 | 
								// The property "allocatedToBus" provides the name of the bus instance the link is allocated to
 | 
				
			||||||
 | 
								StringPropertyValue busName = CapellacoreFactory.eINSTANCE.createStringPropertyValue("allocatedToBus"); | 
				
			||||||
 | 
								busName.setValue(allocatedTo.getName()); | 
				
			||||||
 | 
								syntheticPhysicalLink.getOwnedPropertyValues().add(busName); | 
				
			||||||
 | 
								allocationOfVirtualLinkToPhysicalComponent.put(allocatedTo.getName(), syntheticPhysicalLink); | 
				
			||||||
 | 
								allocatedVirtualBehaviorLink.add(syntheticPhysicalLink); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
								 | 
				
			||||||
 | 
								System.out.println("Create synthetic link: " + PhysicalLinkUtils.getFullQualifiedName(origin) + " <-> " | 
				
			||||||
 | 
										+ PhysicalLinkUtils.getFullQualifiedName(destination)); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,637 @@ | 
				
			|||||||
 | 
					/******************************************************************************* | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html
 | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 *******************************************************************************/ | 
				
			||||||
 | 
					package com.irtsaintexupery.capella2aadl.requests; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayDeque; | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.Collection; | 
				
			||||||
 | 
					import java.util.HashMap; | 
				
			||||||
 | 
					import java.util.HashSet; | 
				
			||||||
 | 
					import java.util.Iterator; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Map; | 
				
			||||||
 | 
					import java.util.Set; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.eclipse.emf.ecore.EObject; | 
				
			||||||
 | 
					import org.eclipse.emf.ecore.util.EcoreUtil; | 
				
			||||||
 | 
					import org.polarsys.capella.common.helpers.EcoreUtil2; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.AbstractPropertyValue; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.BooleanPropertyValue; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.CapellaElement; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.CapellacoreFactory; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.Feature; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.ModellingArchitecture; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.NamedElement; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellacore.StringPropertyValue; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellamodeller.Project; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.capellamodeller.SystemEngineering; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.AbstractPhysicalLinkEnd; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.CsFactory; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.PhysicalLink; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.cs.PhysicalPort; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PaFactory; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalArchitecture; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalComponent; | 
				
			||||||
 | 
					import org.polarsys.capella.core.data.pa.PhysicalComponentNature; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.google.common.collect.ArrayListMultimap; | 
				
			||||||
 | 
					import com.google.common.collect.BiMap; | 
				
			||||||
 | 
					import com.google.common.collect.HashBiMap; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * This class provides various static methods for transforming Capella physical | 
				
			||||||
 | 
					 * architecture into a preliminary but yet complete AADL model. The main | 
				
			||||||
 | 
					 * transformation consists in moving from the 1 to 1 communication model used by | 
				
			||||||
 | 
					 * {@link PhysicalLink} to a bus oriented topology closer to AADL bus accesses | 
				
			||||||
 | 
					 *  | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public class PhysicalLinkUtils { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Reversible map between deduced buses and origin/destination | 
				
			||||||
 | 
						 * {@link PhysicalPort} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static BiMap<Bus, Set<PhysicalPort>> bus2TipPorts = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Cross-reference from {@link PhysicalPort} to {@link PhysicalLink} | 
				
			||||||
 | 
						 * connected to these ports | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static ArrayListMultimap<PhysicalPort, PhysicalLink> port2link = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * All {@link PhysicalLink} in the model | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static List<PhysicalLink> physicalLinks = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * List of {@link PhysicalPort} to synthesize for each | 
				
			||||||
 | 
						 * {@link PhysicalComponent} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static ArrayListMultimap<PhysicalComponent, PhysicalPort> componentSyntheticPorts = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Cross-reference from {@link PhysicalPort} to the bus they are connected | 
				
			||||||
 | 
						 * to | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static Map<PhysicalPort, Bus> componentSyntheticPorts2Bus = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * List of {@link PhysicalLink} to synthesize for each | 
				
			||||||
 | 
						 * {@link PhysicalComponent} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static ArrayListMultimap<PhysicalComponent, PhysicalLink> componentSyntheticLinks = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Numbering counter for default bus types | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static int defaultBusTypeCounter; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param pc | 
				
			||||||
 | 
						 *            target {@link PhysicalComponent} | 
				
			||||||
 | 
						 * @return the list of synthetic ports for component <code>pc</code> | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static List<PhysicalPort> getSyntheticPorts(PhysicalComponent pc) { | 
				
			||||||
 | 
							return componentSyntheticPorts.get(pc); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param pc | 
				
			||||||
 | 
						 *            target {@link PhysicalComponent} | 
				
			||||||
 | 
						 * @return the list of synthetic links for component <code>pc</code> | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static List<PhysicalLink> getSyntheticLinks(PhysicalComponent pc) { | 
				
			||||||
 | 
							return componentSyntheticLinks.get(pc); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param port | 
				
			||||||
 | 
						 *            target {@link PhysicalPort} | 
				
			||||||
 | 
						 * @return the type name of the bus connected to <code>port</code> | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static String getBusTypeForPort(PhysicalPort port) { | 
				
			||||||
 | 
							return componentSyntheticPorts2Bus.get(port).getType(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * @param port | 
				
			||||||
 | 
						 *            target {@link PhysicalPort} | 
				
			||||||
 | 
						 * @return the bus connected to <code>port</code> | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static Bus getBusForPort(PhysicalPort port) { | 
				
			||||||
 | 
							return componentSyntheticPorts2Bus.get(port); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This methode analyses the data flows and hierarchy of | 
				
			||||||
 | 
						 * {@link PhysicalComponent} of the physical architecture and synthesizes a | 
				
			||||||
 | 
						 * corresponding bus topology. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param project | 
				
			||||||
 | 
						 *            Capella {@link Project} that is analyzed | 
				
			||||||
 | 
						 * @throws Capella2AADLException | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static void transformCapellaPhysicalLinksIntoAADLBusTopology(Project project) throws Capella2AADLException { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// (Re-)init Bus class attributes and bus type counter
 | 
				
			||||||
 | 
							Bus.init(); | 
				
			||||||
 | 
							defaultBusTypeCounter = 1; | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							// Get the physical architecture from Project in Capella model
 | 
				
			||||||
 | 
							List<ModellingArchitecture> architectures = ((SystemEngineering) (project.getOwnedModelRoots().get(0))).getOwnedArchitectures(); | 
				
			||||||
 | 
							PhysicalArchitecture physicalArchitecture = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (ModellingArchitecture architecture : architectures) { | 
				
			||||||
 | 
								if (architecture instanceof PhysicalArchitecture) { | 
				
			||||||
 | 
									physicalArchitecture = (PhysicalArchitecture) architecture; | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// If no physical architecture has been found, the transformation
 | 
				
			||||||
 | 
							// doesn't apply
 | 
				
			||||||
 | 
							if (physicalArchitecture == null) { | 
				
			||||||
 | 
								throw new Capella2AADLException("Physical Architecture not found."); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							PhysicalComponent physicalSystem = physicalArchitecture.getOwnedPhysicalComponent(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Visit the model and connect internally PhysicalPorts of PhysicalComponents
 | 
				
			||||||
 | 
							// when they share the same virtualConnection string property value
 | 
				
			||||||
 | 
							// Thanks to the preprocessing, it is possible to consider low level
 | 
				
			||||||
 | 
							// communication device like transceivers, routers, switch, etc. as physically connecting 
 | 
				
			||||||
 | 
							// some of their ports.
 | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							for (Iterator<EObject> it = physicalSystem.eAllContents(); it.hasNext();) { | 
				
			||||||
 | 
								EObject eo = it.next(); | 
				
			||||||
 | 
								if (eo instanceof PhysicalComponent) { | 
				
			||||||
 | 
									PhysicalComponent pc = (PhysicalComponent) eo; | 
				
			||||||
 | 
									ArrayListMultimap<String, PhysicalPort> map = ArrayListMultimap.create(); | 
				
			||||||
 | 
									for(Feature feature: pc.getOwnedFeatures()) { | 
				
			||||||
 | 
										if (feature instanceof PhysicalPort) { | 
				
			||||||
 | 
											PhysicalPort pp = (PhysicalPort) feature; | 
				
			||||||
 | 
											for(AbstractPropertyValue pv: pp.getAppliedPropertyValues()) { | 
				
			||||||
 | 
												if(pv.getName().equals("virtualConnection")) { | 
				
			||||||
 | 
													map.put(((StringPropertyValue) pv).getValue(), pp); | 
				
			||||||
 | 
												} | 
				
			||||||
 | 
											} | 
				
			||||||
 | 
										} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
									// Now that the list of ports is known, create a chain with all ports of each virtualConnection
 | 
				
			||||||
 | 
									for(String virtualConnection: map.keySet()) { | 
				
			||||||
 | 
										int counter = 1; | 
				
			||||||
 | 
										Iterator<PhysicalPort> pp_it = map.get(virtualConnection).iterator(); | 
				
			||||||
 | 
										PhysicalPort origin = pp_it.next(); | 
				
			||||||
 | 
										PhysicalPort dest = null; | 
				
			||||||
 | 
										PhysicalLink link = null; | 
				
			||||||
 | 
										while(pp_it.hasNext()) { | 
				
			||||||
 | 
											dest = pp_it.next(); | 
				
			||||||
 | 
											link = CsFactory.eINSTANCE.createPhysicalLink(virtualConnection + "_" + counter); | 
				
			||||||
 | 
											link.getLinkEnds().add(origin); | 
				
			||||||
 | 
											link.getLinkEnds().add(dest); | 
				
			||||||
 | 
											PhysicalComponent parentComponent = (PhysicalComponent) origin.eContainer(); | 
				
			||||||
 | 
											parentComponent.getOwnedPhysicalLinks().add(link); | 
				
			||||||
 | 
											System.out.println("Creating virtual connection " | 
				
			||||||
 | 
													+ virtualConnection + "_" + counter + " in " | 
				
			||||||
 | 
													+ getFullQualifiedName(parentComponent) + ": " | 
				
			||||||
 | 
													+ origin.getName() + " <-> " + dest.getName()); | 
				
			||||||
 | 
											if(pp_it.hasNext()) { | 
				
			||||||
 | 
												origin = dest; | 
				
			||||||
 | 
											} | 
				
			||||||
 | 
										} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							 | 
				
			||||||
 | 
							// Extract the list of physical ports, physical links and a cross
 | 
				
			||||||
 | 
							// reference between
 | 
				
			||||||
 | 
							// physical ports and physical links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							physicalLinks = new ArrayList<PhysicalLink>(); | 
				
			||||||
 | 
							port2link = ArrayListMultimap.create(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (Iterator<EObject> it = physicalSystem.eAllContents(); it.hasNext();) { | 
				
			||||||
 | 
								EObject eo = it.next(); | 
				
			||||||
 | 
								if (eo instanceof PhysicalLink) { | 
				
			||||||
 | 
									PhysicalLink link = (PhysicalLink) eo; | 
				
			||||||
 | 
									physicalLinks.add(link); | 
				
			||||||
 | 
									port2link.put((PhysicalPort) link.getLinkEnds().get(0), link); | 
				
			||||||
 | 
									port2link.put((PhysicalPort) link.getLinkEnds().get(1), link); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Now extract the origin and destination ports (aka tipPorts) for each
 | 
				
			||||||
 | 
							// set of links (PhysicalLink) connected through ports (PhysicalPort)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							bus2TipPorts = HashBiMap.create(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Each PhysicalLink shall be visited once. Initialize the list of links
 | 
				
			||||||
 | 
							// to visit
 | 
				
			||||||
 | 
							List<PhysicalLink> linksToVisit = new ArrayList<PhysicalLink>(physicalLinks); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// allConnectedLinks is a list of sets of PhysicalLink connected by
 | 
				
			||||||
 | 
							// PhysicalPorts. Sets of links are never connected. Each set will lead
 | 
				
			||||||
 | 
							// to an AADL bus instance
 | 
				
			||||||
 | 
							ArrayDeque<Set<PhysicalLink>> allConnectedLinks = new ArrayDeque<Set<PhysicalLink>>(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Set<PhysicalPort> ports; | 
				
			||||||
 | 
							while (!linksToVisit.isEmpty()) { | 
				
			||||||
 | 
								ports = new HashSet<>(); | 
				
			||||||
 | 
								allConnectedLinks.add(extractConnectedPhysicalLinks(linksToVisit.get(0), ports)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Now that connected links and ports have been discovered, identify
 | 
				
			||||||
 | 
								// the type of the bus. By convention, this type is hold by a
 | 
				
			||||||
 | 
								// PhysicalLinkCategory associated with at least one connected link
 | 
				
			||||||
 | 
								String categoryName = null; | 
				
			||||||
 | 
								for (PhysicalLink l : allConnectedLinks.peekLast()) { | 
				
			||||||
 | 
									if (!l.getCategories().isEmpty()) { | 
				
			||||||
 | 
										categoryName = l.getCategories().get(0).getName(); | 
				
			||||||
 | 
										break; | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// If no category has been found, use a default name
 | 
				
			||||||
 | 
								if (categoryName == null) { | 
				
			||||||
 | 
									categoryName = "BusType_" + defaultBusTypeCounter; | 
				
			||||||
 | 
									defaultBusTypeCounter++; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Gather all these information together
 | 
				
			||||||
 | 
								// the bus instance is named by its category + an increment
 | 
				
			||||||
 | 
								Bus bus = Bus.createIncrementedNameFromCategory(categoryName); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Associate the bus with its tip ports
 | 
				
			||||||
 | 
								bus2TipPorts.put(bus, ports); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// all the connected links has been visited in the process. They can
 | 
				
			||||||
 | 
								// be removed at once from the list of links that still need to be
 | 
				
			||||||
 | 
								// visited.
 | 
				
			||||||
 | 
								linksToVisit.removeAll(allConnectedLinks.peekLast()); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printTipPorts2Bus(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Now that the original topology of PhysicalLinks is known, synthesize
 | 
				
			||||||
 | 
							// a new one compatible with AADL. By convention, a new
 | 
				
			||||||
 | 
							// PhysicalComponent with specific key/values will be created in the
 | 
				
			||||||
 | 
							// lowest ancestor of all tip ports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							componentSyntheticPorts = ArrayListMultimap.create(); | 
				
			||||||
 | 
							componentSyntheticLinks = ArrayListMultimap.create(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Initialize the list of synthetic ports with the tip ports
 | 
				
			||||||
 | 
							// Only one port / component / bus should be kept
 | 
				
			||||||
 | 
							componentSyntheticPorts2Bus = new HashMap<>(); | 
				
			||||||
 | 
							for (Set<PhysicalPort> sp : bus2TipPorts.inverse().keySet()) { | 
				
			||||||
 | 
								for (PhysicalPort p : sp) { | 
				
			||||||
 | 
									if (!componentSyntheticPorts.containsValue(p)) { | 
				
			||||||
 | 
										componentSyntheticPorts2Bus.put(p, bus2TipPorts.inverse().get(sp)); | 
				
			||||||
 | 
										componentSyntheticPorts.put((PhysicalComponent) p.eContainer(), p); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (Bus bus : bus2TipPorts.keySet()) { | 
				
			||||||
 | 
								// First discover the closest common ancestor of all tipPorts
 | 
				
			||||||
 | 
								PhysicalComponent commonAncestor = (PhysicalComponent) EcoreUtil2.getCommonAncestor(bus2TipPorts.get(bus)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Create the PhysicalComponent that will play the role of bus
 | 
				
			||||||
 | 
								// instance
 | 
				
			||||||
 | 
								PhysicalComponent busPhysicalComponent = PaFactory.eINSTANCE.createPhysicalComponent(bus.getType()); | 
				
			||||||
 | 
								busPhysicalComponent.setNature(PhysicalComponentNature.NODE); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// The property "isBus" acts as a marker to process differently this
 | 
				
			||||||
 | 
								// PhysicalComponent in Acceleo
 | 
				
			||||||
 | 
								BooleanPropertyValue isBus = CapellacoreFactory.eINSTANCE.createBooleanPropertyValue("isBus"); | 
				
			||||||
 | 
								isBus.setValue(true); | 
				
			||||||
 | 
								busPhysicalComponent.getOwnedPropertyValues().add(isBus); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// And the property "busName" provides the name of the bus instance
 | 
				
			||||||
 | 
								StringPropertyValue busName = CapellacoreFactory.eINSTANCE.createStringPropertyValue("busName"); | 
				
			||||||
 | 
								busName.setValue(bus.getName()); | 
				
			||||||
 | 
								busPhysicalComponent.getOwnedPropertyValues().add(busName); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Add a port to the bus instance to connect synthetic links to it
 | 
				
			||||||
 | 
								PhysicalPort port = CsFactory.eINSTANCE.createPhysicalPort("bus_port"); | 
				
			||||||
 | 
								busPhysicalComponent.getOwnedFeatures().add(port); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// And finally add the bus instance to the common ancestor
 | 
				
			||||||
 | 
								commonAncestor.getOwnedPhysicalComponents().add(busPhysicalComponent); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Synthesize now the new PhysicalLinks. It is done in 2 steps:
 | 
				
			||||||
 | 
								// 1- Create a link from tip port to bus_port
 | 
				
			||||||
 | 
								// 2- Split this link into segments that don't cross
 | 
				
			||||||
 | 
								// PhysicalComponent boundaries
 | 
				
			||||||
 | 
								// The second step involves synthesize intermediate PhysicalPorts on
 | 
				
			||||||
 | 
								// intermediate PhysicalComponents
 | 
				
			||||||
 | 
								for (PhysicalPort p : bus2TipPorts.get(bus)) { | 
				
			||||||
 | 
									PhysicalLink l = CsFactory.eINSTANCE.createPhysicalLink(bus.getName()); | 
				
			||||||
 | 
									l.getLinkEnds().add(p); | 
				
			||||||
 | 
									l.getLinkEnds().add(port); | 
				
			||||||
 | 
									synthesizePortsAndLinks(l, bus); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println(); | 
				
			||||||
 | 
							printSyntheticPorts(); | 
				
			||||||
 | 
							printSyntheticLinks(); | 
				
			||||||
 | 
							System.out.println(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Print synthetic links by {@link PhysicalComponent} on stdout for | 
				
			||||||
 | 
						 * debugging purpose | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void printSyntheticLinks() { | 
				
			||||||
 | 
							System.out.println("\nSynthetic Links:"); | 
				
			||||||
 | 
							for (PhysicalComponent c : componentSyntheticLinks.keySet()) { | 
				
			||||||
 | 
								System.out.println(getFullQualifiedName(c) + ":"); | 
				
			||||||
 | 
								for (PhysicalLink l : componentSyntheticLinks.get(c)) { | 
				
			||||||
 | 
									System.out.println("\t" + getFullQualifiedName(l.getLinkEnds().get(0)) + " <-> " + getFullQualifiedName(l.getLinkEnds().get(1))); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Print synthetic ports by {@link PhysicalComponent} on stdout for | 
				
			||||||
 | 
						 * debugging purpose | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void printSyntheticPorts() { | 
				
			||||||
 | 
							System.out.println("Synthetic Ports:"); | 
				
			||||||
 | 
							for (PhysicalComponent c : componentSyntheticPorts.keySet()) { | 
				
			||||||
 | 
								System.out.println(getFullQualifiedName(c) + ":"); | 
				
			||||||
 | 
								for (PhysicalPort p : componentSyntheticPorts.get(c)) { | 
				
			||||||
 | 
									System.out.println("\t" + getFullQualifiedName(p)); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This method analyzes the {@link PhysicalLink} link and if required splits | 
				
			||||||
 | 
						 * it into several links connected by new intermediate ports that don't | 
				
			||||||
 | 
						 * violate the encapsulation principle of AADL. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param link | 
				
			||||||
 | 
						 *            the link that will be analyzed | 
				
			||||||
 | 
						 * @param bus | 
				
			||||||
 | 
						 *            the bus <code>link</code> connects to | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void synthesizePortsAndLinks(PhysicalLink link, Bus bus) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// This algorithm only works if link is between a tip port and the bus
 | 
				
			||||||
 | 
							// port.
 | 
				
			||||||
 | 
							// In this situation, the bus is always contained in the closest common
 | 
				
			||||||
 | 
							// ancestor of all tip ports and links are always exclusively ascending
 | 
				
			||||||
 | 
							// in the hierarchy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Note: in Capella models, the grand parent of a PhysicalPort cannot be
 | 
				
			||||||
 | 
							// null
 | 
				
			||||||
 | 
							PhysicalPort tipPort, bus_port; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Origin and destination ports (links are not oriented)
 | 
				
			||||||
 | 
							tipPort = (PhysicalPort) link.getLinkEnds().get(0); | 
				
			||||||
 | 
							bus_port = (PhysicalPort) link.getLinkEnds().get(1); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							System.out.println(getFullQualifiedName(tipPort) + " <-> " + getFullQualifiedName(bus_port)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							PhysicalComponent ancestor = (PhysicalComponent) tipPort.eContainer().eContainer(); | 
				
			||||||
 | 
							PhysicalComponent busPortGrandParent = (PhysicalComponent) bus_port.eContainer().eContainer(); | 
				
			||||||
 | 
							PhysicalPort origin = tipPort; | 
				
			||||||
 | 
							PhysicalPort syntheticPhysicalPort = null; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							while (!ancestor.equals(busPortGrandParent)) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Ancestor needs one and only one Physical port to connect to the
 | 
				
			||||||
 | 
								// bus. If a such port already exists, use it rather than create a
 | 
				
			||||||
 | 
								// new one.
 | 
				
			||||||
 | 
								for (PhysicalPort p : componentSyntheticPorts.get(ancestor)) { | 
				
			||||||
 | 
									if (componentSyntheticPorts2Bus.containsKey(p)) { | 
				
			||||||
 | 
										if (componentSyntheticPorts2Bus.get(p).equals(bus)) { | 
				
			||||||
 | 
											syntheticPhysicalPort = p; | 
				
			||||||
 | 
											System.out.println("Component " + getFullQualifiedName(ancestor) + " already contains the synthetic port " + getFullQualifiedName(p) | 
				
			||||||
 | 
													+ " for bus " + bus.getName()); | 
				
			||||||
 | 
											break; | 
				
			||||||
 | 
										} | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// No port connected to the bus has been found. Create a new one.
 | 
				
			||||||
 | 
								if (syntheticPhysicalPort == null) { | 
				
			||||||
 | 
									syntheticPhysicalPort = CsFactory.eINSTANCE.createPhysicalPort(link.getName()); | 
				
			||||||
 | 
									componentSyntheticPorts.put(ancestor, syntheticPhysicalPort); | 
				
			||||||
 | 
									componentSyntheticPorts2Bus.put(syntheticPhysicalPort, bus); | 
				
			||||||
 | 
									ancestor.getOwnedFeatures().add(syntheticPhysicalPort); | 
				
			||||||
 | 
									System.out.println("Component " + getFullQualifiedName(ancestor) + " doesn't contain a synthetic port for bus " + bus.getName() | 
				
			||||||
 | 
											+ ": create port " + getFullQualifiedName(syntheticPhysicalPort)); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								createSyntheticLink(link.getName(), origin, syntheticPhysicalPort, ancestor); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Move the origin to the syntheticPort, reset syntheticPort and
 | 
				
			||||||
 | 
								// move ancestor one step upward in the hierarchy
 | 
				
			||||||
 | 
								origin = syntheticPhysicalPort; | 
				
			||||||
 | 
								syntheticPhysicalPort = null; | 
				
			||||||
 | 
								ancestor = (PhysicalComponent) ancestor.eContainer(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Now take care of the final case where ancestor = busPortGrandParent.
 | 
				
			||||||
 | 
							// Here ports have already been created and it may only be needed to
 | 
				
			||||||
 | 
							// connect ports. The algorithm is exactly the same as above.
 | 
				
			||||||
 | 
							createSyntheticLink(link.getName(), origin, bus_port, ancestor); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This method creates a {@link PhysicalLink} between {@link PhysicalPort} | 
				
			||||||
 | 
						 * <code>origin</code> and <code>destination</code> and stores it in | 
				
			||||||
 | 
						 * {@link PhysicalComponent} <code>ancestor</code> only if no such link | 
				
			||||||
 | 
						 * already exists. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param prefix | 
				
			||||||
 | 
						 *            Name of the new link | 
				
			||||||
 | 
						 * @param origin | 
				
			||||||
 | 
						 *            Port of origin | 
				
			||||||
 | 
						 * @param destination | 
				
			||||||
 | 
						 *            Port of destination | 
				
			||||||
 | 
						 * @param ancestor | 
				
			||||||
 | 
						 *            Container of the new link | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void createSyntheticLink(String prefix, PhysicalPort origin, PhysicalPort destination, PhysicalComponent ancestor) { | 
				
			||||||
 | 
							boolean needToCreateNewLink = true; | 
				
			||||||
 | 
							for (PhysicalLink l : componentSyntheticLinks.get(ancestor)) { | 
				
			||||||
 | 
								if ((l.getLinkEnds().get(0).equals(destination) && l.getLinkEnds().get(1).equals(origin)) | 
				
			||||||
 | 
										|| (l.getLinkEnds().get(0).equals(origin) && l.getLinkEnds().get(1).equals(destination))) { | 
				
			||||||
 | 
									needToCreateNewLink = false; | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (needToCreateNewLink) { | 
				
			||||||
 | 
								PhysicalLink syntheticPhysicalLink = CsFactory.eINSTANCE.createPhysicalLink(prefix + "_" + (componentSyntheticLinks.get(ancestor).size() + 1)); | 
				
			||||||
 | 
								syntheticPhysicalLink.getLinkEnds().add(origin); | 
				
			||||||
 | 
								syntheticPhysicalLink.getLinkEnds().add(destination); | 
				
			||||||
 | 
								componentSyntheticLinks.put(ancestor, syntheticPhysicalLink); | 
				
			||||||
 | 
								System.out.println("Create synthetic link: " + getFullQualifiedName(origin) + " <-> " + getFullQualifiedName(destination)); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Print origin/destination ports by bus on stdout for debugging purpose | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void printTipPorts2Bus() { | 
				
			||||||
 | 
							for (Bus b : bus2TipPorts.keySet()) { | 
				
			||||||
 | 
								System.out.println(b.getName() + ": " + b.getType()); | 
				
			||||||
 | 
								for (PhysicalPort p : bus2TipPorts.get(b)) | 
				
			||||||
 | 
									System.out.println("\t" + getFullQualifiedName(p)); | 
				
			||||||
 | 
								System.out.println(""); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This method returns the list of {@link PhysicalLink} connected by | 
				
			||||||
 | 
						 * {@link PhysicalPort} from <code>link</code> along with the list of | 
				
			||||||
 | 
						 * origin/destination ports. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param link | 
				
			||||||
 | 
						 *            the link that is analyzed | 
				
			||||||
 | 
						 * @param tipPorts | 
				
			||||||
 | 
						 *            the list of origin/destination ports | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static Set<PhysicalLink> extractConnectedPhysicalLinks(PhysicalLink link, Set<PhysicalPort> tipPorts) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Set<PhysicalLink> connectedLinks = new HashSet<PhysicalLink>(); | 
				
			||||||
 | 
							extractConnectedPhysicalLinks(link, connectedLinks, tipPorts); | 
				
			||||||
 | 
							return connectedLinks; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * This method returns the list of {@link PhysicalLink} connected by | 
				
			||||||
 | 
						 * {@link PhysicalPort} from <code>link</code> and updates the list of | 
				
			||||||
 | 
						 * origin/destination ports + the list of visited links. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param link | 
				
			||||||
 | 
						 *            the link that is analyzed | 
				
			||||||
 | 
						 * @param visitedLinks | 
				
			||||||
 | 
						 *            the list of links already analyzed. | 
				
			||||||
 | 
						 *            <em>This list is updated by the method.</em> | 
				
			||||||
 | 
						 * @param tipPorts | 
				
			||||||
 | 
						 *            the list of origin/destination ports. | 
				
			||||||
 | 
						 *            <em>This list is updated by the method.</em> | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						private static void extractConnectedPhysicalLinks(PhysicalLink link, Set<PhysicalLink> visitedLinks, Set<PhysicalPort> tipPorts) { | 
				
			||||||
 | 
							// link is about to be analyzed. Add it to the list of visited links
 | 
				
			||||||
 | 
							visitedLinks.add(link); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// The principle of this method is to explore recursively each link
 | 
				
			||||||
 | 
							// connected to the origin or destination port of link
 | 
				
			||||||
 | 
							List<PhysicalLink> linksToVisit = new ArrayList<>(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// First, determine for each port connected to link if it is a tip.
 | 
				
			||||||
 | 
							// A port is a tip if its container either contains all containers of
 | 
				
			||||||
 | 
							// the
 | 
				
			||||||
 | 
							// other ports or none of them.
 | 
				
			||||||
 | 
							for (AbstractPhysicalLinkEnd le : link.getLinkEnds()) { | 
				
			||||||
 | 
								PhysicalPort p = (PhysicalPort) le; | 
				
			||||||
 | 
								linksToVisit.addAll(port2link.get(p)); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Set<PhysicalComponent> portsParents = new HashSet<>(); | 
				
			||||||
 | 
								for (PhysicalLink l : port2link.get(p)) { | 
				
			||||||
 | 
									PhysicalPort oppositePort; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Consider only the opposite port of p on link l
 | 
				
			||||||
 | 
									if (l.getLinkEnds().get(0).equals(le)) { | 
				
			||||||
 | 
										oppositePort = (PhysicalPort) l.getLinkEnds().get(1); | 
				
			||||||
 | 
									} else { | 
				
			||||||
 | 
										oppositePort = (PhysicalPort) l.getLinkEnds().get(0); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									portsParents.add((PhysicalComponent) oppositePort.eContainer()); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								PhysicalComponent pParent = (PhysicalComponent) p.eContainer(); | 
				
			||||||
 | 
								boolean allParentsAreInsidePContainer = true; | 
				
			||||||
 | 
								boolean allParentsAreOutsidePContainer = true; | 
				
			||||||
 | 
								for (PhysicalComponent c : portsParents) { | 
				
			||||||
 | 
									if (!EcoreUtil.isAncestor(pParent, c)) | 
				
			||||||
 | 
										allParentsAreInsidePContainer = false; | 
				
			||||||
 | 
									else | 
				
			||||||
 | 
										allParentsAreOutsidePContainer = false; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (allParentsAreInsidePContainer || allParentsAreOutsidePContainer) | 
				
			||||||
 | 
									tipPorts.add(p); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Remove already visited links and continue exploration with neighbor
 | 
				
			||||||
 | 
							// links
 | 
				
			||||||
 | 
							linksToVisit.removeAll(visitedLinks); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (PhysicalLink l : linksToVisit) { | 
				
			||||||
 | 
								extractConnectedPhysicalLinks(l, visitedLinks, tipPorts); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						}; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Returns the path from root {@link PhysicalComponent} using '::' separator | 
				
			||||||
 | 
						 * as the fully qualified name of <code>object</code>. | 
				
			||||||
 | 
						 * <p> | 
				
			||||||
 | 
						 * eg: <code>getFullQualifiedName(subsubsystem_3)</code> returns | 
				
			||||||
 | 
						 * <code>Root::system_1::subsystem_2::subsubsystem_3</code> | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param object | 
				
			||||||
 | 
						 *            the targeted object | 
				
			||||||
 | 
						 * @return the fully qualified name of <code>object</code> | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static String getFullQualifiedName(EObject object) { | 
				
			||||||
 | 
							EObject parent = object.eContainer(); | 
				
			||||||
 | 
							if (!(parent instanceof PhysicalComponent)) | 
				
			||||||
 | 
								return ((NamedElement) object).getName(); | 
				
			||||||
 | 
							else | 
				
			||||||
 | 
								return getFullQualifiedName((PhysicalComponent) parent) + "::" + ((NamedElement) object).getName(); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Returns the instance path of <code>target</code> from origin {@link PhysicalComponent} using '.' separator. | 
				
			||||||
 | 
						 * <p> | 
				
			||||||
 | 
						 * eg: <code>getVirtualBehaviorLinkRelativeInstancePath(subsubsystem_3, root_system)</code> returns | 
				
			||||||
 | 
						 * <code>system_1_part.subsystem_2_part.subsubsystem_3</code> | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * Used for <code>Actual_Connection_Binding</code> when the bus instance is not in the same container. | 
				
			||||||
 | 
						 *  | 
				
			||||||
 | 
						 * @param target | 
				
			||||||
 | 
						 * @param origin | 
				
			||||||
 | 
						 * @return | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						public static String getVirtualBehaviorLinkRelativeInstancePath(CapellaElement target, PhysicalComponent origin) { | 
				
			||||||
 | 
							EObject parent = null; | 
				
			||||||
 | 
							if(target instanceof PhysicalLink) { | 
				
			||||||
 | 
								Collection<PhysicalComponent> parents = ComponentExchangeUtils.getVirtualBehaviorLinkComponent((PhysicalLink) target); | 
				
			||||||
 | 
								if(parents.size() == 1) { | 
				
			||||||
 | 
									parent = (CapellaElement) parents.toArray() [0]; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} else { | 
				
			||||||
 | 
								parent = target.eContainer(); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
							if (parent.equals(origin)) { | 
				
			||||||
 | 
								return ((NamedElement) target).getName().toLowerCase().replace(' ', '_'); | 
				
			||||||
 | 
							} else { | 
				
			||||||
 | 
								if (!(parent instanceof PhysicalComponent)) | 
				
			||||||
 | 
									return null; // TODO Improve error handling
 | 
				
			||||||
 | 
								else | 
				
			||||||
 | 
									return getVirtualBehaviorLinkRelativeInstancePath((PhysicalComponent) parent, | 
				
			||||||
 | 
											origin) + "_part." + ((NamedElement) target).getName().toLowerCase().replace(' ', '_'); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,75 @@ | 
				
			|||||||
 | 
					[comment encoding = UTF-8 /] | 
				
			||||||
 | 
					[** | 
				
			||||||
 | 
					 * Copyright (c) 2015, 2017 IRT AESE (IRT Saint Exupery). | 
				
			||||||
 | 
					 * All rights reserved. This program and the accompanying materials | 
				
			||||||
 | 
					 * are made available under the terms of the Eclipse Public License v1.0 | 
				
			||||||
 | 
					 * which accompanies this distribution, and is available at | 
				
			||||||
 | 
					 * http://www.eclipse.org/legal/epl-v10.html | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * Contributors: | 
				
			||||||
 | 
					 *     Bassem Ouni and Pierre Gaufillet (IRT Saint Exupéry) - initial API and implementation | 
				
			||||||
 | 
					 *      | 
				
			||||||
 | 
					 */] | 
				
			||||||
 | 
					[module capella2aadl_queries('http://www.polarsys.org/capella/core/pa/1.1.0','http://www.polarsys.org/capella/core/core/1.1.0','http://www.polarsys.org/capella/core/modeller/1.1.0','http://www.polarsys.org/capella/common/libraries/1.1.0','http://www.polarsys.org/capella/common/core/1.1.0','http://www.polarsys.org/capella/core/common/1.1.0', 'http://www.polarsys.org/capella/core/cs/1.1.0', 'http://www.polarsys.org/capella/core/fa/1.1.0')] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[** | 
				
			||||||
 | 
					 * The documentation of the query getPortDirection. | 
				
			||||||
 | 
					 * @param anOrientationPortKind | 
				
			||||||
 | 
					 */] | 
				
			||||||
 | 
					[query public getPortDirection(o : OrientationPortKind) : String = if(o=OrientationPortKind::IN) then 'in' else if(o=OrientationPortKind::OUT) then 'out' else '' endif endif/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getAADLNature(sc: PhysicalComponent) : String = if(sc.ownedPropertyValues->select(name='isBus')->notEmpty()) then 'bus' else if(sc.kind=PhysicalComponentKind::SOFTWARE_EXECUTION_UNIT) then 'processor' else if (sc.kind=PhysicalComponentKind::HARDWARE) then 'device' else if(sc.nature = PhysicalComponentNature::BEHAVIOR) then 'process' else 'system' endif endif endif endif/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getStringPropertyValue(ce: CapellaElement,  key: String) : String = ce.ownedPropertyValues->select(name=key)->at(1).oclAsType(StringPropertyValue).value/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public hasPropertyValue(ce: CapellaElement,  key: String) : Boolean = ce.ownedPropertyValues->select(name=key)->notEmpty()/] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public transformCapellaPhysicalLinksIntoAADLBusTopology(project: Project) : OclVoid =  | 
				
			||||||
 | 
					    invoke('com.irtsaintexupery.capella2aadl.requests.PhysicalLinkUtils', 'transformCapellaPhysicalLinksIntoAADLBusTopology(org.polarsys.capella.core.data.capellamodeller.Project)', Sequence{project}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public transformCapellaComponentExchangeIntoAADLConnections(project: Project) : OclVoid =  | 
				
			||||||
 | 
					    invoke('com.irtsaintexupery.capella2aadl.requests.ComponentExchangeUtils', 'transformCapellaComponentExchangeIntoAADLConnections(org.polarsys.capella.core.data.capellamodeller.Project)', Sequence{project}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getFullQualifiedName(elt: NamedElement) : String = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.PhysicalLinkUtils', 'getFullQualifiedName(org.polarsys.capella.core.data.capellacore.NamedElement)', Sequence{elt}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getVirtualBehaviorLinkRelativeInstancePath(target: CapellaElement, origin: PhysicalComponent) : String = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.PhysicalLinkUtils', 'getVirtualBehaviorLinkRelativeInstancePath(org.polarsys.capella.core.data.capellacore.CapellaElement, org.polarsys.capella.core.data.pa.PhysicalComponent)', Sequence{target, origin}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getBusNames(project: Project) : Set(String) = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.Bus', 'getBusNames(org.polarsys.capella.core.data.capellamodeller.Project)', Sequence{project}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getSyntheticPorts(pc: PhysicalComponent) : Sequence(PhysicalPort) = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.PhysicalLinkUtils', 'getSyntheticPorts(org.polarsys.capella.core.data.pa.PhysicalComponent)', Sequence{pc}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getSyntheticLinks(pc: PhysicalComponent) : Sequence(PhysicalLink) = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.PhysicalLinkUtils', 'getSyntheticLinks(org.polarsys.capella.core.data.pa.PhysicalComponent)', Sequence{pc}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getBusTypeForPort(pp: PhysicalPort) : String = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.PhysicalLinkUtils', 'getBusTypeForPort(org.polarsys.capella.core.data.cs.PhysicalPort)', Sequence{pp}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getComponentVirtualBehaviorPort(pc: PhysicalComponent) : Sequence(PhysicalPort) = | 
				
			||||||
 | 
						invoke('com.irtsaintexupery.capella2aadl.requests.ComponentExchangeUtils', 'getComponentVirtualBehaviorPort(org.polarsys.capella.core.data.pa.PhysicalComponent)', Sequence{pc}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getComponentVirtualBehaviorLink(pc: PhysicalComponent) : Sequence(PhysicalLink) = | 
				
			||||||
 | 
					    invoke('com.irtsaintexupery.capella2aadl.requests.ComponentExchangeUtils', 'getComponentVirtualBehaviorLink(org.polarsys.capella.core.data.pa.PhysicalComponent)', Sequence{pc}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getBusVirtualBehaviorLink(bus: String) : Sequence(PhysicalLink) = | 
				
			||||||
 | 
					    invoke('com.irtsaintexupery.capella2aadl.requests.ComponentExchangeUtils', 'getBusVirtualBehaviorLink(String)', Sequence{bus}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[query public getAllocatedVirtualBehaviorLink(pc: PhysicalComponent) : Sequence(PhysicalLink) = | 
				
			||||||
 | 
					    invoke('com.irtsaintexupery.capella2aadl.requests.ComponentExchangeUtils', 'getAllocatedVirtualBehaviorLink()', Sequence{pc}) | 
				
			||||||
 | 
					  /] | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,2 @@ | 
				
			|||||||
 | 
					/target/ | 
				
			||||||
 | 
					/bin/ | 
				
			||||||
@ -0,0 +1,11 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<projectDescription> | 
				
			||||||
 | 
						<name>com.irtsaintexupery.capella2aadl.repository</name> | 
				
			||||||
 | 
						<comment></comment> | 
				
			||||||
 | 
						<projects> | 
				
			||||||
 | 
						</projects> | 
				
			||||||
 | 
						<buildSpec> | 
				
			||||||
 | 
						</buildSpec> | 
				
			||||||
 | 
						<natures> | 
				
			||||||
 | 
						</natures> | 
				
			||||||
 | 
					</projectDescription> | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<site> | 
				
			||||||
 | 
					   <feature url="features/com.irtsaintexupery.capella2aadl_1.1.2.qualifier.jar" id="com.irtsaintexupery.capella2aadl" version="1.1.2.qualifier"> | 
				
			||||||
 | 
					      <category name="Capella transformations"/> | 
				
			||||||
 | 
					   </feature> | 
				
			||||||
 | 
					   <feature url="features/com.irtsaintexupery.capella2aadl.source_1.1.2.qualifier.jar" id="com.irtsaintexupery.capella2aadl.source" version="1.1.2.qualifier"> | 
				
			||||||
 | 
					      <category name="Capella transformations"/> | 
				
			||||||
 | 
					   </feature> | 
				
			||||||
 | 
					   <feature url="features/com.irtsaintexupery.epl_1.0.0.qualifier.jar" id="com.irtsaintexupery.epl" version="1.0.0.qualifier"> | 
				
			||||||
 | 
					      <category name="Capella transformations"/> | 
				
			||||||
 | 
					   </feature> | 
				
			||||||
 | 
					   <category-def name="Capella transformations" label="Capella transformations"> | 
				
			||||||
 | 
					      <description> | 
				
			||||||
 | 
					         Features providing transformations from Capella to other modeling languages. | 
				
			||||||
 | 
					      </description> | 
				
			||||||
 | 
					   </category-def> | 
				
			||||||
 | 
					</site> | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					<?xml version="1.0"?> | 
				
			||||||
 | 
					<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>com.irtsaintexupery</groupId> | 
				
			||||||
 | 
							<artifactId>parent</artifactId> | 
				
			||||||
 | 
							<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
							<relativePath>../../releng/com.irtsaintexupery.parent</relativePath> | 
				
			||||||
 | 
						</parent> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<artifactId>com.irtsaintexupery.capella2aadl.repository</artifactId> | 
				
			||||||
 | 
						<packaging>eclipse-repository</packaging> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</project> | 
				
			||||||
@ -0,0 +1,17 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<projectDescription> | 
				
			||||||
 | 
						<name>com.irtsaintexupery.parent</name> | 
				
			||||||
 | 
						<comment></comment> | 
				
			||||||
 | 
						<projects> | 
				
			||||||
 | 
						</projects> | 
				
			||||||
 | 
						<buildSpec> | 
				
			||||||
 | 
							<buildCommand> | 
				
			||||||
 | 
								<name>org.eclipse.m2e.core.maven2Builder</name> | 
				
			||||||
 | 
								<arguments> | 
				
			||||||
 | 
								</arguments> | 
				
			||||||
 | 
							</buildCommand> | 
				
			||||||
 | 
						</buildSpec> | 
				
			||||||
 | 
						<natures> | 
				
			||||||
 | 
							<nature>org.eclipse.m2e.core.maven2Nature</nature> | 
				
			||||||
 | 
						</natures> | 
				
			||||||
 | 
					</projectDescription> | 
				
			||||||
@ -0,0 +1,159 @@ | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion> | 
				
			||||||
 | 
						<groupId>com.irtsaintexupery</groupId> | 
				
			||||||
 | 
						<artifactId>parent</artifactId> | 
				
			||||||
 | 
						<version>1.0.0-SNAPSHOT</version> | 
				
			||||||
 | 
						<packaging>pom</packaging> | 
				
			||||||
 | 
						<modules> | 
				
			||||||
 | 
							<module>../../features/com.irtsaintexupery.epl</module> | 
				
			||||||
 | 
							<module>../../plugins/com.irtsaintexupery.capella2aadl</module> | 
				
			||||||
 | 
							<module>../../features/com.irtsaintexupery.capella2aadl-feature</module> | 
				
			||||||
 | 
							<module>../../plugins/com.irtsaintexupery.capella2aadl.ui</module> | 
				
			||||||
 | 
							<module>../../releng/com.irtsaintexupery.capella2aadl.repository</module> | 
				
			||||||
 | 
						</modules> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<properties> | 
				
			||||||
 | 
							<tycho-version>0.26.0</tycho-version> | 
				
			||||||
 | 
							<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | 
				
			||||||
 | 
						</properties> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<repositories> | 
				
			||||||
 | 
							<repository> | 
				
			||||||
 | 
								<id>Mars</id> | 
				
			||||||
 | 
								<layout>p2</layout> | 
				
			||||||
 | 
								<url>http://download.eclipse.org/releases/mars/201602261000/</url> | 
				
			||||||
 | 
							</repository> | 
				
			||||||
 | 
							<repository> | 
				
			||||||
 | 
								<id>Capella-1.1.x</id> | 
				
			||||||
 | 
								<layout>p2</layout> | 
				
			||||||
 | 
								<url>https://hudson.polarsys.org/capella/job/capella-v1.1.x/lastSuccessfulBuild/artifact/result/publish/org.polarsys.capella/site.p2/</url> | 
				
			||||||
 | 
							</repository> | 
				
			||||||
 | 
							<repository> | 
				
			||||||
 | 
								<id>Orbit-R20160221192158</id> | 
				
			||||||
 | 
								<layout>p2</layout> | 
				
			||||||
 | 
								<url>http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/</url> | 
				
			||||||
 | 
							</repository> | 
				
			||||||
 | 
							<repository> | 
				
			||||||
 | 
								<id>Kitalpha-1.1.x</id> | 
				
			||||||
 | 
								<layout>p2</layout> | 
				
			||||||
 | 
								<url>https://hudson.polarsys.org/kitalpha/job/Kitalpha-v1.1.x/lastSuccessfulBuild/artifact/result/publish/kitalpha_runtime/site.p2/</url> | 
				
			||||||
 | 
							</repository> | 
				
			||||||
 | 
							<repository> | 
				
			||||||
 | 
								<id>Sirius-4.1.1</id> | 
				
			||||||
 | 
								<layout>p2</layout> | 
				
			||||||
 | 
								<url>http://download.eclipse.org/sirius/updates/releases/4.1.1/mars</url> | 
				
			||||||
 | 
							</repository> | 
				
			||||||
 | 
						</repositories> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<pluginRepositories> | 
				
			||||||
 | 
							<pluginRepository> | 
				
			||||||
 | 
								<id>Maven</id> | 
				
			||||||
 | 
								<url>https://repo.maven.apache.org/maven2</url> | 
				
			||||||
 | 
							</pluginRepository> | 
				
			||||||
 | 
							<pluginRepository> | 
				
			||||||
 | 
								<id>Eclipse - Acceleo Snapshots</id> | 
				
			||||||
 | 
								<url>https://repo.eclipse.org/content/repositories/acceleo-snapshots</url> | 
				
			||||||
 | 
							</pluginRepository> | 
				
			||||||
 | 
							<pluginRepository> | 
				
			||||||
 | 
								<id>Eclipse - Acceleo Releases</id> | 
				
			||||||
 | 
								<url>https://repo.eclipse.org/content/repositories/acceleo-releases</url> | 
				
			||||||
 | 
							</pluginRepository> | 
				
			||||||
 | 
						</pluginRepositories> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<build> | 
				
			||||||
 | 
							<plugins> | 
				
			||||||
 | 
								<plugin> | 
				
			||||||
 | 
									<groupId>org.eclipse.tycho.extras</groupId> | 
				
			||||||
 | 
									<artifactId>tycho-source-feature-plugin</artifactId> | 
				
			||||||
 | 
									<version>${tycho-version}</version> | 
				
			||||||
 | 
									<executions> | 
				
			||||||
 | 
										<execution> | 
				
			||||||
 | 
											<id>source-feature</id> | 
				
			||||||
 | 
											<phase>package</phase> | 
				
			||||||
 | 
											<goals> | 
				
			||||||
 | 
												<goal>source-feature</goal> | 
				
			||||||
 | 
											</goals> | 
				
			||||||
 | 
										</execution> | 
				
			||||||
 | 
									</executions> | 
				
			||||||
 | 
								</plugin> | 
				
			||||||
 | 
								<plugin> | 
				
			||||||
 | 
									<groupId>org.eclipse.tycho</groupId> | 
				
			||||||
 | 
									<artifactId>tycho-p2-plugin</artifactId> | 
				
			||||||
 | 
									<version>${tycho-version}</version> | 
				
			||||||
 | 
									<executions> | 
				
			||||||
 | 
										<execution> | 
				
			||||||
 | 
											<id>attach-p2-metadata</id> | 
				
			||||||
 | 
											<phase>package</phase> | 
				
			||||||
 | 
											<goals> | 
				
			||||||
 | 
												<goal>p2-metadata</goal> | 
				
			||||||
 | 
											</goals> | 
				
			||||||
 | 
										</execution> | 
				
			||||||
 | 
									</executions> | 
				
			||||||
 | 
								</plugin> | 
				
			||||||
 | 
								<plugin> | 
				
			||||||
 | 
									<groupId>org.eclipse.tycho</groupId> | 
				
			||||||
 | 
									<artifactId>tycho-maven-plugin</artifactId> | 
				
			||||||
 | 
									<version>${tycho-version}</version> | 
				
			||||||
 | 
									<extensions>true</extensions> | 
				
			||||||
 | 
								</plugin> | 
				
			||||||
 | 
								<plugin> | 
				
			||||||
 | 
									<groupId>org.eclipse.tycho</groupId> | 
				
			||||||
 | 
									<artifactId>tycho-source-plugin</artifactId> | 
				
			||||||
 | 
									<version>${tycho-version}</version> | 
				
			||||||
 | 
									<executions> | 
				
			||||||
 | 
										<execution> | 
				
			||||||
 | 
											<id>plugin-source</id> | 
				
			||||||
 | 
											<goals> | 
				
			||||||
 | 
												<goal>plugin-source</goal> | 
				
			||||||
 | 
											</goals> | 
				
			||||||
 | 
										</execution> | 
				
			||||||
 | 
									</executions> | 
				
			||||||
 | 
								</plugin> | 
				
			||||||
 | 
								<plugin> | 
				
			||||||
 | 
									<groupId>org.eclipse.tycho</groupId> | 
				
			||||||
 | 
									<artifactId>target-platform-configuration</artifactId> | 
				
			||||||
 | 
									<version>${tycho-version}</version> | 
				
			||||||
 | 
									<configuration> | 
				
			||||||
 | 
										<environments> | 
				
			||||||
 | 
											<environment> | 
				
			||||||
 | 
												<os>win32</os> | 
				
			||||||
 | 
												<ws>win32</ws> | 
				
			||||||
 | 
												<arch>x86</arch> | 
				
			||||||
 | 
											</environment> | 
				
			||||||
 | 
											<environment> | 
				
			||||||
 | 
												<os>linux</os> | 
				
			||||||
 | 
												<ws>gtk</ws> | 
				
			||||||
 | 
												<arch>x86_64</arch> | 
				
			||||||
 | 
											</environment> | 
				
			||||||
 | 
											<environment> | 
				
			||||||
 | 
												<os>macosx</os> | 
				
			||||||
 | 
												<ws>cocoa</ws> | 
				
			||||||
 | 
												<arch>x86_64</arch> | 
				
			||||||
 | 
											</environment> | 
				
			||||||
 | 
										</environments> | 
				
			||||||
 | 
									</configuration> | 
				
			||||||
 | 
								</plugin> | 
				
			||||||
 | 
							</plugins> | 
				
			||||||
 | 
							<pluginManagement> | 
				
			||||||
 | 
								<plugins> | 
				
			||||||
 | 
									<plugin> | 
				
			||||||
 | 
										<groupId>org.eclipse.acceleo</groupId> | 
				
			||||||
 | 
										<artifactId>org.eclipse.acceleo.maven</artifactId> | 
				
			||||||
 | 
										<version>3.6.4</version> | 
				
			||||||
 | 
										<executions> | 
				
			||||||
 | 
											<execution> | 
				
			||||||
 | 
												<id>acceleo-compile</id> | 
				
			||||||
 | 
												<phase>compile</phase> | 
				
			||||||
 | 
												<goals> | 
				
			||||||
 | 
													<goal>acceleo-compile</goal> | 
				
			||||||
 | 
												</goals> | 
				
			||||||
 | 
											</execution> | 
				
			||||||
 | 
										</executions> | 
				
			||||||
 | 
									</plugin> | 
				
			||||||
 | 
								</plugins> | 
				
			||||||
 | 
							</pluginManagement> | 
				
			||||||
 | 
						</build> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</project> | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue