Bug 514634 General improvement

[Upgrade] Adding Intro plug-in
[Upgrade] Adding CheatSheet
[Fix] Remove unused dependencies on PDE plug-in 
Amend - 8
[Upgrade] Adding Thermostat tutorial plug-in

Change-Id: I546dc56b7a6f5d751f51f2c17636e7e229aab8e2
Signed-off-by: Boutheina Bannour <boutheina.bannour@gmail.com>
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF
index ae29ee4..2b0257f 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF
@@ -17,7 +17,6 @@
  org.eclipse.ui.workbench,
  org.eclipse.ui.ide,
  org.eclipse.ui.navigator,
- org.eclipse.pde.ui,
  org.eclipse.ui.forms,
  org.eclipse.core.externaltools,
  org.eclipse.swt,
diff --git a/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF
index 9867a3c..924cd0d 100644
--- a/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF
@@ -7,7 +7,6 @@
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ui,
  org.eclipse.jface,
- org.eclipse.pde,
  org.eclipse.efm.ui,
  org.eclipse.ui.forms,
  org.eclipse.efm.execution.configuration.common.ui
diff --git a/gui/org.eclipse.efm.ui.intro/.classpath b/gui/org.eclipse.efm.ui.intro/.classpath
new file mode 100644
index 0000000..b862a29
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/gui/org.eclipse.efm.ui.intro/.gitignore b/gui/org.eclipse.efm.ui.intro/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/gui/org.eclipse.efm.ui.intro/.project b/gui/org.eclipse.efm.ui.intro/.project
new file mode 100644
index 0000000..e0d3d6a
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.efm.ui.intro</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/gui/org.eclipse.efm.ui.intro/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.ui.intro/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..295926d
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8

+org.eclipse.jdt.core.compiler.compliance=1.8

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.8

diff --git a/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..202abc7
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: EFM Intro
+Bundle-SymbolicName: org.eclipse.efm.ui.intro;singleton:=true
+Bundle-Version: 0.0.1.qualifier
+Bundle-Activator: org.eclipse.efm.ui.intro.Activator
+Bundle-Vendor: CEA LIST
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.intro
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
diff --git a/gui/org.eclipse.efm.ui.intro/about.html b/gui/org.eclipse.efm.ui.intro/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/gui/org.eclipse.efm.ui.intro/build.properties b/gui/org.eclipse.efm.ui.intro/build.properties
new file mode 100644
index 0000000..6f20375
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/build.properties
@@ -0,0 +1,5 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml

diff --git a/gui/org.eclipse.efm.ui.intro/extensions/css/overview.css b/gui/org.eclipse.efm.ui.intro/extensions/css/overview.css
new file mode 100644
index 0000000..71c8419
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/css/overview.css
@@ -0,0 +1,11 @@
+a#im-help-class-diagrams img,
+a#im-help-papyrus img,
+a#im-help-profiles img {
+	background-image : url(../../img/efm-48.png);
+}
+
+a#im-help-class-diagrams:hover img,
+a#im-help-papyrus:hover img,
+a#im-help-profiles:hover img {
+	background-image : url(../../img/efm-48_hover.png);
+}
diff --git a/gui/org.eclipse.efm.ui.intro/extensions/css/overview.properties b/gui/org.eclipse.efm.ui.intro/extensions/css/overview.properties
new file mode 100644
index 0000000..00398db
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/css/overview.properties
@@ -0,0 +1,5 @@
+overview.im-help-class-diagrams.link-icon = img/efm-48.png
+overview.im-help-class-diagrams.hover-icon = img/efm-48_hover.png
+
+overview.im-help-profiles.link-icon = img/efm-48.png
+overview.im-help-profiles.hover-icon = img/efm-48_hover.png
\ No newline at end of file
diff --git a/gui/org.eclipse.efm.ui.intro/extensions/css/samples.css b/gui/org.eclipse.efm.ui.intro/extensions/css/samples.css
new file mode 100644
index 0000000..2809858
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/css/samples.css
@@ -0,0 +1,11 @@
+a#im-sample-project-management img {
+	background-image : url(../../img/efm-48.png);
+}
+
+a#im-sample-project-management:hover img {
+	background-image : url(../../img/efm-48_hover.png);
+}
+
+.content-group {
+	margin-bottom: 20px;
+}
\ No newline at end of file
diff --git a/gui/org.eclipse.efm.ui.intro/extensions/css/samples.properties b/gui/org.eclipse.efm.ui.intro/extensions/css/samples.properties
new file mode 100644
index 0000000..5fa1a89
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/css/samples.properties
@@ -0,0 +1,2 @@
+overview.im-sample-project-management.link-icon = img/efm-48.png
+overview.im-sample-project-management.hover-icon = img/efm-48_hover.png
diff --git a/gui/org.eclipse.efm.ui.intro/extensions/css/tutorials.css b/gui/org.eclipse.efm.ui.intro/extensions/css/tutorials.css
new file mode 100644
index 0000000..1fb46b3
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/css/tutorials.css
@@ -0,0 +1,11 @@
+a#im-tutorial-getting-started img {
+	background-image : url(../../img/efm-48.png);
+}
+
+a#im-tutorial-getting-started:hover img {
+	background-image : url(../../img/efm-48_hover.png);
+}
+
+.content-group {
+	margin-bottom: 20px;
+}
\ No newline at end of file
diff --git a/gui/org.eclipse.efm.ui.intro/extensions/css/tutorials.properties b/gui/org.eclipse.efm.ui.intro/extensions/css/tutorials.properties
new file mode 100644
index 0000000..b4502f5
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/css/tutorials.properties
@@ -0,0 +1,2 @@
+tutorials.im-tutorial-getting-started.link-icon = img/efm-48.png
+tutorials.im-tutorial-getting-started.hover-icon = img/efm-48_hover.png
diff --git a/gui/org.eclipse.efm.ui.intro/extensions/tutorialsExtensionContent.xml b/gui/org.eclipse.efm.ui.intro/extensions/tutorialsExtensionContent.xml
new file mode 100644
index 0000000..93e6b69
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/extensions/tutorialsExtensionContent.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<introContent>
+  <extensionContent id="org.eclipse.efm.ui.intro.tutorials" name="EFM Tutorials" alt-style="css/tutorials.properties" style="css/tutorials.css" path="tutorials/@">
+    <group label="Eclipse Formal Modeling" id="org.eclipse.efm.ui.intro.tutorial-group" style-id="content-group">
+      <link label="Getting Started with Model-based testing with Thermostat example" 
+      		id="im-tutorial-getting-started" 
+      		style-id="content-link"
+      		url="http://org.eclipse.ui.intro/showStandby?partId=org.eclipse.platform.cheatsheet&amp;input=org.eclipse.efm.tutorial.Thermostat.cheatsheet" >
+        <text>This tutorial provides an introduction into the symbolic modeling framework and offline testing process.</text>
+      </link>
+    </group>
+  </extensionContent>
+</introContent>
\ No newline at end of file
diff --git a/gui/org.eclipse.efm.ui.intro/img/efm-48.png b/gui/org.eclipse.efm.ui.intro/img/efm-48.png
new file mode 100644
index 0000000..cbd8020
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/img/efm-48.png
Binary files differ
diff --git a/gui/org.eclipse.efm.ui.intro/img/efm-48_hover.png b/gui/org.eclipse.efm.ui.intro/img/efm-48_hover.png
new file mode 100644
index 0000000..cbd8020
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/img/efm-48_hover.png
Binary files differ
diff --git a/gui/org.eclipse.efm.ui.intro/license.html b/gui/org.eclipse.efm.ui.intro/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  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, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</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 (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</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 &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; 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 (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; 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 &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  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 &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) 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 &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). 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>
+   (&quot;Specification&quot;).</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 (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) 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 (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/gui/org.eclipse.efm.ui.intro/plugin.xml b/gui/org.eclipse.efm.ui.intro/plugin.xml
new file mode 100644
index 0000000..e2090ed
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/plugin.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         point="org.eclipse.ui.intro">

+      <introProductBinding

+            introId="org.eclipse.ui.intro.universal"

+            productId="org.eclipse.efm.modeling.rcp.product">

+      </introProductBinding>

+   </extension>

+   <extension

+         point="org.eclipse.ui.intro.configExtension">

+      <configExtension

+            configId="org.eclipse.ui.intro.universalConfig"

+            content="extensions/tutorialsExtensionContent.xml">

+      </configExtension>

+   </extension>

+

+</plugin>

diff --git a/gui/org.eclipse.efm.ui.intro/pom.xml b/gui/org.eclipse.efm.ui.intro/pom.xml
new file mode 100644
index 0000000..7db88dc
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/pom.xml
@@ -0,0 +1,14 @@
+<?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>org.eclipse.efm</groupId>
+		<artifactId>org.eclipse.efm.modeling.gui</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.efm.ui.intro</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>org.eclipse.efm.ui.intro</name>
+	<description>This plug-in contains ui intro for efm welcome page...</description>
+</project>
\ No newline at end of file
diff --git a/gui/org.eclipse.efm.ui.intro/src/org/eclipse/efm/ui/intro/Activator.java b/gui/org.eclipse.efm.ui.intro/src/org/eclipse/efm/ui/intro/Activator.java
new file mode 100644
index 0000000..8e1e528
--- /dev/null
+++ b/gui/org.eclipse.efm.ui.intro/src/org/eclipse/efm/ui/intro/Activator.java
@@ -0,0 +1,63 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.ui.intro;

+

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.efm.ui.intro"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+}

diff --git a/gui/pom.xml b/gui/pom.xml
index b854be7..fb93ca5 100644
--- a/gui/pom.xml
+++ b/gui/pom.xml
@@ -21,5 +21,6 @@
 		<module>org.eclipse.efm.modeling.ui.views.common</module>
 		<module>org.eclipse.efm.modeling.ui.views.property.tab.xlia</module>
 		<module>org.eclipse.efm.ui</module>
+		<module>org.eclipse.efm.ui.intro</module>
 	</modules>
 </project>
diff --git a/pom.xml b/pom.xml
index 08cd76a..fab6ef3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -81,5 +81,6 @@
 		<module>gui</module>
 		<module>releng</module>
 		<module>targetplatform</module>
+		<module>tutorial</module>
 	</modules>
 </project>
\ No newline at end of file
diff --git a/releng/org.eclipse.efm.modeling.rcp/plugin.xml b/releng/org.eclipse.efm.modeling.rcp/plugin.xml
index bd4c384..b77c391 100644
--- a/releng/org.eclipse.efm.modeling.rcp/plugin.xml
+++ b/releng/org.eclipse.efm.modeling.rcp/plugin.xml
@@ -16,7 +16,7 @@
          </property>
          <property
               name="introBrandingImage"
-              value="product:icons/intro-papyrus.png"/>
+              value="product:icons/intro-efm.png"/>
          <property
                name="introTitle"
                value="Welcome to Eclipse Formal Modeling">
diff --git a/releng/org.eclipse.efm.modeling.rcp/plugin_customization.ini b/releng/org.eclipse.efm.modeling.rcp/plugin_customization.ini
index d61be40..6793b9f 100644
--- a/releng/org.eclipse.efm.modeling.rcp/plugin_customization.ini
+++ b/releng/org.eclipse.efm.modeling.rcp/plugin_customization.ini
@@ -24,3 +24,27 @@
 
 #org.eclipse.ui/defaultPerspectiveId=org.eclipse.efm.editing.ui.perspectiveEditing
 #org.eclipse.ui/defaultPerspectiveId=org.eclipse.efm.execution.ui.perspectiveExecution
+
+
+# Show Intro
+org.eclipse.ui/showIntro=true
+
+# a comma-separated list of root page identifiers that should be visible in the home page
+# possible values: overview,firststeps,tutorials,samples,whatsnew,migrate,webresources
+org.eclipse.ui.intro.universal/INTRO_ROOT_PAGES=tutorials
+
+# a file name pointing at the XML file with the page layout settings (see more about this below). The file name relative to the product bundle must have 'product:' prefix.
+org.eclipse.ui.intro.universal/INTRO_DATA=product:welcome/introData.xml
+
+# a unique identifier of the presentation theme to be used for this product. Note that this preference comes from 'org.eclipse.ui.intro plug-in' because active theme selection is performed at the framework level.
+org.eclipse.ui.intro/INTRO_THEME=org.eclipse.ui.intro.universal.solstice
+
+# the id of the page which will be shown when Eclipse starts the first time.
+# org.eclipse.ui.intro/INTRO_START_PAGE=
+
+# the id of the page which will be shown when the home button is pressed.
+# org.eclipse.ui.intro/INTRO_HOME_PAGE=
+
+# the id of the page which will be shown when welcome is displayed in a non-maximized form.
+# org.eclipse.ui.intro/INTRO_STANDBY_PAGE=
+
diff --git a/tutorial/.gitignore b/tutorial/.gitignore
new file mode 100644
index 0000000..bbdfc34
--- /dev/null
+++ b/tutorial/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+*.md.html
diff --git a/tutorial/.project b/tutorial/.project
new file mode 100644
index 0000000..a7e6eef
--- /dev/null
+++ b/tutorial/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.efm.modeling.tutorial</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>
diff --git a/tutorial/about.html b/tutorial/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/tutorial/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/.classpath b/tutorial/org.eclipse.efm.tutorial.Thermostat/.classpath
new file mode 100644
index 0000000..b862a29
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/.gitignore b/tutorial/org.eclipse.efm.tutorial.Thermostat/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/.project b/tutorial/org.eclipse.efm.tutorial.Thermostat/.project
new file mode 100644
index 0000000..51735fd
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.efm.tutorial.Thermostat</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/.settings/org.eclipse.jdt.core.prefs b/tutorial/org.eclipse.efm.tutorial.Thermostat/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..295926d
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8

+org.eclipse.jdt.core.compiler.compliance=1.8

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.8

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/META-INF/MANIFEST.MF b/tutorial/org.eclipse.efm.tutorial.Thermostat/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..92a5a55
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Thermostat Tutorial
+Bundle-SymbolicName: org.eclipse.efm.tutorial.Thermostat;singleton:=true
+Bundle-Version: 0.0.1.qualifier
+Bundle-Activator: org.eclipse.efm.tutorial.thermostat.Activator
+Bundle-Vendor: CEA LIST
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.cheatsheets;bundle-version="3.5.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/about.html b/tutorial/org.eclipse.efm.tutorial.Thermostat/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/build.properties b/tutorial/org.eclipse.efm.tutorial.Thermostat/build.properties
new file mode 100644
index 0000000..6f20375
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/build.properties
@@ -0,0 +1,5 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/cheatsheet/getting_started-orig.xml b/tutorial/org.eclipse.efm.tutorial.Thermostat/cheatsheet/getting_started-orig.xml
new file mode 100644
index 0000000..53367b7
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/cheatsheet/getting_started-orig.xml
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cheatsheet title="Getting started with EFM">
+<intro>
+	<description>
+		This tutorial introduces the basic user interface of EFM and demonstrates how to create a simple project.
+	</description>
+</intro>
+<item title="Get to know your environment">
+	<description>
+		The most important step is to familiarize yourself with the EFM environment.<br/>
+		What you see and what you can do in EFM is governed by the current perspective. There are three different perspective associated with different business activities : Requirement Design, Test Design and Test Execution. <br/>
+		You can switch between different perspectives by clicking the button in the upper right corner of this window. Alternatively, you may open the selection dialog through the menu 'Window' > 'Perspective' > 'Open Perspective'.<br/>
+	</description>
+	<subitem>
+		<description>
+			<b>Requirement Design Perspective</b><br/>
+			Within this perspective, you can define and organize requirements of the system.<br/>
+			To open this perspective, click the green action arrow.
+		</description>
+  <command
+        required="false"
+        serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.efm.ui.perspective.RequirementDesign)"/>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Test Design Perspective</b><br/>
+			Within this perspective, you can define and organize test suites and test cases.<br/>
+			To open this perspective, click the green action arrow.
+			<br/>
+		</description>
+		<command required="true" confirm="true"
+			     serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.efm.ui.perspective.TestDesign)"/>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Test Execution Perspective</b><br/>
+			Within this perspective, you can define and execute test campaigns.<br/>
+			To open this perspective, click the green action arrow.
+		</description>
+		<command required="true" confirm="true"
+				 serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.efm.ui.perspective.TestExecution)"/>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Project Explorer</b><br/>
+			The Project Explorer shows a list of all projects and its contained files in your workspace. This explorer is available in every QS perspective.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Project Tree Explorer</b><br/>
+			The Project Tree Explorer shows the contents of the currently opened project. This explorer is available in every QS perspective, but displays only concepts relevant to the current perspective. <br/>
+			For example, the Project Tree Explorer does not show requirements if the Test Execution Perspective is active.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Project Dictionary</b><br/>
+			NOT AVAILABLE YET
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Form Editor View</b><br/>
+			The Form Editor View shows and editable form associated to an element of the Project Tree Explorer.
+			You will have to double-click on an element to open its Form Editor View.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Properties View</b><br/>
+			The Properties view shows additional properties of the currently selected element of the Project Tree Explorer.
+		</description>
+	</subitem>
+</item>
+<item title="Create a new EFM Project" dialog="true">
+	<description>
+		The EFM Project Wizard allows you to initialize a new project automatically.<br/>
+		To create a new project, you can select 'File' > 'New' > 'Create a New QS Project' from the menu or right-click in the Project explorer and select 'New' > 'Create a New QS Project'.
+	</description>
+	<subitem>
+		<description>
+			Start the EFM Project Wizard.
+		</description>
+		<command required="true"
+				 serialization="org.eclipse.ui.newWizard(newWizardId=org.eclipse.papyrus.uml.diagram.wizards.createproject)"/>
+	</subitem>
+	<subitem label="Select the parent Checkout in which the project will be created." />
+	<subitem label="Specify a 'Project name' and hit 'Next'." />
+	<subitem label="To Be Continued." />
+</item>
+<item title="Connect to EFM Server" dialog="true">
+	<description>
+		Not Available Yet
+	</description>
+</item>
+<item title="Inspect the created project content">
+	<description>
+		After creating the project, the Project Tree Explorer shows a project structure with three business activities : Requirement Design, Test Design and Test Execution.
+	</description>
+	<subitem>
+		<description>
+			<b>Requirement Design</b><br/>
+			This business activity contains all elements associated with requirements.<br/>
+			Requirements can be hierarchically organized using Requirement Design Packages.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Test Design</b><br/>
+			This business activity contains all elements associated with test definition. You can see the two standard oracles which were automatically created.<br/>
+			Test suites and tests cases can be hierarchically organized using Test Design Packages.<br/>
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Test Execution</b><br/>
+			This business activity contains all elements associated with test execution.<br/>
+			Test campaigns can be hierarchically organized using Test Execution Packages.<br/>
+		</description>
+	</subitem>
+</item>
+<item title="Create your first test case">
+	<description>
+		Here we will create a test suite, a test case and several test steps. We will use the ATM example consisting of a credit card, an automatic cash dispenser and a bank account.
+		Our test case will verify that the credit card is swallowed after a bad PIN code has been given three times.
+	</description>
+	<subitem>
+		<description>
+			<b>Create a Test Design Package</b><br/>
+			Select the 'Test Design' business activity, right click to open the contextual menu and choose 'Test Design > New Package'.<br/>
+			A Test Design Package is created and contains three sub folders: 'Steps Folder', 'Cases Folder' and 'Data'.
+			After the package is created, you can change its name in the associated form.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Create a Test Case</b><br/>
+		Select the 'Test Cases Folder', right click to open the contextual menu and choose 'Test Design > New Test Case'.
+		A test case is created and its properties are displayed in the associated form. Give a name to the test case, for example: 'Bad Pin Three Times'.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Create and Add a Test Step</b><br/>
+			In the test case form, press the 'Create And Add A Step' button. The new test step is created in the 'Test Steps Folder' and associated to the test case.<br/>
+			Note the slightly different icons when seeing the test step from the test step forlder and from the test case. This express the fact the test step is stored in the test steps folder and is only referenced in the test case.<br/>
+			In the test step form, set the step name to 'Enter false code PIN', the stimulation to 'input $userPID_ko$' and the expected to 'output message $Enter_another_pin_code_msg$'.<br/>
+			The stimulation and the expected references parameters with the $parameter_name$ convention.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Create a Parameter</b><br/>
+			Select the 'Data' folder, right click to open the contextual menu, choose 'Test Design' > 'New Parameter' and select 'Integer' in the popping dialog.<br/>
+			The new parameter is created in the 'Data' folder. Set its name to 'userPID_ko'. To set a default value, click on the green '+', choose 'LiteralInteger' and set '3782' as name and value.<br/>
+			We also need to create the Enter_another_pin_code_msg. Follow the previous procedure but choose String and LiteralString, and set default value to 'Enter PIN code'.<br/>
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Associate a Parameter to a Test Step</b><br/>
+			Select the previously created test step. In the form editor, click on the green '+' close to the Parameters List and select the parameters we have just created.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Add an existing Test Step</b><br/>
+			The second step of our test case is the same than the first one. If is very easy to reuse the same step two times.<br/>
+			Go back to the 'Test Case Folder' and select our test case. In the form editor, press the 'Add an Existing Step' button and choose 'Enter false code PIN'. The test step is referenced two times in the test case.<br/>
+			Basically, it is the same test step, so it is already associated with the two parameters previously created.
+		</description>
+	</subitem>
+</item>
+<item title="Create and organize a Test Suite">
+	<description>
+		Now, we going to create a test suite in which we will add our test case.
+	</description>
+	<subitem>
+		<description>
+			<b>Create a Test Suite</b><br/>
+			Select the Test Design Package, right click to open the contextual menu and choose 'Test Design > New Test Suite'.<br/>
+			A Test Suite is created and its properties are displayed on the Form Editor.
+			In the test step form, give the name 'ATM_func_tests' to the test suite.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Add a Test Case</b><br/>
+			In the test suite form, press on the 'Add a TestCase' button and select our test case from the popping dialog.
+			Note that a test suite cannot contains two times the same test case.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>TODO</b><br/>
+			TODO
+		</description>
+	</subitem>
+</item>
+<item title="Create a Test Campaign">
+	<description>
+		TODO
+	</description>
+</item>
+<item title="Execute a Test Campaign">
+	<description>
+		TODO
+	</description>
+</item>
+<item title="Create and organize Requirements">
+	<description>
+		TODO
+	</description>
+</item>
+<item title="Going further">
+	<description>
+		Here we show optional (but useful) capabilities of EFM
+	</description>
+	<subitem>
+		<description>
+			<b>Using a SUT model</b><br/>
+			TODO
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Using a Test Context model</b><br/>
+			TODO
+		</description>
+	</subitem>
+</item>
+<item skip="true" title="More Information" href="/org.eclipse.papyrus.uml.doc/target/generated-eclipse-help/PapyrusStarterGuide.html">
+	<description>
+	TODO
+	</description>
+	<command required="false"
+		serialization="org.eclipse.ui.help.helpContents"/>
+</item>
+<item skip="true" title="Example: ATM">
+	<description>
+		TODO
+	</description>
+	<command required="false"
+		serialization="org.eclipse.ui.newWizard(newWizardId=org.eclipse.efm.ui.wizard.createproject)"/>
+</item>
+</cheatsheet>
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/cheatsheet/getting_started.xml b/tutorial/org.eclipse.efm.tutorial.Thermostat/cheatsheet/getting_started.xml
new file mode 100644
index 0000000..7e829aa
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/cheatsheet/getting_started.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cheatsheet title="Getting started with EFM">
+<intro>
+	<description>
+		Model-based testing (MBT) uses models of systems for the derivation of test cases. We use timed automata as models that manipulate variables to abstractly
+denote system states (we call them data variables) and variables to capture timing constraints (we call them clocks) on system executions. 
+The objective is to get familiar with model-based testing using symbolic techniques. Symbolic execution is a technique used here to analyze model behavior. It works by using symbols, instead of concrete values. Hence, variables during the execution are assigned with expressions based on those symbols rather than concrete values.
+
+This exercise sheet is divided in two parts.
+	</description>
+</intro>
+<item title="Part I Symbolic framework">
+	<description>
+		The most important step is to familiarize yourself with the symbolic framework.<br/>
+	</description>
+	<subitem>
+		<description>
+			<b>Modeling</b><br/>
+			Consider the automaton of the thermostat control component in Figure 2.
+		</description>
+  <command
+        required="false"
+        serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.efm.ui.perspective.RequirementDesign)"/>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Test Design Perspective</b><br/>
+			Within this perspective, you can define and organize test suites and test cases.<br/>
+			To open this perspective, click the green action arrow.
+			<br/>
+		</description>
+		<command required="true" confirm="true"
+			     serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.efm.ui.perspective.TestDesign)"/>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Test Execution Perspective</b><br/>
+			Within this perspective, you can define and execute test campaigns.<br/>
+			To open this perspective, click the green action arrow.
+		</description>
+		<command required="true" confirm="true"
+				 serialization="org.eclipse.ui.perspectives.showPerspective(org.eclipse.ui.perspectives.showPerspective.perspectiveId=org.eclipse.efm.ui.perspective.TestExecution)"/>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Project Explorer</b><br/>
+			The Project Explorer shows a list of all projects and its contained files in your workspace. This explorer is available in every QS perspective.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Project Tree Explorer</b><br/>
+			The Project Tree Explorer shows the contents of the currently opened project. This explorer is available in every QS perspective, but displays only concepts relevant to the current perspective. <br/>
+			For example, the Project Tree Explorer does not show requirements if the Test Execution Perspective is active.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Project Dictionary</b><br/>
+			NOT AVAILABLE YET
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Form Editor View</b><br/>
+			The Form Editor View shows and editable form associated to an element of the Project Tree Explorer.
+			You will have to double-click on an element to open its Form Editor View.
+		</description>
+	</subitem>
+	<subitem>
+		<description>
+			<b>Properties View</b><br/>
+			The Properties view shows additional properties of the currently selected element of the Project Tree Explorer.
+		</description>
+	</subitem>
+</item>
+<item title="Create a new EFM Project" dialog="true">
+	<description>
+		The EFM Project Wizard allows you to initialize a new project automatically.<br/>
+		To create a new project, you can select 'File' > 'New' > 'Create a New QS Project' from the menu or right-click in the Project explorer and select 'New' > 'Create a New QS Project'.
+	</description>
+	<subitem>
+		<description>
+			Start the EFM Project Wizard.
+		</description>
+		<command required="true"
+				 serialization="org.eclipse.ui.newWizard(newWizardId=org.eclipse.papyrus.uml.diagram.wizards.createproject)"/>
+	</subitem>
+	<subitem label="Select the parent Checkout in which the project will be created." />
+	<subitem label="Specify a 'Project name' and hit 'Next'." />
+	<subitem label="To Be Continued." />
+</item>
+<item title="Connect to EFM Server" dialog="true">
+	<description>
+		Not Available Yet
+	</description>
+</item>
+</cheatsheet>
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/license.html b/tutorial/org.eclipse.efm.tutorial.Thermostat/license.html
new file mode 100644
index 0000000..c3d34c3
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+   (&quot;EPL&quot;).  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, &quot;Program&quot; will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</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 (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</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 &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; 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 (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; 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 &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  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 &quot;src&quot; of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) 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 &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+   other materials (collectively &quot;Installable Software&quot;). 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>
+   (&quot;Specification&quot;).</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 (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+       on a machine (&quot;Target Machine&quot;) 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 (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/outputTrace/mergeTrace.txt b/tutorial/org.eclipse.efm.tutorial.Thermostat/outputTrace/mergeTrace.txt
new file mode 100644
index 0000000..45e196a
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/outputTrace/mergeTrace.txt
@@ -0,0 +1,8 @@
+delta = 1
+INPUT sens(0)
+delta = 1
+OUTPUT screen(1)
+delta = 1
+OUTPUT dt(20)
+delta = 2
+OUTPUT equip(4)
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/plugin.xml b/tutorial/org.eclipse.efm.tutorial.Thermostat/plugin.xml
new file mode 100644
index 0000000..067de9e
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/plugin.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         point="org.eclipse.ui.cheatsheets.cheatSheetContent">

+      <category

+            id="org.eclipse.efm.tutorial.Thermostat.category"

+            name="ThermostTutorial">

+      </category>

+      <cheatsheet

+            category="org.eclipse.efm.tutorial.Thermostat.category"

+            composite="false"

+            contentFile="cheatsheet/getting_started.xml"

+            id="org.eclipse.efm.tutorial.Thermostat.cheatsheet"

+            name="org.eclipse.efm.tutorial.Thermostat.cheatsheet">

+      </cheatsheet>

+   </extension>

+

+</plugin>

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/pom.xml b/tutorial/org.eclipse.efm.tutorial.Thermostat/pom.xml
new file mode 100644
index 0000000..b1d9c52
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/pom.xml
@@ -0,0 +1,14 @@
+<?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>org.eclipse.efm</groupId>
+		<artifactId>org.eclipse.efm.modeling.tutorial</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.efm.tutorial.Thermostat</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>org.eclipse.efm.tutorial.Thermostat</name>
+	<description>This plug-in contains Thermostat tutorial...</description>
+</project>
\ No newline at end of file
diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/Activator.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/Activator.java
new file mode 100644
index 0000000..4d22aef
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/Activator.java
@@ -0,0 +1,63 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat;

+

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.efm.tutorial.Thermostat"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+	

+	/**

+	 * The constructor

+	 */

+	public Activator() {

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance

+	 *

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+}

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Channel.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Channel.java
new file mode 100644
index 0000000..abff1c4
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Channel.java
@@ -0,0 +1,30 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat.system;

+

+public class Channel<Type> {

+	Type v;

+	String name;

+	

+	void send(Type t){

+		

+		this.v = t;

+		

+	}

+	

+	Type receive(){

+		return v;

+	}

+

+}

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Equipement.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Equipement.java
new file mode 100644
index 0000000..9df9bc8
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Equipement.java
@@ -0,0 +1,33 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat.system;

+

+public class Equipement {

+	

+	Channel<Integer> dt;

+	Channel<Integer> amount;

+	Channel<Integer> error;

+	int x;

+

+	public Equipement(Channel<Integer> dt, Channel<Integer> amount,

+			Channel<Integer> error) {

+		super();

+		this.dt = dt;

+		this.amount = amount;

+		this.error = error;

+	}

+	

+	

+	

+}

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Sensor.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Sensor.java
new file mode 100644
index 0000000..9da4b59
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Sensor.java
@@ -0,0 +1,31 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat.system;

+

+public class Sensor {

+	

+	//temperature

+	int t ;

+

+	public int getT() {

+		return t;

+	}

+

+	public void setT(int t) {

+		this.t = t;

+	}

+	

+	

+

+}

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Thermostat.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Thermostat.java
new file mode 100644
index 0000000..08be1f3
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/Thermostat.java
@@ -0,0 +1,66 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat.system;

+

+public class Thermostat implements Runnable{

+	

+	int Tmax = 20 ;

+	int Tmin = 25;

+	int t;

+	

+	Channel<Integer> sens;

+	Channel<Integer> screen;

+	Channel<Integer> dt;

+	Channel<Integer> amount;

+	Channel<Integer> error;

+	//private int y;

+	

+	public Thermostat(Channel<Integer> sens, Channel<Integer> screen, Channel<Integer> dt,

+			Channel<Integer> amount, Channel<Integer> error) {

+		super();

+		this.sens = sens;

+		this.screen = screen;

+		this.dt = dt;

+		this.amount = amount;

+		this.error = error;

+	}	

+		

+	public void run(){

+		

+		t = sens.receive();

+		

+		if (t < Tmin) {

+			dt.send(t);

+			System.out.println("dt!"+t+"\n");

+			

+		} else {

+

+		}

+		boolean equipNotDone = true;

+		while (equipNotDone){

+			try {

+				Thread.sleep (10);

+			} catch (InterruptedException e) {

+				// TODO Auto-generated catch block

+				e.printStackTrace();

+			}

+			//y = amount.receive();

+			

+		}

+		

+		

+		

+		

+	}

+}

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/ThermostatSystem.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/ThermostatSystem.java
new file mode 100644
index 0000000..9b372a6
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/system/ThermostatSystem.java
@@ -0,0 +1,285 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat.system;

+

+import java.io.BufferedReader;

+import java.io.File;

+import java.io.FileNotFoundException;

+import java.io.FileReader;

+import java.io.FileWriter;

+import java.io.IOException;

+import java.util.Vector;

+

+import org.eclipse.efm.tutorial.thermostat.utils.Couple;

+

+public class ThermostatSystem {

+		

+	static Channel<Integer> dt = new Channel<Integer>();

+	static Channel<Integer> amount = new Channel<Integer>();

+	static Channel<Integer> error = new Channel<Integer>();

+	static Channel<Integer> sens = new Channel<Integer>();

+	static Channel<Integer> screen = new Channel<Integer>();

+	

+	static Vector<Couple<Integer,Boolean>> inputTrace = new Vector<Couple<Integer,Boolean>>();

+		

+	

+	static Thermostat therm = new Thermostat(sens,screen,dt,amount,error);

+	static Equipement equip  = new Equipement(dt,amount,error);

+

+	static int delay;

+	static int t;

+

+	static int Tmin = 20;

+	static int Tmax = 25 ;

+	static int HeatingDisplay = 1 ;

+	static int CoolinggDisplay = 2 ;

+	static int StandbyDisplay = 3 ;

+	

+	public enum Mode {

+	    COOLING, HEATING, STANDBY	

+    }

+	static Mode mode = Mode.STANDBY;

+	

+	static FileReader inputTraceFile;

+	

+	static String inputTracePath;

+	

+	static String logdirName;

+	

+	static void readInputTrace(){

+		

+		

+		

+		

+		try {

+			//inputTraceFile = new FileReader("inputTrace/inputTrace.txt");

+			inputTraceFile = new FileReader(inputTracePath);

+		 

+        BufferedReader br = new BufferedReader(inputTraceFile);

+        String line;

+			

+			//System.out.println(line.toString());

+			

+			//long b = System.currentTimeMillis();

+        	

+	        while((line = br.readLine())!= null){

+	        	if (line.startsWith("TRACE NUMBER")) continue;

+	        	//String delims = "[?!]+";

+	        	String delims = "=";

+	        	String[] parts = line.split(delims);

+	        	

+	        	if (parts.length == 2){

+	        		 //case of reading a delay

+	        		inputTrace.add(new Couple<Integer, Boolean>(Integer.parseInt(parts[1].trim()),

+        					false));

+	        		

+	        	}else{

+	        		

+	        		//case of reading an input value

+	        		String strTMP = parts[0].trim();

+	        		String[] parts1 = strTMP.split("\\(");

+	        		

+	        		String[] parts2 = parts1[1].split("\\)");

+	        		

+	        		inputTrace.add(new Couple<Integer, Boolean>(Integer.parseInt(parts2[0]),

+        					true));

+	        		

+	        		

+	        	}   	 	

+	        }

+	        

+	        br.close();

+		}catch (FileNotFoundException e1) {

+				// TODO Auto-generated catch block

+				e1.printStackTrace();

+		}catch (IOException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}catch (NumberFormatException e2){

+			

+			System.out.println("Check the formatting of your input file..");

+			

+		}

+	}

+	

+

+	public static void main(String[] args) {

+		// TODO Auto-generated method stub

+		if (args.length == 2)

+			{

+	

+			inputTracePath = args[0]; // E.g. "inputTrace/inputTrace.txt"

+			logdirName = args[1]; // E.g. "outputTrace";

+		

+			readInputTrace();

+			

+			(new File(logdirName)).mkdir();

+			File logfile = new File(logdirName+"/mergeTrace.txt"); 			

+				

+				

+				    FileWriter logwriter = null;

+				    try {

+				        logwriter = new FileWriter(logfile);

+				        

+				        if (inputTrace.size() != 0){ 

+				        //System.out.printf("File is located at %s%n", logfile.getAbsolutePath());

+				        	        

+					        if (!inputTrace.firstElement().second()){

+					        	

+					        	logwriter.write("delta = "+inputTrace.firstElement().first()+"\n");

+					        	inputTrace.remove(0);

+					        }

+							

+					        for (Couple<Integer, Boolean> elemInputTrace : inputTrace) {

+								

+					        	if (elemInputTrace.second()){

+					        		therm.sens.send(elemInputTrace.first());

+					        		logwriter.write("INPUT sens("+elemInputTrace.first()+")\n");

+					        		continue;

+					        	}else{

+					        		delay = elemInputTrace.first();

+					        	}

+								t = therm.sens.receive();

+								

+								//logwriter.write("1\n");

+								

+								if (t < Tmin && (mode == Mode.HEATING || mode == Mode.STANDBY)) {	

+									

+									mode = Mode.HEATING;

+									

+																	

+									logwriter.write("delta = 1\n");

+									delay = delay-1;

+									//logwriter.write("OUTPUT screen("+mode+")\n");

+									logwriter.write("OUTPUT screen("+"1"+")\n");

+									

+									if (delay >= 1){

+									

+										delay = delay-1;

+									

+										logwriter.write("delta = 1\n");

+									

+									

+										

+										therm.dt.send(Tmin-t);

+										

+										equip.x = equip.dt.receive();

+										

+										logwriter.write("OUTPUT dt("+(Tmin-t)+")\n");

+										if (delay >= 2){

+											logwriter.write("delta = 2\n");

+											delay = delay-2;

+											

+											while (equip.x > 0){

+												equip.x = equip.x-4;

+												amount.send(4);

+												logwriter.write("OUTPUT equip("+4+")\n");

+												if (delay < 1){

+													break;

+												}

+												logwriter.write("delta = 1\n");

+												delay--;							

+											}

+										}

+										

+									}

+									

+									

+								}	

+								else{

+									if (t > Tmax && (mode == Mode.COOLING || mode == Mode.STANDBY)) {	

+										

+										mode = Mode.COOLING;

+										

+										

+										logwriter.write("delta = 1\n");

+										delay = delay-1;

+										//logwriter.write("OUTPUT screen("+mode+")\n");

+										logwriter.write("OUTPUT screen("+"2"+")\n");

+										

+										if (delay >= 1){

+											

+											delay = delay-1;

+											

+											logwriter.write("delta = 1\n");

+										

+										

+											

+											therm.dt.send(Tmax-t);

+											

+											equip.x = equip.dt.receive();

+										

+											logwriter.write("OUTPUT dt("+(Tmax-t)+")\n");

+											

+											if (delay >= 2){

+												logwriter.write("delta = 2\n");

+												delay = delay-2;

+												

+												while (equip.x < 0){

+													equip.x = equip.x+4;

+													amount.send(-4);

+													logwriter.write("OUTPUT equip("+-4+")\n");

+													if (delay < 1){

+														break;

+													}

+													logwriter.write("delta = 1\n");

+													delay--;							

+												}

+											}

+										}

+										

+									}else{ // case Tmin <= t <= Tmax

+										

+										if ((t > Tmin && mode == Mode.HEATING) || (t < Tmax && mode == Mode.COOLING)) {

+											

+											logwriter.write("delta = 1\n");

+											delay--;

+											logwriter.write("dt!0\n");

+											if(delay < 2){

+												logwriter.write("delta = 1\n");

+											}else{

+												logwriter.write("delta = 2\n");

+												delay = delay-2;

+											}

+											logwriter.write("OUTPUT equip(0)\n");

+											

+											mode = Mode.STANDBY;

+										}

+									}

+								}

+								if (delay > 0){

+									logwriter.write("delta = "+delay+"\n");

+								} if (delay <= 0) {

+									//continue;

+									break;

+								}

+					        }

+				        } 

+				        

+				        

+				        

+				    } catch (IOException e) {

+				        e.printStackTrace(); // rather declare method with throws IOException and omit this catch.

+				    } finally {

+				        if (logwriter != null) try { logwriter.close(); } catch (IOException ignore) {}

+				    }

+		    

+			

+		}

+		else

+		{

+			System.out.println("Wrong argument number.");

+		}

+	}

+}

diff --git a/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/utils/Couple.java b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/utils/Couple.java
new file mode 100644
index 0000000..33296aa
--- /dev/null
+++ b/tutorial/org.eclipse.efm.tutorial.Thermostat/src/org/eclipse/efm/tutorial/thermostat/utils/Couple.java
@@ -0,0 +1,33 @@
+/**

+ * ****************************************************************************

+ * Copyright (c) 2017 CEA LIST.

+ *

+ * 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:

+ *  Boutheina BANNOUR (CEA LIST) boutheina.bannour@gmail.com

+ *  - Initial API and implementation

+ * ****************************************************************************/

+package org.eclipse.efm.tutorial.thermostat.utils;

+public class Couple<A, B> extends java.lang.Object {

+		

+		private A a;

+		private B b;

+		

+		public Couple (A a0, B b0) {

+		    a = a0;

+		    b = b0;

+		}

+		

+		public A first() {

+		    return a;

+		}

+		

+		public B second() {

+		    return b;

+		}

+		

+	    }
\ No newline at end of file
diff --git a/tutorial/pom.xml b/tutorial/pom.xml
new file mode 100644
index 0000000..a19bce6
--- /dev/null
+++ b/tutorial/pom.xml
@@ -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>org.eclipse.efm</groupId>
+		<artifactId>org.eclipse.efm.modeling.parent</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.efm.modeling.tutorial</artifactId>
+	<packaging>pom</packaging>
+	<name>org.eclipse.efm-modeling TUTORIAL</name>
+	<description>This module contains the different plugins relative to EFM tutorials</description>
+
+	<modules>
+		<module>org.eclipse.efm.tutorial.Thermostat</module>
+	</modules>
+</project>