diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.classpath
new file mode 100644
index 00000000..098194ca
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.project
new file mode 100644
index 00000000..14a8f640
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.project
@@ -0,0 +1,28 @@
+
+
+ fr.obeo.dsl.arduino.build
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.settings/org.eclipse.jdt.core.prefs b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f42de363
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..4c69f060
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Arduino designer Build
+Bundle-SymbolicName: fr.obeo.dsl.arduino.build
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: fr.obeo.dsl.arduino.build.ArduinoBuilderActivator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ com.google.guava
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-ActivationPolicy: lazy
+Export-Package: fr.obeo.dsl.arduino.build
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/build.properties
new file mode 100644
index 00000000..34d2e4d2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/pom.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/pom.xml
new file mode 100644
index 00000000..1414810c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ 4.0.0
+
+
+ fr.obeo.dsl.arduino
+ parent
+ 1.0.0-SNAPSHOT
+ ../../releng/fr.obeo.dsl.arduino.parent
+
+
+ fr.obeo.dsl.arduino.build
+ eclipse-plugin
+
+ Cross-compilation tools for Arduino
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/src/fr/obeo/dsl/arduino/build/ArduinoBuilder.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/src/fr/obeo/dsl/arduino/build/ArduinoBuilder.java
new file mode 100644
index 00000000..10ad52c3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/src/fr/obeo/dsl/arduino/build/ArduinoBuilder.java
@@ -0,0 +1,565 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.build;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Arduino builder is used to cross-compile ino files in order to be able to
+ * execute the code on an Arduino board.
+ *
+ * @author Melanie Batsmelanie
+ * .bats@obeo.fr
+ */
+public class ArduinoBuilder {
+ private static final String WINDOWS = "win";
+
+ private static final String MACOS = "mac os";
+
+ /**
+ * Arduino SDK path.
+ */
+ private final String arduinoSdk;
+
+ /**
+ * Arduino serial port.
+ */
+ private final String serialPort;
+
+ /**
+ * Board tag.
+ */
+ private final String boardTag;
+ /**
+ * Working directory.
+ */
+ private final File directory;
+
+ /**
+ * OS.
+ */
+ private String os;
+
+ /**
+ * Arduino builder is used to cross-compile ino files in order to be able to
+ * execute the code on an Arduino board.
+ *
+ * @param arduinoSdk
+ * Path to the Arduino SDK
+ * @param boardTag
+ * Board tag
+ * @param directory
+ * Working directory
+ * @param serialPort
+ * the name of the Arduino serial port.
+ */
+ public ArduinoBuilder(String arduinoSdk, String boardTag, String directory,
+ String serialPort) {
+ this.boardTag = boardTag;
+ this.directory = new File(directory);
+ this.os = System.getProperty("os.name").toLowerCase();
+ this.arduinoSdk = getCorrectedPath(arduinoSdk, os);
+ this.serialPort = serialPort;
+ }
+
+ private static String getCorrectedPath(String arduinoSdkPath,
+ String currentOS) {
+ String path = arduinoSdkPath;
+ if (!path.endsWith(File.separator)) {
+ path += File.separator;
+ }
+ if (currentOS.contains(MACOS) && arduinoSdkPath != null
+ && !arduinoSdkPath.contains(".app")) {
+ path = path + "Arduino.app/Contents/Resources/Java/";
+ }
+ return path;
+ }
+
+ /**
+ * To test.
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ String BOARD_TAG = "uno";
+ String ARDUINO_SDK_LINUX = "/home/melanie/Obeo/dev/arduino/arduino-1.0.5/";
+ String FOLDER_LINUX = "/home/melanie/Obeo/dev/arduino/workspace_sirius/fr.obeo.dsl.arduino.build/test/";
+ String ARDUINO_SDK_MACOSX = "/Users/MpoObeo/Dev/arduino/arduino-1.0.6/Arduino/";
+ String FOLDER_MACOSX = "/Users/MpoObeo/Dev/arduino/workspace_sirius/fr.obeo.dsl.arduino.build/test/";
+ String ARDUINO_SDK_WIN = "C:\\Program Files\\Arduino\\";
+ String FOLDER_WIN = "C:\\Documents and Settings\\toto\\runtime-EclipseApplication\\test\\";
+
+ String os = System.getProperty("os.name").toLowerCase();
+ String arduinoSdk = null;
+ String folder = null;
+ String serialPort = null;
+ if (os.contains(WINDOWS)) {
+ arduinoSdk = ARDUINO_SDK_WIN;
+ folder = FOLDER_WIN;
+ serialPort= "COM3";
+ } else if (os.contains("nux")) {
+ arduinoSdk = ARDUINO_SDK_LINUX;
+ folder = FOLDER_LINUX;
+ serialPort = "/dev/ttyACM0";
+ } else if (os.contains(MACOS)) {
+ arduinoSdk = ARDUINO_SDK_MACOSX;
+ folder = FOLDER_MACOSX;
+ serialPort = "/dev/tty.usbmodem1421";
+ }
+ ArduinoBuilder builder = new ArduinoBuilder(arduinoSdk, BOARD_TAG,
+ folder, serialPort);
+ List libraries = new ArrayList();
+ libraries.add("Servo");
+ IStatus status = builder.compile("Sketch", libraries);
+ System.out.println(status);
+ }
+
+ /**
+ * Compile a sketch and its specific libraries.
+ *
+ * @param sketchName
+ * Sketch name
+ * @param libraries
+ * Specific libraries names.
+ */
+ public IStatus compile(String sketchName, List libraries) {
+
+ // Compile sketch
+ IStatus sketchStatus = compileSketch(sketchName, libraries);
+ if (sketchStatus.getSeverity() != IStatus.OK) {
+ return sketchStatus;
+ }
+
+ // Compile main libraries
+ IStatus mainLibrariesStatus = compileMainLibraries();
+ if (mainLibrariesStatus.getSeverity() != IStatus.OK) {
+ return mainLibrariesStatus;
+ }
+
+ // Compile specific libraries
+ if (libraries != null) {
+ for (String library : libraries) {
+ String libraryName = Character.toUpperCase(library.charAt(0))
+ + library.substring(1);
+ IStatus specificLibraryStatus = compileSpecificLibrary(
+ arduinoSdk + "libraries" + File.separator + libraryName
+ + File.separator, libraryName);
+ if (specificLibraryStatus.getSeverity() != IStatus.OK) {
+ return specificLibraryStatus;
+ }
+ }
+ }
+
+ // Link all
+ IStatus linkStatus = link(sketchName, libraries);
+ if (linkStatus.getSeverity() != IStatus.OK) {
+ return linkStatus;
+ }
+
+ // Generate arduino.hex
+ return generateArduinoHex();
+ }
+
+ public IStatus upload() {
+ System.out.println("Upload arduino.hex");
+ String command = arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator;
+ ProcessBuilder builder = null;
+ if (os.contains(WINDOWS)) {
+ command += "avr" + File.separator + "bin" + File.separator
+ + "avrdude.exe";
+ builder = new ProcessBuilder(command, "-q", "-V", "-p", getMMCU(),
+ "-C", arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "etc"
+ + File.separator + "avrdude.conf", "-c", "arduino",
+ "-b", "115200", "-P", serialPort, "-U", "flash:w:arduino.hex:i");
+ } else if (os.contains(MACOS)) {
+ command += "avr" + File.separator + "bin" + File.separator
+ + "avrdude";
+ builder = new ProcessBuilder(command, "-q", "-V", "-p", getMMCU(),
+ "-C", arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "etc"
+ + File.separator + "avrdude.conf", "-c", "arduino",
+ "-b", "115200", "-P", serialPort, "-U",
+ "flash:w:arduino.hex:i");
+ } else {
+ command += "avrdude";
+ builder = new ProcessBuilder(command, "-q", "-V", "-p", getMMCU(),
+ "-C", arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avrdude.conf", "-c", "arduino",
+ "-b", "115200", "-P", serialPort, "-U",
+ "flash:w:arduino.hex:i");
+ }
+ return executeCommand(directory, builder);
+ }
+
+ /**
+ * Generate arduino.hex file.
+ */
+ private IStatus generateArduinoHex() {
+ System.out.println("Generate arduino.hex");
+ String command = arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "bin"
+ + File.separator + "avr-objcopy";
+ ProcessBuilder builder = new ProcessBuilder(command, "-j", ".eeprom",
+ "--set-section-flags=.eeprom=alloc,load",
+ "--change-section-lma", ".eeprom=0", "-O", "ihex",
+ "arduino.elf", "arduino.eep");
+ executeCommand(directory, builder);
+ builder = new ProcessBuilder(command, "-O", "ihex", "-R", ".eeprom",
+ "arduino.elf", "arduino.hex");
+ return executeCommand(directory, builder);
+ }
+
+ /**
+ * Link all.
+ *
+ * @param sketchName
+ * Arduino sketch file name
+ */
+ private IStatus link(String sketchName, List libraries) {
+ System.out.println("Link all");
+ String command = arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "bin"
+ + File.separator + "avr-gcc";
+ List commands = Lists.newArrayList();
+ ProcessBuilder builder = new ProcessBuilder(commands);
+ commands.add(command);
+ commands.add("-mmcu=" + getMMCU());
+ commands.add("-Wl,--gc-sections");
+ commands.add("-Os");
+ commands.add("-o");
+ commands.add("arduino.elf");
+ commands.add(sketchName + ".o");
+ commands.add("WInterrupts.o");
+ commands.add("wiring_analog.o");
+ commands.add("wiring.o");
+ commands.add("wiring_digital.o");
+ commands.add("wiring_pulse.o");
+ commands.add("wiring_shift.o");
+ commands.add("CDC.o");
+ commands.add("HardwareSerial.o");
+ commands.add("HID.o");
+ commands.add("IPAddress.o");
+ commands.add("main.o");
+ commands.add("new.o");
+ commands.add("Print.o");
+ commands.add("Stream.o");
+ commands.add("Tone.o");
+ commands.add("USBCore.o");
+ commands.add("WMath.o");
+ commands.add("WString.o");
+ for (String library : libraries) {
+ String libraryName = Character.toUpperCase(library.charAt(0))
+ + library.substring(1);
+ commands.add(libraryName + ".o");
+ }
+ commands.add("-lc");
+ commands.add("-lm");
+ return executeCommand(directory, builder);
+ }
+
+ /**
+ * Compile specific library.
+ *
+ * @param libraryName
+ * Library name
+ */
+ private IStatus compileSpecificLibrary(String libraryPath,
+ String libraryName) {
+ System.out.println("Compile Specific Libraries");
+ return compileCPPFile(libraryPath, libraryName);
+ }
+
+ /**
+ * Compile the main Arduino libraries.
+ */
+ private IStatus compileMainLibraries() {
+ System.out.println("Compile main libraries");
+ String arduinoMainLibraryPath = arduinoSdk + "hardware"
+ + File.separator + "arduino" + File.separator + "cores"
+ + File.separator + "arduino" + File.separator;
+ IStatus status = null;
+ status = compileCFile(arduinoMainLibraryPath, "WInterrupts");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCFile(arduinoMainLibraryPath, "wiring_analog");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCFile(arduinoMainLibraryPath, "wiring");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCFile(arduinoMainLibraryPath, "wiring_digital");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCFile(arduinoMainLibraryPath, "wiring_pulse");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCFile(arduinoMainLibraryPath, "wiring_shift");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "CDC");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "HardwareSerial");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "HID");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "IPAddress");
+
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "main");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "new");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "Print");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "Stream");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "Tone");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "USBCore");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ status = compileCPPFile(arduinoMainLibraryPath, "WMath");
+ if (status.getSeverity() != IStatus.OK)
+ return status;
+ compileCPPFile(arduinoMainLibraryPath, "WString");
+ return status;
+ }
+
+ /**
+ * Compile ino file.
+ *
+ * @param filePath
+ * Path of the ino file to compile
+ */
+ private IStatus compileSketch(String fileName, List libraries) {
+ System.out.println("Compile Sketch");
+ String command = arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "bin"
+ + File.separator + "avr-g++";
+
+ if (os.contains(WINDOWS)) {
+ command += ".exe";
+ }
+ List commands = Lists.newArrayList();
+ commands.add(command);
+ commands.add("-x");
+ commands.add("c++");
+ commands.add("-include");
+ commands.add("Arduino.h");
+ commands.add("-c");
+ commands.add("-mmcu=" + getMMCU());
+ commands.add("-DF_CPU=" + getDFCPU());
+ commands.add("-DARDUINO=" + getDArduino());
+ commands.add("-I.");
+ commands.add("-I" + arduinoSdk + "hardware" + File.separator
+ + "arduino" + File.separator + "cores" + File.separator
+ + "arduino");
+ commands.add("-I" + arduinoSdk + "hardware" + File.separator
+ + "arduino" + File.separator + "variants" + File.separator
+ + "standard");
+ for (String library : libraries) {
+ String libraryName = Character.toUpperCase(library.charAt(0))
+ + library.substring(1);
+ commands.add("-I" + arduinoSdk + "libraries" + File.separator
+ + libraryName);
+ }
+ commands.add("-g");
+ commands.add("-Os");
+ commands.add("-Wall");
+ commands.add("-ffunction-sections");
+ commands.add("-fdata-sections");
+ commands.add("-fno-exceptions");
+ commands.add(fileName + ".ino");
+ commands.add("-o");
+ commands.add(fileName + ".o");
+
+ ProcessBuilder builder = new ProcessBuilder(commands);
+
+ return executeCommand(directory, builder);
+ }
+
+ /**
+ * Compile C file.
+ *
+ * @param filePath
+ * Path of the C file to compile
+ */
+ private IStatus compileCFile(String filePath, String fileName) {
+ System.out.println("Compile C file : " + filePath + fileName);
+ String command = arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "bin"
+ + File.separator + "avr-gcc";
+ if (os.contains(WINDOWS)) {
+ command += ".exe";
+ }
+ ProcessBuilder builder = new ProcessBuilder(command, "-c", "-mmcu="
+ + getMMCU(), "-DF_CPU=" + getDFCPU(), "-DARDUINO="
+ + getDArduino(), "-I.", "-I" + arduinoSdk + "hardware"
+ + File.separator + "arduino" + File.separator + "cores"
+ + File.separator + "arduino", "-I" + arduinoSdk + "hardware"
+ + File.separator + "arduino" + File.separator + "variants"
+ + File.separator + "standard", "-g", "-Os", "-Wall",
+ "-ffunction-sections", "-fdata-sections", "-std=gnu99",
+ filePath + fileName + ".c", "-o", fileName + ".o");
+ return executeCommand(directory, builder);
+ }
+
+ /**
+ * Compile CPP file.
+ *
+ * @param filePath
+ * Path of the CPP file to compile
+ */
+ private IStatus compileCPPFile(String filePath, String fileName) {
+ System.out.println("Compile CPP file : " + filePath + fileName);
+ String command = arduinoSdk + "hardware" + File.separator + "tools"
+ + File.separator + "avr" + File.separator + "bin"
+ + File.separator + "avr-g++";
+ if (os.contains(WINDOWS)) {
+ command += ".exe";
+ }
+ List commands = new ArrayList<>();
+ commands.add(command);
+ commands.add("-c");
+ commands.add("-mmcu=" + getMMCU());
+ commands.add("-DF_CPU=" + getDFCPU());
+ commands.add("-DARDUINO=" + getDArduino());
+ commands.add("-I.");
+ commands.add("-I" + arduinoSdk + "hardware" + File.separator
+ + "arduino" + File.separator + "cores" + File.separator
+ + "arduino");
+ commands.add("-I" + arduinoSdk + "hardware" + File.separator
+ + "arduino" + File.separator + "variants" + File.separator
+ + "standard");
+ commands.add("-g");
+ commands.add("-Os");
+ commands.add("-Wall");
+ commands.add("-ffunction-sections");
+ commands.add("-fdata-sections");
+ commands.add("-fno-exceptions");
+ commands.add(filePath + fileName + ".cpp");
+ commands.add("-o");
+ commands.add(fileName + ".o");
+ ProcessBuilder builder = new ProcessBuilder(commands);
+ return executeCommand(directory, builder);
+ }
+
+ /**
+ * Execute a command.
+ *
+ * @param directory
+ * Current directory
+ * @param builder
+ * Command to execute
+ */
+ private IStatus executeCommand(File directory, ProcessBuilder builder) {
+ System.out.println(builder.command());
+ builder.directory(directory);
+ try {
+ Process process = builder.start();
+ inheritIO(process.getInputStream(), System.out);
+ // inheritIO(process.getErrorStream(), System.err);
+ process.waitFor();
+ if (process.exitValue() > 0) {
+ String error = convertStreamToString(process.getErrorStream());
+ return new Status(IStatus.ERROR,
+ ArduinoBuilderActivator.PLUGIN_ID, error);
+ }
+ } catch (IOException e) {
+ return new Status(IStatus.ERROR, ArduinoBuilderActivator.PLUGIN_ID,
+ e.getMessage(), e);
+ } catch (InterruptedException e) {
+ return new Status(IStatus.ERROR, ArduinoBuilderActivator.PLUGIN_ID,
+ e.getMessage(), e);
+ }
+ return new Status(IStatus.OK, ArduinoBuilderActivator.PLUGIN_ID, null);
+ }
+
+ /**
+ * Get information from {$ARDUINO_SDK}/lib/version.txt in the Arduino SDK.
+ *
+ * @return
+ */
+ private String getDArduino() {
+ // TODO Auto-generated method stub
+ return "106";
+ }
+
+ /**
+ * Get information from {$ARDUINO_SDK}/hardware/arduino/boards.txt file in
+ * the Arduino SDK : {$BOARD_TAG}.build.mcu=xxxx.
+ *
+ * @return
+ */
+ private String getMMCU() {
+ // TODO Auto-generated method stub
+ return "atmega328p";
+ }
+
+ /**
+ * Get information from b{$ARDUINO_SDK}/hardware/arduino/boards.txtt file in
+ * the Arduino SDK : {$BOARD_TAG}.build.f_cpu=xxxx.
+ *
+ * @return
+ */
+ private String getDFCPU() {
+ // TODO Auto-generated method stub
+ return "16000000L";
+ }
+
+ /**
+ * Inherit IO in console.
+ *
+ * @param src
+ * Source stream
+ * @param dest
+ * Destination stream
+ */
+ private static void inheritIO(final InputStream src, final PrintStream dest) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ Scanner sc = new Scanner(src);
+ while (sc.hasNextLine()) {
+ dest.println(sc.nextLine());
+ }
+ sc.close();
+ }
+ }).start();
+ }
+
+ private static String convertStreamToString(java.io.InputStream is) {
+ java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
+ return s.hasNext() ? s.next() : "";
+ }
+}
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/src/fr/obeo/dsl/arduino/build/ArduinoBuilderActivator.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/src/fr/obeo/dsl/arduino/build/ArduinoBuilderActivator.java
new file mode 100644
index 00000000..f68c6bde
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.build/src/fr/obeo/dsl/arduino/build/ArduinoBuilderActivator.java
@@ -0,0 +1,77 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.build;
+
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class ArduinoBuilderActivator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "fr.obeo.dsl.arduino.build"; //$NON-NLS-1$
+
+ // The shared instance
+ private static ArduinoBuilderActivator plugin;
+
+ /**
+ * The constructor
+ */
+ public ArduinoBuilderActivator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static ArduinoBuilderActivator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * A helper to log plugin errors.
+ *
+ * @param severity
+ * the error severity.
+ * @param message
+ * the error message.
+ * @param exception
+ * the error exception.
+ */
+ public static void log(int severity, String message, Throwable exception) {
+ getDefault().getLog().log(
+ new Status(severity, PLUGIN_ID, message, exception));
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.classpath
new file mode 100644
index 00000000..39810b7d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.gitignore b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.gitignore
new file mode 100644
index 00000000..5e56e040
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.project
new file mode 100644
index 00000000..7f9b0b0c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/.project
@@ -0,0 +1,35 @@
+
+
+ fr.obeo.dsl.arduino.design
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.acceleo.ide.ui.acceleoBuilder
+
+
+
+
+
+ org.eclipse.acceleo.ide.ui.acceleoNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..d7a054a9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: fr.obeo.dsl.arduino.design
+Bundle-SymbolicName: fr.obeo.dsl.arduino.design;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: fr.obeo.dsl.arduino.design.ArduinoDesignerPlugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ fr.obeo.dsl.arduino,
+ fr.obeo.dsl.arduino.ui;bundle-version="1.0.0",
+ fr.obeo.dsl.arduino.gen,
+ org.eclipse.acceleo.engine;bundle-version="3.3.2",
+ org.eclipse.core.resources;bundle-version="3.8.1",
+ org.eclipse.emf.transaction,
+ org.eclipse.sirius;bundle-version="2.0.0",
+ org.eclipse.sirius.common.acceleo.mtl;bundle-version="2.0.0",
+ org.eclipse.sirius.ui;bundle-version="2.0.0",
+ org.eclipse.sirius.common;bundle-version="2.0.0",
+ org.eclipse.sirius.common.ui;bundle-version="2.0.0",
+ org.eclipse.sirius.diagram;bundle-version="2.0.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: com.google.common.collect
+Export-Package: fr.obeo.dsl.arduino.design,
+ fr.obeo.dsl.arduino.design.services
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/build.properties
new file mode 100644
index 00000000..a01d3679
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/build.properties
@@ -0,0 +1,12 @@
+#
+#Sun Sep 08 12:38:13 CEST 2013
+bin.includes = META-INF/,\
+ .,\
+ description/,\
+ plugin.xml,\
+ icons/,\
+ images/,\
+ resources/
+output..=bin/
+source..=src/
+customBuildCallbacks=build.acceleo
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/description/arduino.odesign b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/description/arduino.odesign
new file mode 100644
index 00000000..115ca1cf
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/description/arduino.odesign
@@ -0,0 +1,1511 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.gif
new file mode 100644
index 00000000..bb57b143
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.png
new file mode 100644
index 00000000..df1e4ae1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.svg
new file mode 100644
index 00000000..cdde7664
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Constant.svg
@@ -0,0 +1,60 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.gif
new file mode 100644
index 00000000..574dbc6e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.png
new file mode 100644
index 00000000..18b3d994
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.svg
new file mode 100644
index 00000000..add7c763
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Delay.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.gif
new file mode 100644
index 00000000..4188b14c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.png
new file mode 100644
index 00000000..06e72731
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.svg
new file mode 100644
index 00000000..797c46c9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Equal.svg
@@ -0,0 +1,64 @@
+
+
+
+image/svg+xml
+
+
+
+=
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.gif
new file mode 100644
index 00000000..a01c12aa
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.png
new file mode 100644
index 00000000..823c7411
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.svg
new file mode 100644
index 00000000..e743e9d1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Flow.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Function.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Function.png
new file mode 100644
index 00000000..bf354c2b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Function.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.gif
new file mode 100644
index 00000000..93147e5b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.png
new file mode 100644
index 00000000..a212f891
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.svg
new file mode 100644
index 00000000..bbbedf02
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/If.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.gif
new file mode 100644
index 00000000..aedb4505
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.png
new file mode 100644
index 00000000..47508a24
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.svg
new file mode 100644
index 00000000..e97d5e30
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Level.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Lower.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Lower.png
new file mode 100644
index 00000000..8cc83c40
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Lower.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Lower.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Lower.svg
new file mode 100644
index 00000000..7682c42a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Lower.svg
@@ -0,0 +1,64 @@
+
+
+
+image/svg+xml
+
+
+
+<
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/LowerOrEqual.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/LowerOrEqual.png
new file mode 100644
index 00000000..2d0aef58
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/LowerOrEqual.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/LowerOrEqual.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/LowerOrEqual.svg
new file mode 100644
index 00000000..5f54046e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/LowerOrEqual.svg
@@ -0,0 +1,65 @@
+
+
+
+image/svg+xml
+
+
+
+<=
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Minus.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Minus.png
new file mode 100644
index 00000000..dcc6f682
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Minus.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Minus.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Minus.svg
new file mode 100644
index 00000000..04833511
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Minus.svg
@@ -0,0 +1,65 @@
+
+
+
+image/svg+xml
+
+
+
+-
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.gif
new file mode 100644
index 00000000..b74ba236
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.png
new file mode 100644
index 00000000..2337805e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.svg
new file mode 100644
index 00000000..a157f23b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Module.svg
@@ -0,0 +1,51 @@
+
+
+
+image/svg+xml
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Parameter.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Parameter.png
new file mode 100644
index 00000000..dd138ced
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Parameter.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.gif
new file mode 100644
index 00000000..bff3106c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.png
new file mode 100644
index 00000000..60aa71b3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.svg
new file mode 100644
index 00000000..6b236c2c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Platform.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Plus.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Plus.png
new file mode 100644
index 00000000..239623fe
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Plus.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Plus.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Plus.svg
new file mode 100644
index 00000000..3b2867b9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Plus.svg
@@ -0,0 +1,65 @@
+
+
+
+image/svg+xml
+
+
+
++
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.gif
new file mode 100644
index 00000000..fa36f216
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.png
new file mode 100644
index 00000000..a9b7391e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.svg
new file mode 100644
index 00000000..a8c5f826
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Repeat.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.gif
new file mode 100644
index 00000000..be4c534e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.png
new file mode 100644
index 00000000..31d8f8a0
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.svg
new file mode 100644
index 00000000..9833e566
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Sensor.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.gif
new file mode 100644
index 00000000..d2a95949
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.png
new file mode 100644
index 00000000..70262351
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.svg
new file mode 100644
index 00000000..72ed503d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Set.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.gif
new file mode 100644
index 00000000..1c93efa1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.png
new file mode 100644
index 00000000..22c6bf95
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.svg
new file mode 100644
index 00000000..a98915ca
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Status.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Upper.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Upper.png
new file mode 100644
index 00000000..9d731e68
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Upper.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Upper.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Upper.svg
new file mode 100644
index 00000000..906892dd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Upper.svg
@@ -0,0 +1,64 @@
+
+
+
+image/svg+xml
+
+
+
+>
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UpperOrEqual.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UpperOrEqual.png
new file mode 100644
index 00000000..e6e65795
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UpperOrEqual.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UpperOrEqual.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UpperOrEqual.svg
new file mode 100644
index 00000000..6d786562
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UpperOrEqual.svg
@@ -0,0 +1,64 @@
+
+
+
+image/svg+xml
+
+
+
+>=
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UseFunction.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UseFunction.png
new file mode 100644
index 00000000..cb8976f0
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/UseFunction.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.gif
new file mode 100644
index 00000000..a9dec895
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.png
new file mode 100644
index 00000000..d80ad0d7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.svg
new file mode 100644
index 00000000..2241baf5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Variable.svg
@@ -0,0 +1,60 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.gif
new file mode 100644
index 00000000..22ade752
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.png
new file mode 100644
index 00000000..35758366
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.svg
new file mode 100644
index 00000000..1e1ada80
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/While.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.gif
new file mode 100644
index 00000000..b55ba122
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.png
new file mode 100644
index 00000000..e55d329f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.svg
new file mode 100644
index 00000000..03c64368
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/Wire.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/channel_16x16.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/channel_16x16.png
new file mode 100644
index 00000000..7371daf5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/channel_16x16.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/channel_32x32.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/channel_32x32.png
new file mode 100644
index 00000000..0ffd1f9d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/channel_32x32.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_16x16.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_16x16.png
new file mode 100644
index 00000000..348777e0
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_16x16.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_32x32.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_32x32.png
new file mode 100644
index 00000000..37923a7d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_32x32.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_64x64.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_64x64.png
new file mode 100644
index 00000000..811b89df
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/icons/thread_64x64.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog.png
new file mode 100644
index 00000000..38adf4de
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog.svg
new file mode 100644
index 00000000..0664fd09
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_input.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_input.png
new file mode 100644
index 00000000..081b0d5b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_input.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_input.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_input.svg
new file mode 100644
index 00000000..d5aaa78c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_input.svg
@@ -0,0 +1,59 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_output.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_output.png
new file mode 100644
index 00000000..14d96685
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_output.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_output.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_output.svg
new file mode 100644
index 00000000..483e25d7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/analog_output.svg
@@ -0,0 +1,58 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/connector.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/connector.png
new file mode 100644
index 00000000..428ff052
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/connector.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/connector.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/connector.svg
new file mode 100644
index 00000000..531f77e6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/connector.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/default.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/default.svg
new file mode 100644
index 00000000..6b236c2c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/default.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/delay.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/delay.svg
new file mode 100644
index 00000000..add7c763
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/delay.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/delete.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/delete.svg
new file mode 100644
index 00000000..e9bf6205
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/delete.svg
@@ -0,0 +1,55 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/ambient_light.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/ambient_light.jpg
new file mode 100644
index 00000000..fda1c0d4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/ambient_light.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/blue_led.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/blue_led.jpg
new file mode 100644
index 00000000..62b1f931
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/blue_led.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/buzzer.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/buzzer.jpg
new file mode 100644
index 00000000..bf42a54d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/buzzer.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/default.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/default.svg
new file mode 100644
index 00000000..6b236c2c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/default.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/dfrduino_uno.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/dfrduino_uno.jpg
new file mode 100644
index 00000000..31b5ab2f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/dfrduino_uno.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/infrared.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/infrared.jpg
new file mode 100644
index 00000000..2fa3cc15
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/infrared.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/platform.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/platform.svg
new file mode 100644
index 00000000..6b236c2c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/platform.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/push_button.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/push_button.jpg
new file mode 100644
index 00000000..a16a25a3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/push_button.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/red_led.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/red_led.jpg
new file mode 100644
index 00000000..f5a70df1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/red_led.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/rotation_sensor_v1.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/rotation_sensor_v1.jpg
new file mode 100644
index 00000000..490bc6d7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/rotation_sensor_v1.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/servo.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/servo.jpg
new file mode 100644
index 00000000..39d0590c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/servo.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/sound_sensor.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/sound_sensor.jpg
new file mode 100644
index 00000000..0e32fe36
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/sound_sensor.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/white_led.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/white_led.jpg
new file mode 100644
index 00000000..0e82573f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/dfrobot/white_led.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital.png
new file mode 100644
index 00000000..85e3a12e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital.svg
new file mode 100644
index 00000000..77327d6c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_input.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_input.png
new file mode 100644
index 00000000..0964bdca
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_input.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_input.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_input.svg
new file mode 100644
index 00000000..0d7e7ef3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_input.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_output.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_output.png
new file mode 100644
index 00000000..0d9c2b9f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_output.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_output.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_output.svg
new file mode 100644
index 00000000..c5ae6a23
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/digital_output.svg
@@ -0,0 +1,55 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_hardware.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_hardware.svg
new file mode 100644
index 00000000..0c4c32a9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_hardware.svg
@@ -0,0 +1,57 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_hardwareKit.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_hardwareKit.svg
new file mode 100644
index 00000000..e2448738
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_hardwareKit.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_sketch.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_sketch.png
new file mode 100644
index 00000000..bf264d27
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_sketch.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_sketch.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_sketch.svg
new file mode 100644
index 00000000..79e992bd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/existing_sketch.svg
@@ -0,0 +1,57 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/fan.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/fan.jpg
new file mode 100644
index 00000000..55b2e0bb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/fan.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardware.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardware.svg
new file mode 100644
index 00000000..a157f23b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardware.svg
@@ -0,0 +1,51 @@
+
+
+
+image/svg+xml
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardwareKit.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardwareKit.svg
new file mode 100644
index 00000000..85c72776
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardwareKit.svg
@@ -0,0 +1,52 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardware_invalid.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardware_invalid.svg
new file mode 100644
index 00000000..1020f4d3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/hardware_invalid.svg
@@ -0,0 +1,52 @@
+
+
+
+image/svg+xml
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/loop.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/loop.svg
new file mode 100644
index 00000000..325f5021
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/loop.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/loop_invalid.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/loop_invalid.svg
new file mode 100644
index 00000000..9c4ccbeb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/loop_invalid.svg
@@ -0,0 +1,50 @@
+
+
+
+image/svg+xml
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/music_player.jpg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/music_player.jpg
new file mode 100644
index 00000000..6f505e31
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/music_player.jpg differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/platform.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/platform.png
new file mode 100644
index 00000000..4b60253a
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/platform.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/platform.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/platform.svg
new file mode 100644
index 00000000..6b236c2c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/platform.svg
@@ -0,0 +1,56 @@
+
+
+
+image/svg+xml
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/software.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/software.svg
new file mode 100644
index 00000000..20d38f7e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/software.svg
@@ -0,0 +1,51 @@
+
+
+
+image/svg+xml
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/software_invalid.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/software_invalid.svg
new file mode 100644
index 00000000..54134814
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/software_invalid.svg
@@ -0,0 +1,52 @@
+
+
+
+image/svg+xml
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/upload.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/upload.svg
new file mode 100644
index 00000000..c7d292c7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/upload.svg
@@ -0,0 +1,53 @@
+
+
+
+image/svg+xml
+
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/upload_invalid.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/upload_invalid.svg
new file mode 100644
index 00000000..39597b32
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/images/upload_invalid.svg
@@ -0,0 +1,54 @@
+
+
+
+image/svg+xml
+
+
+
+
+
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/plugin.xml
new file mode 100644
index 00000000..8386fd1d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/plugin.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/pom.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/pom.xml
new file mode 100644
index 00000000..eba4343d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ 4.0.0
+
+
+ fr.obeo.dsl.arduino
+ parent
+ 1.0.0-SNAPSHOT
+ ../../releng/fr.obeo.dsl.arduino.parent
+
+
+ fr.obeo.dsl.arduino.design
+ eclipse-plugin
+
+ Viewpoint Based Modeler for Arduino
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/resources/ArdublockKit.arduino b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/resources/ArdublockKit.arduino
new file mode 100644
index 00000000..a8fa65d7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/resources/ArdublockKit.arduino
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/ArduinoDesignerPlugin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/ArduinoDesignerPlugin.java
new file mode 100644
index 00000000..161f4efa
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/ArduinoDesignerPlugin.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.design;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistry;
+import org.eclipse.sirius.viewpoint.description.Viewpoint;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class ArduinoDesignerPlugin extends AbstractUIPlugin {
+ // The plug-in ID
+ public static final String PLUGIN_ID = "fr.obeo.dsl.arduino.design";
+
+ // The shared instance
+ private static ArduinoDesignerPlugin plugin;
+
+ private static Set viewpoints;
+
+ /**
+ * The constructor
+ */
+ public ArduinoDesignerPlugin() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ viewpoints = new HashSet();
+ viewpoints.addAll(ViewpointRegistry.getInstance().registerFromPlugin(PLUGIN_ID + "/description/arduino.odesign"));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ if (viewpoints != null) {
+ for (final Viewpoint viewpoint: viewpoints) {
+ ViewpointRegistry.getInstance().disposeFromPlugin(viewpoint);
+ }
+ viewpoints.clear();
+ viewpoints = null;
+ }
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static ArduinoDesignerPlugin getDefault() {
+ return plugin;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/ArduinoDesignerUtils.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/ArduinoDesignerUtils.java
new file mode 100644
index 00000000..440605f8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/ArduinoDesignerUtils.java
@@ -0,0 +1,50 @@
+package fr.obeo.dsl.arduino.design;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.sirius.ui.business.api.session.IEditingSession;
+import org.eclipse.sirius.ui.business.api.session.SessionUIManager;
+
+import fr.obeo.dsl.arduino.Project;
+
+/**
+ * Utility for arduino designer.
+ *
+ * @author Yvan Lussaud
+ *
+ */
+public final class ArduinoDesignerUtils {
+
+ /**
+ * Constructor.
+ */
+ private ArduinoDesignerUtils() {
+ // nothing to do here
+ }
+
+ /**
+ * Gets the opened {@link Project}.
+ *
+ * @return the opened {@link Project} if nay, null
otherwise
+ */
+ public static Project getOpenedProject() {
+ Project res = null;
+
+ for (IEditingSession session : SessionUIManager.INSTANCE
+ .getUISessions()) {
+ for (Resource resource : session.getSession()
+ .getSemanticResources()) {
+ for (EObject eObj : resource.getContents()) {
+ if (eObj instanceof Project
+ && eObj.eResource().getURI().isPlatformResource()) {
+ res = (Project) eObj;
+ break;
+ }
+ }
+ }
+ }
+
+ return res;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/services/ArduinoServices.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/services/ArduinoServices.java
new file mode 100644
index 00000000..24d46e53
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.design/src/fr/obeo/dsl/arduino/design/services/ArduinoServices.java
@@ -0,0 +1,985 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.design.services;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.sirius.business.api.dialect.DialectManager;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.business.api.session.SessionManager;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DDiagramElement;
+import org.eclipse.sirius.diagram.DEdge;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+import org.eclipse.sirius.viewpoint.DRepresentation;
+import org.eclipse.sirius.viewpoint.DSemanticDecorator;
+import org.eclipse.sirius.viewpoint.description.RepresentationDescription;
+import org.eclipse.sirius.viewpoint.description.Viewpoint;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.BinaryExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.BooleanConstant;
+import fr.obeo.dsl.arduino.BooleanExpression;
+import fr.obeo.dsl.arduino.BooleanModuleGet;
+import fr.obeo.dsl.arduino.Constant;
+import fr.obeo.dsl.arduino.Control;
+import fr.obeo.dsl.arduino.DigitalPin;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.If;
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.IntegerConstant;
+import fr.obeo.dsl.arduino.IntegerModuleGet;
+import fr.obeo.dsl.arduino.Module;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+import fr.obeo.dsl.arduino.ModuleGet;
+import fr.obeo.dsl.arduino.ModuleInstruction;
+import fr.obeo.dsl.arduino.Pin;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.UnaryExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableAssignment;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+import fr.obeo.dsl.arduino.While;
+
+public class ArduinoServices {
+
+ private static final String IMAGES_PATH = "/fr.obeo.dsl.arduino.design/images/";
+
+ public void updateDigitalPins(ArduinoBoard platform, String totalOfPins) {
+ List pinsTmp = new ArrayList();
+ pinsTmp.addAll(platform.getDigitalPins());
+
+ int total = Integer.parseInt(totalOfPins);
+ if (total > platform.getDigitalPins().size()) {
+ // Create missing pins
+ for (int i = pinsTmp.size(); i < total; i++) {
+ DigitalPin pin = ArduinoFactory.eINSTANCE.createDigitalPin();
+ pin.setId(i);
+ platform.getDigitalPins().add(pin);
+ }
+ } else {
+ if (total > 0) {
+ // Delete the other pins
+ for (int i = total; i < pinsTmp.size(); i++) {
+ DigitalPin pin = pinsTmp.get(i);
+ EcoreUtil.delete(pin);
+ }
+ } else {
+ platform.getDigitalPins().clear();
+ }
+ }
+ }
+
+ public void updateAnalogPins(ArduinoBoard platform, String totalOfPins) {
+ List pinsTmp = new ArrayList();
+ pinsTmp.addAll(platform.getAnalogPins());
+
+ int total = Integer.parseInt(totalOfPins);
+ if (total > platform.getAnalogPins().size()) {
+ // Create missing pins
+ for (int i = pinsTmp.size(); i < total; i++) {
+ AnalogPin pin = ArduinoFactory.eINSTANCE.createAnalogPin();
+ pin.setId(i);
+ platform.getAnalogPins().add(pin);
+ }
+ } else {
+ if (total > 0) {
+ // Delete the other pins
+ for (int i = total; i < pinsTmp.size(); i++) {
+ AnalogPin pin = pinsTmp.get(i);
+ EcoreUtil.delete(pin);
+ }
+ } else {
+ platform.getAnalogPins().clear();
+ }
+ }
+ }
+
+ public Module getModule(Pin pin) {
+ Module res = null;
+ if (pin instanceof AnalogPin) {
+ res = ((AnalogPin) pin).getModule();
+ } else if (pin instanceof DigitalPin) {
+ res = ((DigitalPin) pin).getModule();
+ }
+ return res;
+ }
+
+ public String getImage(Module module) {
+// String imageName = module.getImage();
+ return getImage("");
+ }
+
+ public String getImage(ArduinoBoard platform) {
+// String imageName = platform.getImage();
+ return getImage("");
+ }
+
+ private String getImage(String imageName) {
+ if (imageName != null && imageName.length() > 0) {
+ return IMAGES_PATH + imageName;
+ }
+ return IMAGES_PATH + "default.svg";
+ }
+
+ public List getPlatforms(EObject object) {
+ List result = Lists.newArrayList();
+ Session session = SessionManager.INSTANCE.getSession(object);
+
+ for (Resource resource : session.getSemanticResources()) {
+ for (Iterator iterator = resource.getAllContents(); iterator
+ .hasNext();) {
+ EObject content = iterator.next();
+ if (content instanceof Board) {
+ result.add((Board) content);
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public List getModules(EObject object) {
+ List result = Lists.newArrayList();
+ Session session = SessionManager.INSTANCE.getSession(object);
+
+ for (Resource resource : session.getSemanticResources()) {
+ for (Iterator iterator = resource.getAllContents(); iterator
+ .hasNext();) {
+ EObject content = iterator.next();
+ if (content instanceof Module) {
+ result.add((Module) content);
+ }
+ }
+ }
+ return result;
+ }
+
+ public List getActuators(Sketch sketch) {
+ List result = new ArrayList<>();
+ List modules = ImmutableList
+ .copyOf(getConnectedModules(sketch.getProject().getBoards()));
+
+ /*for (Module module : modules) {
+ if (module instanceof Actuator) {
+ result.add(module);
+ }
+ }*/
+ return result;
+ }
+
+ public List getSensors(Sketch sketch) {
+ List result = new ArrayList<>();
+ List modules = ImmutableList
+ .copyOf(getConnectedModules(sketch.getProject().getBoards()));
+
+ /* for (Module module : modules) {
+ if (module instanceof Sensor) {
+ result.add(module);
+ }
+ }*/
+ return result;
+ }
+
+ public List getLevelModules(Sketch sketch) {
+ List result = new ArrayList();
+ //List modules = ImmutableList.copyOf(getActuators(sketch));
+
+ for(Board board : sketch.getProject().getBoards()){
+ if(board instanceof ArduinoBoard){
+ ArduinoBoard arduino = (ArduinoBoard)board;
+ for(DigitalPin pin : arduino.getDigitalPins()){
+ if (pin.getModule().isLevel()) {
+ result.add(pin.getModule());
+ }
+ }
+ for(AnalogPin pin : arduino.getAnalogPins()){
+ if (pin.getModule().isLevel()) {
+ result.add(pin.getModule());
+ }
+ }
+ }
+ }
+
+ /*for (Module module : modules) {
+ if (module.isLevel()) {
+ result.add(module);
+ }
+ }*/
+ return result;
+ }
+
+ public Sketch getSketch(EObject eObject) {
+ if (eObject instanceof Sketch) {
+ return (Sketch) eObject;
+ }
+
+ while (eObject != null && !(eObject instanceof Sketch)) {
+ eObject = eObject.eContainer();
+ }
+
+ return (Sketch) eObject;
+ }
+
+ private List getConnectedModules(Board board) {
+ List result = new ArrayList<>();
+ if (board instanceof ArduinoBoard) {
+ ArduinoBoard arduinoBoard = (ArduinoBoard) board;
+ for (AnalogPin pin : arduinoBoard.getAnalogPins()) {
+ final Module module = pin.getModule();
+ if (module != null) {
+ result.add(module);
+ }
+ }
+ for (DigitalPin pin : arduinoBoard.getDigitalPins()) {
+ final Module module = pin.getModule();
+ if (module != null) {
+ result.add(module);
+ }
+ }
+ }
+ return result;
+ }
+
+ public String computeExpressionLabel(fr.obeo.dsl.arduino.ModuleAssignment e) {
+ String label = e.getModule().getName();
+ if (e.getOperand() instanceof BooleanConstant) {
+ if (((BooleanConstant)e.getOperand()).isValue()){
+ label += " : on";
+ }else{
+ label += " : off";
+ }
+ }
+ if (e.getOperand() instanceof IntegerConstant) {
+ label += " : "+((IntegerConstant)e.getOperand()).getValue();
+ }
+ return label;
+ }
+
+ public String computeExpressionLabel(fr.obeo.dsl.arduino.Module e) {
+ String label = e.getName();
+ return label;
+ }
+
+ public String computeLinkLabel(DDiagramElement edgeLink) {
+ String label = "";
+ if (edgeLink instanceof DEdge
+ && ((DEdge) edgeLink).getTargetNode() instanceof DSemanticDecorator) {
+ EObject target = ((DSemanticDecorator) ((DEdge) edgeLink)
+ .getTargetNode()).getTarget();
+ if (target instanceof ModuleAssignment) {
+ ModuleAssignment ms = (ModuleAssignment) target;
+ if (ms.getOperand() instanceof BooleanConstant) {
+ if (((BooleanConstant)ms.getOperand()).isValue()){
+ label = "on";
+ }else{
+ label = "off";
+ }
+ }
+ }
+ }
+
+ return label;
+ }
+
+
+ public String computeLabel(Expression Expression) {
+ if (Expression instanceof Variable) {
+ return ((Variable) Expression).getName();
+ }
+ if (Expression instanceof BooleanConstant) {
+ return String.valueOf(((BooleanConstant) Expression).isValue());
+ }
+ if (Expression instanceof IntegerConstant) {
+ return String.valueOf(((IntegerConstant) Expression).getValue());
+ }
+ if (Expression instanceof ModuleGet) {
+ return "get("+((ModuleGet) Expression).getModule().getName()+")";
+ }
+ if (Expression instanceof BinaryBooleanExpression) {
+ String label = "";
+ label += computeLabel(((BinaryBooleanExpression)Expression).getLeft()) + " ";
+ label += getOperator(((BinaryBooleanExpression)Expression).getOperator());
+ label += " " + computeLabel(((BinaryBooleanExpression)Expression).getRight());
+ return label;
+ }
+ if (Expression instanceof BinaryIntegerExpression) {
+ return "(" + computeLabel(((BinaryExpression) Expression).getLeft())
+ + getOperator(((BinaryIntegerExpression) Expression).getOperator())
+ + computeLabel(((BinaryExpression) Expression).getRight()) + ")";
+ }
+ if (Expression instanceof BinaryBooleanExpression) {
+ return "(" + computeLabel(((BinaryExpression) Expression).getLeft())
+ + getOperator(((BinaryBooleanExpression) Expression).getOperator())
+ + computeLabel(((BinaryExpression) Expression).getRight()) + ")";
+ }
+
+
+ return "null";
+ }
+
+
+ public String computeLabel(While instruction) {
+ String label = "While ";
+ if (instruction.getCondition() == null){
+ label+= "null condition";
+ return label;
+ }
+ Expression cond = instruction.getCondition();
+ if (cond instanceof BinaryBooleanExpression
+ && ((BinaryBooleanExpression)instruction.getCondition()).getLeft() != null
+ && ((BinaryBooleanExpression)instruction.getCondition()).getRight() != null) {
+ label += computeLabel(((BinaryBooleanExpression)cond).getLeft()) + " ";
+ label += getOperator(((BinaryBooleanExpression)cond).getOperator());
+ label += " " + computeLabel(((BinaryBooleanExpression)cond).getRight());
+ }
+ if (cond instanceof BooleanModuleGet
+ &&
+ ((BooleanModuleGet)cond).getModule() != null) {
+ label += computeLabel(cond);
+ }
+
+ return label;
+ }
+
+ public String computeLabelOperator(BinaryIntegerOperatorKind operator) {
+ return getOperator(operator);
+ }
+ public String computeLabelOperator(BinaryBooleanOperatorKind operator) {
+ return getOperator(operator);
+ }
+ public String computeLabelOperator(UnaryIntegerOperatorKind operator) {
+ return getOperator(operator);
+ }
+ public String computeLabelOperator(UnaryBooleanOperatorKind operator) {
+ return getOperator(operator);
+ }
+
+ public String computeLabelOperator(BinaryIntegerExpression operator) {
+ return getOperator(operator.getOperator());
+ }
+ public String computeLabelOperator(BinaryBooleanExpression operator) {
+ return getOperator(operator.getOperator());
+ }
+ public String computeLabelOperator(UnaryIntegerExpression operator) {
+ return getOperator(operator.getOperator());
+ }
+ public String computeLabelOperator(UnaryBooleanExpression operator) {
+ return getOperator(operator.getOperator());
+ }
+
+ public String computeLabel(ModuleGet instruction) {
+ return instruction.getModule().getName();
+ }
+ public String computeLabel(IntegerModuleGet instruction) {
+ return instruction.getModule().getName();
+ }
+ public String computeLabel(BooleanModuleGet instruction) {
+ return instruction.getModule().getName();
+ }
+
+ public String computeLabel(If instruction) {
+ String label = "If ";
+ if (instruction.getCondition() != null) {
+ label += computeLabel(instruction.getCondition());
+ }
+ return label;
+ }
+
+ public String computeLabel(VariableAssignment set) {
+ String label = "Set ";
+ if (set.getVariable() != null && set.getOperand() != null) {
+ label += set.getVariable().getName() + " = "
+ + computeLabel(set.getOperand());
+ }
+ return label;
+ }
+
+ public String computeLabel(String operator) {
+ return getOperator(getOperator(operator));
+ }
+
+ public String getOperator(Enumerator operator) {
+ return "operator not supported";
+ }
+ public String getOperator(BinaryIntegerOperatorKind operator) {
+ switch (operator) {
+ case DIV:
+ return "/";
+ case MAX:
+ return "max";
+ case MIN:
+ return "min";
+ case MINUS:
+ return "-";
+ case MUL:
+ return "*";
+ case PLUS:
+ return "+";
+ case POURCENT:
+ return "%";
+ }
+ return null;
+ }
+
+ public String getOperator(UnaryIntegerOperatorKind operator) {
+ switch (operator) {
+ case MINUS:
+ return "-";
+ case SQUARE_ROOT:
+ return "sqrt";
+ }
+ return null;
+ }
+
+ public String getOperator(UnaryBooleanOperatorKind operator) {
+ switch (operator) {
+ case NOT:
+ return "!";
+ }
+ return null;
+ }
+
+ public String getOperator(BinaryBooleanOperatorKind operator) {
+ switch (operator) {
+ case AND:
+ return "&";
+ case DIFFERENT:
+ return "!=";
+ case EQUAL:
+ return "==";
+ case OR:
+ return "or";
+ case SUP:
+ return ">";
+ case SUP_OR_EQUAL:
+ return ">=";
+ case INF:
+ return "<";
+ case INF_OR_EQUAL:
+ return "<=";
+ }
+ return null;
+ }
+
+ public Enumerator getOperator(String operator) {
+
+ if (operator.equals("/") || operator.equals("div")) {
+ return BinaryIntegerOperatorKind.DIV;
+ }
+ if (operator.equals("max")) {
+ return BinaryIntegerOperatorKind.MAX;
+ }
+ if (operator.equals("min")) {
+ return BinaryIntegerOperatorKind.MIN;
+ }
+ if (operator.equals("-") || operator.equals("minus")) {
+ return BinaryIntegerOperatorKind.MINUS;
+ }
+ if (operator.equals("*") || operator.equals("mul")) {
+ return BinaryIntegerOperatorKind.MUL;
+ }
+ if (operator.equals("+") || operator.equals("plus")) {
+ return BinaryIntegerOperatorKind.PLUS;
+ }
+ if (operator.equals("%") || operator.equals("pourcent")) {
+ return BinaryIntegerOperatorKind.POURCENT;
+ }
+
+ if (operator.equals("&") || operator.equals("and")) {
+ return BinaryBooleanOperatorKind.AND;
+ }
+ if (operator.equals("!=") || operator.equals("diff")) {
+ return BinaryBooleanOperatorKind.DIFFERENT;
+ }
+ if (operator.equals("==") || operator.equals("equal")) {
+ return BinaryBooleanOperatorKind.EQUAL;
+ }
+ if (operator.equals("<") || operator.equals("lower")) {
+ return BinaryBooleanOperatorKind.INF;
+ }
+ if (operator.equals("<=") || operator.equals("lowerOrEqual")) {
+ return BinaryBooleanOperatorKind.INF_OR_EQUAL;
+ }
+ if (operator.equals("or")) {
+ return BinaryBooleanOperatorKind.OR;
+ }
+ if (operator.equals(">") || operator.equals("upper")) {
+ return BinaryBooleanOperatorKind.SUP;
+ }
+ if (operator.equals(">=") || operator.equals("upperOrEqual")) {
+ return BinaryBooleanOperatorKind.SUP_OR_EQUAL;
+ }
+ if (operator.equals("not")) {
+ return UnaryBooleanOperatorKind.NOT;
+ }
+
+ return null;
+ }
+
+ public Expression getExpression(Sketch sketch, String expression) {
+ if (isInteger(expression)) {
+ fr.obeo.dsl.arduino.IntegerConstant constant = ArduinoFactory.eINSTANCE
+ .createIntegerConstant();
+ constant.setValue(Integer.parseInt(expression));
+ return constant;
+ }
+ Variable var = ArduinoFactory.eINSTANCE.createIntegerVariable();
+ var.setName(expression);
+// var.setExpression("0");
+ return var;
+ }
+
+ private boolean isInteger(String s) {
+ try {
+ Integer.parseInt(s);
+ } catch (NumberFormatException e) {
+ return false;
+ }
+ return true;
+ }
+
+// public void editLabel(While instruction, Sketch sketch, String left,
+// String operator, String right) {
+// BooleanExpression condition = ((BooleanExpression)instruction.getCondition());
+// if (condition == null) {
+// condition = ArduinoFactory.eINSTANCE.createBooleanExpression();
+// sketch.getInstructions().add(condition);
+// instruction.setCondition(condition);
+// }
+//
+// Expression oldLeft = condition.getLeft();
+// Expression oldRight = condition.getRight();
+//
+// condition.setLeft(getExpression(sketch, left));
+// condition.setOperator(getOperator(operator));
+// condition.setRight(getExpression(sketch, right));
+//
+// deleteUnusedExpression(sketch, oldLeft);
+// deleteUnusedExpression(sketch, oldRight);
+// }
+
+ public void editLabel(VariableAssignment instruction, Sketch sketch, String variable,
+ String Expression) {
+ Expression oldVariable = instruction.getVariable();
+ Expression oldExpression = instruction.getOperand();
+ instruction.setVariable((Variable) getExpression(sketch, variable));
+ instruction.setOperand(getExpression(sketch, Expression));
+
+ // Clean unused Expressions
+ deleteUnusedExpression(sketch, oldVariable);
+ deleteUnusedExpression(sketch, oldExpression);
+ }
+
+ public void editLabel(Expression Expression, String newExpression) {
+
+ }
+
+ public void deleteUnusedExpressions(Sketch sketch) {
+ ImmutableList instructions = ImmutableList.copyOf(getAllInstructions(sketch));
+ for (Instruction instruction : instructions) {
+ if (instruction instanceof Expression) {
+ deleteUnusedExpression(sketch, (Expression) instruction);
+ }
+ }
+ }
+
+ private void deleteUnusedExpression(Sketch sketch, Expression Expression) {
+ if (Expression != null && isNotUsedAnymore(sketch, Expression)) {
+ EcoreUtil.delete(Expression);
+ }
+ }
+
+ private boolean isNotUsedAnymore(Sketch sketch, Expression Expression) {
+ ResourceSet resourceSet = Expression.eResource().getResourceSet();
+ ECrossReferenceAdapter adapter = new ECrossReferenceAdapter();
+ resourceSet.eAdapters().add(adapter);
+ Collection refs = adapter.getInverseReferences(Expression, true);
+ return refs.size() == 1;
+ }
+
+ public List getVariableDeclarations(EObject container) {
+ List variableDeclarations = Lists.newArrayList();
+ TreeIterator it = container.eAllContents();
+ while(it.hasNext()){
+ EObject eo = it.next();
+ if (eo instanceof VariableDeclaration){
+ variableDeclarations.add((VariableDeclaration) eo);
+ }
+ }
+ return variableDeclarations;
+ }
+
+ public EObject getConnectedPin(EObject module) {
+ return module.eContainer();
+ }
+
+
+ public Instruction getLastInstruction(Block block) {
+ List instructions = block.getInstructions();
+ if (!instructions.isEmpty()) {
+ return instructions.get(instructions.size()-1);
+ }
+ return null;
+ }
+
+ public EObject getNextInstruction(EObject current) {
+ EObject res = null;
+ if (current instanceof Instruction) {
+ Block block = (Block)current.eContainer();
+ List instructions = block.getInstructions();
+ int index = instructions.indexOf(current);
+ if (index != -1) {
+ index++;
+ if (index == instructions.size() && block instanceof Sketch) {
+ res = block;
+ } else if (index < instructions.size()) {
+ res = instructions.get(index);
+ }
+ }
+ } else if (current instanceof Sketch) {
+ List instructions = getAllInstructions((Sketch)current);
+ res = instructions.isEmpty() ? null : instructions.get(0);
+ }
+ return res;
+ }
+
+ public List getNumericalExpressions(EObject container) {
+ List expressions = Lists.newArrayList();
+ if (container instanceof VariableAssignment) {
+ Expression Expression = ((VariableAssignment) container).getOperand();
+ if (Expression instanceof BinaryIntegerExpression) {
+ expressions.add((BinaryIntegerExpression) Expression);
+ }
+ } else if (container instanceof BinaryExpression) {
+ Expression left = ((BinaryExpression) container).getLeft();
+ Expression right = ((BinaryExpression) container).getRight();
+ if (left instanceof BinaryIntegerExpression) {
+ expressions.add((BinaryIntegerExpression) left);
+ }
+ if (right instanceof BinaryIntegerExpression) {
+ expressions.add((BinaryIntegerExpression) right);
+ }
+ }
+ return expressions;
+ }
+
+ public List getModuleGets(EObject container) {
+ List moduleGetters = Lists.newArrayList();
+ if (container instanceof Sketch) {
+ List instructions = getAllInstructions((Sketch)container);
+ for (Instruction instruction : instructions) {
+ if (instruction instanceof ModuleGet) {
+ if (
+// instruction.getNext() == null ||
+ isNotUsedAnymore((Sketch) container,
+ (ModuleGet) instruction)) {
+ moduleGetters.add((ModuleGet) instruction);
+ }
+ }
+ }
+ } else if (container instanceof BinaryExpression) {
+ Expression left = ((BinaryExpression) container).getLeft();
+ Expression right = ((BinaryExpression) container).getRight();
+ if (left instanceof ModuleGet) {
+ moduleGetters.add((ModuleGet) left);
+ }
+ if (right instanceof ModuleGet) {
+ moduleGetters.add((ModuleGet) right);
+ }
+ }
+ return moduleGetters;
+ }
+
+ public List getBooleanExpressions(EObject container) {
+ List booleanExpressions = Lists.newArrayList();
+ Iterator it = container.eContents().iterator();
+ while(it.hasNext()){
+ EObject eo = it.next();
+ if (eo instanceof BooleanExpression){
+ booleanExpressions.add((BooleanExpression) eo);
+ }
+ }
+ return booleanExpressions;
+ }
+
+ public List getConstants(EObject container) {
+ List constants = Lists.newArrayList();
+ if (container instanceof VariableAssignment) {
+ Expression Expression = ((VariableAssignment) container).getOperand();
+ if (Expression instanceof Constant) {
+ constants.add((Constant) Expression);
+ }
+ }else if (container instanceof UnaryExpression) {
+ Expression Expression = ((UnaryExpression) container).getOperand();
+ if (Expression instanceof Constant) {
+ constants.add((Constant) Expression);
+ }
+ } else if (container instanceof BinaryExpression) {
+ Expression left = ((BinaryExpression) container).getLeft();
+ Expression right = ((BinaryExpression) container).getRight();
+ if (left instanceof Constant) {
+ constants.add((Constant) left);
+ }
+ if (right instanceof Constant) {
+ constants.add((Constant) right);
+ }
+ }
+ return constants;
+ }
+
+ public IntegerConstant createConstant(Sketch sketch, int expression) {
+ for (Iterator iterator = sketch.eAllContents(); iterator
+ .hasNext();) {
+ EObject object = iterator.next();
+ if (object instanceof IntegerConstant) {
+ if (((IntegerConstant) object).getValue() == expression) {
+ return (IntegerConstant) object;
+ }
+ }
+ }
+
+ IntegerConstant constant = ArduinoFactory.eINSTANCE.createIntegerConstant();
+ constant.setValue(expression);
+ return constant;
+ }
+
+ public void removeWire(Board board, Module module) {
+ if (board instanceof ArduinoBoard) {
+ boolean found = false;
+ ArduinoBoard arduinoBoard = (ArduinoBoard) board;
+ for (AnalogPin pin : arduinoBoard.getAnalogPins()) {
+ if (pin.getModule() == module) {
+ pin.setModule(null);
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ for (DigitalPin pin : arduinoBoard.getDigitalPins()) {
+ pin.setModule(null);
+ break;
+ }
+ }
+ }
+ }
+
+ public void removeWire(Board board) {
+ if (board instanceof ArduinoBoard) {
+ ArduinoBoard arduinoBoard = (ArduinoBoard) board;
+ for (AnalogPin pin : arduinoBoard.getAnalogPins()) {
+ pin.setModule(null);
+ }
+ for (DigitalPin pin : arduinoBoard.getDigitalPins()) {
+ pin.setModule(null);
+ }
+ }
+ }
+
+ public boolean isValidSketch(Project project) {
+ Sketch sketch = project.getSketch();
+ if (sketch == null) {
+ return false;
+ }
+ fr.obeo.dsl.arduino.utils.ArduinoServices service = new fr.obeo.dsl.arduino.utils.ArduinoServices();
+ return service.isValidSketch(sketch);
+ }
+
+ public boolean isValidConnector(Module module, Pin pin) {
+ boolean result = false;
+ if (pin instanceof AnalogPin) {
+ result = module instanceof ArduinoAnalogModule;
+ } else if (pin instanceof DigitalPin){
+ result = module instanceof ArduinoDigitalModule;
+ }
+ return result;
+ }
+
+ public boolean isValidHardware(Project project) {
+ return project.getBoards() != null;
+ }
+
+ public boolean isUploadable(Project project) {
+ return isValidHardware(project) && isValidSketch(project);
+ }
+
+ public String getImage(ModuleInstruction instruction) {
+ return "/fr.obeo.dsl.arduino.design/images/default.svg";
+// return "/fr.obeo.dsl.arduino.design/images/"
+// + instruction.getModule().getImage();
+ }
+
+ public String getImage(ModuleGet instruction) {
+ return "/fr.obeo.dsl.arduino.design/images/default.svg";
+// return "/fr.obeo.dsl.arduino.design/images/"
+// + instruction.getModule().getImage();
+ }
+
+ public void addVariable(Instruction container, Variable variable) {
+ if (container instanceof BinaryExpression) {
+ addMathOperatorExpression((BinaryExpression) container, variable);
+ } else if (container instanceof VariableAssignment) {
+ ((VariableAssignment) container).setVariable(variable);
+ }
+ deleteUnusedExpressions(getSketch(variable));
+ }
+
+ public void addExpression(Instruction container, Constant Expression) {
+ if (container instanceof BinaryExpression) {
+ addMathOperatorExpression((BinaryExpression) container, Expression);
+ } else if (container instanceof VariableAssignment) {
+ ((VariableAssignment) container).setOperand(Expression);
+ }
+ deleteUnusedExpressions(getSketch(Expression));
+ }
+
+ private void addMathOperatorExpression(BinaryExpression container, Expression Expression) {
+ Expression left = container.getLeft();
+ Expression right = container.getRight();
+
+ if (left == null && right == null) {
+ container.setLeft(Expression);
+ } else if (left != null && right == null) {
+ container.setRight(Expression);
+ } else if (left == null && right != null) {
+ container.setLeft(Expression);
+ } else if (left != null && right != null) {
+ container.setLeft(Expression);
+ }
+ deleteUnusedExpressions(getSketch(Expression));
+ }
+
+ public void updateExpression(Instruction container, Expression newExpression,
+ Expression oldExpression) {
+ if (container instanceof VariableAssignment) {
+ if (newExpression instanceof Variable) {
+ ((VariableAssignment) container).setVariable((Variable) newExpression);
+ } else {
+ ((VariableAssignment) container).setOperand(newExpression);
+ }
+ } else if (container instanceof BinaryExpression) {
+ Expression left = ((BinaryExpression) container).getLeft();
+ Expression right = ((BinaryExpression) container).getRight();
+ if (oldExpression.equals(left)) {
+ ((BinaryExpression) container).setLeft(newExpression);
+ } else if (oldExpression.equals(right)) {
+ ((BinaryExpression) container).setRight(newExpression);
+ }
+
+ }
+ deleteUnusedExpressions(getSketch(container));
+ }
+
+ public void openHardwareDiagram(Board hardware) {
+ Session session = SessionManager.INSTANCE.getSession(hardware);
+ DRepresentation hardwareDiagram = getBoardDiagram(hardware);
+ DialectUIManager.INSTANCE.openEditor(session, hardwareDiagram,
+ new NullProgressMonitor());
+ }
+
+ public void openSketchDiagram(Sketch sketch) {
+ Session session = SessionManager.INSTANCE.getSession(sketch);
+ DRepresentation sketchDiagram = getSketchDiagram(sketch);
+ DialectUIManager.INSTANCE.openEditor(session, sketchDiagram,
+ new NullProgressMonitor());
+ }
+
+ private RepresentationDescription getDiagramDescription(Session session,
+ String diagramDescriptionName) {
+ for (Viewpoint vp : session.getSelectedViewpoints(false)) {
+ for (RepresentationDescription representationDescription : vp
+ .getOwnedRepresentations()) {
+ if (representationDescription.getName().equals(
+ diagramDescriptionName)) {
+ return representationDescription;
+ }
+ }
+ }
+ return null;
+ }
+
+ private DRepresentation getBoardDiagram(Board board) {
+ return getDiagram(board, "Hardware", "Hardware");
+ }
+
+ private DRepresentation getSketchDiagram(Sketch sketch) {
+ return getDiagram(sketch, "Sketch", "Sketch");
+ }
+
+ private DRepresentation getDiagram(EObject semantic, String diagramName, String diagramDescriptionName) {
+ fr.obeo.dsl.arduino.utils.ArduinoServices service = new fr.obeo.dsl.arduino.utils.ArduinoServices();
+ Session session = SessionManager.INSTANCE.getSession(semantic);
+ DRepresentation diagram = service.getDiagram(session, diagramName);
+ // Create representation if does not exist
+ if (diagram == null) {
+ diagram = (DDiagram) DialectManager.INSTANCE.createRepresentation(
+ diagramName, semantic,
+ getDiagramDescription(session, diagramDescriptionName),
+ session, new NullProgressMonitor());
+ }
+
+ return diagram;
+ }
+
+ private List getAllInstructions(Sketch sketch){
+ List instructions = new ArrayList();
+ for(fr.obeo.dsl.arduino.Thread thread : sketch.getThreads()){
+ instructions.addAll(getAllInstructions(thread));
+ }
+ return instructions;
+ }
+
+ private List getAllInstructions(fr.obeo.dsl.arduino.Thread thread){
+ return thread.getBlock().getInstructions();
+ }
+
+ public List getAllInstructions(fr.obeo.dsl.arduino.Block block){
+ List instructions = new ArrayList();
+ for(Instruction insts : block.getInstructions()){
+ instructions.add(insts);
+ if(insts instanceof Control){
+ Control control = (Control)insts;
+ instructions.addAll(getAllInstructions(control.getBlock()));
+ }
+ }
+ return instructions;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/.classpath
new file mode 100644
index 00000000..858bac42
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/.project
new file mode 100644
index 00000000..81ef93d8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/.project
@@ -0,0 +1,28 @@
+
+
+ fr.obeo.dsl.arduino.edit
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..3511db89
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: fr.obeo.dsl.arduino.edit;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: fr.obeo.dsl.arduino.provider.ArduinoEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: fr.obeo.dsl.arduino.provider
+Require-Bundle: org.eclipse.core.runtime,
+ fr.obeo.dsl.arduino;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/build.properties
new file mode 100644
index 00000000..972dc84a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/build.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2013 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
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin/
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_AmbientLightSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_AmbientLightSensor.gif
new file mode 100644
index 00000000..8ab34c64
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_AmbientLightSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_MusicPlayer.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_MusicPlayer.gif
new file mode 100644
index 00000000..dbd19ede
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_MusicPlayer.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_RotationSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_RotationSensor.gif
new file mode 100644
index 00000000..28d7cba3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_RotationSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_SoundSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_SoundSensor.gif
new file mode 100644
index 00000000..bc1868f4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAnalogPin_module_SoundSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateArduinoBoard_analogPins_AnalogPin.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateArduinoBoard_analogPins_AnalogPin.gif
new file mode 100644
index 00000000..1b2d814f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateArduinoBoard_analogPins_AnalogPin.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateArduinoBoard_digitalPins_DigitalPin.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateArduinoBoard_digitalPins_DigitalPin.gif
new file mode 100644
index 00000000..f61f1983
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateArduinoBoard_digitalPins_DigitalPin.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BinaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BinaryBooleanExpression.gif
new file mode 100644
index 00000000..be505f92
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BinaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BinaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BinaryIntegerExpression.gif
new file mode 100644
index 00000000..a90e8244
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BinaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanConstant.gif
new file mode 100644
index 00000000..4ffa17e7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanModuleGet.gif
new file mode 100644
index 00000000..929686b8
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanVariable.gif
new file mode 100644
index 00000000..f7c61c23
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerConstant.gif
new file mode 100644
index 00000000..89badf28
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerModuleGet.gif
new file mode 100644
index 00000000..62e1e1ae
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerSharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerSharedResource.gif
new file mode 100644
index 00000000..ab7abfd6
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerSharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerSharedVariable.gif
new file mode 100644
index 00000000..34ee4512
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerVariable.gif
new file mode 100644
index 00000000..a92469c4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedResource.gif
new file mode 100644
index 00000000..f545273d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedVariable.gif
new file mode 100644
index 00000000..f4268885
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedVariableAccess.gif
new file mode 100644
index 00000000..5a0697e6
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_UnaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_UnaryBooleanExpression.gif
new file mode 100644
index 00000000..013290db
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_UnaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_UnaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_UnaryIntegerExpression.gif
new file mode 100644
index 00000000..7effa790
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_UnaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_VariableRef.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_VariableRef.gif
new file mode 100644
index 00000000..a92469c4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateAssignment_operand_VariableRef.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BinaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BinaryBooleanExpression.gif
new file mode 100644
index 00000000..3494d531
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BinaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BinaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BinaryIntegerExpression.gif
new file mode 100644
index 00000000..de6af47e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BinaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanConstant.gif
new file mode 100644
index 00000000..3841fcea
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanModuleGet.gif
new file mode 100644
index 00000000..671a6f16
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanVariable.gif
new file mode 100644
index 00000000..13d1a04b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerConstant.gif
new file mode 100644
index 00000000..b7274792
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerModuleGet.gif
new file mode 100644
index 00000000..88ba66a5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerSharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerSharedResource.gif
new file mode 100644
index 00000000..01d1dbbb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerSharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerSharedVariable.gif
new file mode 100644
index 00000000..3145841c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerVariable.gif
new file mode 100644
index 00000000..d68f55cf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedResource.gif
new file mode 100644
index 00000000..99f2fe57
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedVariable.gif
new file mode 100644
index 00000000..be1e90e8
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedVariableAccess.gif
new file mode 100644
index 00000000..a89d0ec2
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_UnaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_UnaryBooleanExpression.gif
new file mode 100644
index 00000000..535a30ab
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_UnaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_UnaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_UnaryIntegerExpression.gif
new file mode 100644
index 00000000..99a4283b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_UnaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_VariableRef.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_VariableRef.gif
new file mode 100644
index 00000000..d68f55cf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_left_VariableRef.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BinaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BinaryBooleanExpression.gif
new file mode 100644
index 00000000..3494d531
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BinaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BinaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BinaryIntegerExpression.gif
new file mode 100644
index 00000000..de6af47e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BinaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanConstant.gif
new file mode 100644
index 00000000..3841fcea
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanModuleGet.gif
new file mode 100644
index 00000000..671a6f16
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanVariable.gif
new file mode 100644
index 00000000..13d1a04b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerConstant.gif
new file mode 100644
index 00000000..b7274792
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerModuleGet.gif
new file mode 100644
index 00000000..88ba66a5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerSharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerSharedResource.gif
new file mode 100644
index 00000000..01d1dbbb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerSharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerSharedVariable.gif
new file mode 100644
index 00000000..3145841c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerVariable.gif
new file mode 100644
index 00000000..d68f55cf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedResource.gif
new file mode 100644
index 00000000..99f2fe57
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedVariable.gif
new file mode 100644
index 00000000..be1e90e8
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedVariableAccess.gif
new file mode 100644
index 00000000..a89d0ec2
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_UnaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_UnaryBooleanExpression.gif
new file mode 100644
index 00000000..535a30ab
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_UnaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_UnaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_UnaryIntegerExpression.gif
new file mode 100644
index 00000000..99a4283b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_UnaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_VariableRef.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_VariableRef.gif
new file mode 100644
index 00000000..d68f55cf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBinaryExpression_right_VariableRef.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_AbstractInstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_AbstractInstructionBlock.gif
new file mode 100644
index 00000000..671932c7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_AbstractInstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_InstructionBlock.gif
new file mode 100644
index 00000000..d056aafc
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_SynchronizationBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_SynchronizationBlock.gif
new file mode 100644
index 00000000..c6a162d4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_abstractInstructionBlocks_SynchronizationBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructionBlocks_InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructionBlocks_InstructionBlock.gif
new file mode 100644
index 00000000..d056aafc
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructionBlocks_InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Block.gif
new file mode 100644
index 00000000..799d63b4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Delay.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Delay.gif
new file mode 100644
index 00000000..7926c341
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Delay.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_If.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_If.gif
new file mode 100644
index 00000000..c73000c7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_If.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_ModuleAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_ModuleAssignment.gif
new file mode 100644
index 00000000..903b6817
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_ModuleAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Repeat.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Repeat.gif
new file mode 100644
index 00000000..fc17ce1f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Repeat.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Sketch.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Sketch.gif
new file mode 100644
index 00000000..22e102ff
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Sketch.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Synchonization.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Synchonization.gif
new file mode 100644
index 00000000..85753e9f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Synchonization.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Synchronization.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Synchronization.gif
new file mode 100644
index 00000000..e853fb39
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_Synchronization.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_VariableAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_VariableAssignment.gif
new file mode 100644
index 00000000..e30d6c52
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_VariableAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_VariableDeclaration.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_VariableDeclaration.gif
new file mode 100644
index 00000000..0915e408
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_VariableDeclaration.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_While.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_While.gif
new file mode 100644
index 00000000..e853fb39
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_instructions_While.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_synchronizations_Synchronization.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_synchronizations_Synchronization.gif
new file mode 100644
index 00000000..e853fb39
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateBlock_synchronizations_Synchronization.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Block.gif
new file mode 100644
index 00000000..3e644949
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_InstructionBlock.gif
new file mode 100644
index 00000000..0f9364ba
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Sketch.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Sketch.gif
new file mode 100644
index 00000000..7c9ec36d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Sketch.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Thread.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Thread.gif
new file mode 100644
index 00000000..ce9d337b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_block_Thread.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Delay.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Delay.gif
new file mode 100644
index 00000000..794791ad
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Delay.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_If.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_If.gif
new file mode 100644
index 00000000..4833facb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_If.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_ModuleAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_ModuleAssignment.gif
new file mode 100644
index 00000000..ebd55acf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_ModuleAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Repeat.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Repeat.gif
new file mode 100644
index 00000000..82fdfc3e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Repeat.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Sketch.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Sketch.gif
new file mode 100644
index 00000000..7c9ec36d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_Sketch.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_VariableAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_VariableAssignment.gif
new file mode 100644
index 00000000..49d98d93
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_VariableAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_VariableDeclaration.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_VariableDeclaration.gif
new file mode 100644
index 00000000..07f63f9f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_VariableDeclaration.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_While.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_While.gif
new file mode 100644
index 00000000..94fcc9b7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateControl_instructions_While.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_Buzzer.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_Buzzer.gif
new file mode 100644
index 00000000..53a716ee
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_Buzzer.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_Fan.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_Fan.gif
new file mode 100644
index 00000000..5c173f12
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_Fan.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_InfraRedSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_InfraRedSensor.gif
new file mode 100644
index 00000000..7e487021
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_InfraRedSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_LED.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_LED.gif
new file mode 100644
index 00000000..c565965f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_LED.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_MicroServo.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_MicroServo.gif
new file mode 100644
index 00000000..bb83437f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_MicroServo.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_PushButton.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_PushButton.gif
new file mode 100644
index 00000000..20c81ccc
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateDigitalPin_module_PushButton.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateHardware_connectors_Connector.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateHardware_connectors_Connector.gif
new file mode 100644
index 00000000..0cf5f67d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateHardware_connectors_Connector.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateIf_elseBlock_Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateIf_elseBlock_Block.gif
new file mode 100644
index 00000000..27dbe988
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateIf_elseBlock_Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateIf_elseBlock_InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateIf_elseBlock_InstructionBlock.gif
new file mode 100644
index 00000000..5a66bf41
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateIf_elseBlock_InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_Delay.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_Delay.gif
new file mode 100644
index 00000000..98a66f13
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_Delay.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_If.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_If.gif
new file mode 100644
index 00000000..7e487021
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_If.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_ModuleAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_ModuleAssignment.gif
new file mode 100644
index 00000000..a29500a4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_ModuleAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_Repeat.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_Repeat.gif
new file mode 100644
index 00000000..ea45c99e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_Repeat.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_VariableAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_VariableAssignment.gif
new file mode 100644
index 00000000..5c173f12
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_VariableAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_VariableDeclaration.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_VariableDeclaration.gif
new file mode 100644
index 00000000..b03b80a7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_VariableDeclaration.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_While.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_While.gif
new file mode 100644
index 00000000..1010ed82
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateInstructionBlock_instructions_While.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreatePlatform_analogPins_AnalogPin.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreatePlatform_analogPins_AnalogPin.gif
new file mode 100644
index 00000000..36e9ea84
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreatePlatform_analogPins_AnalogPin.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreatePlatform_digitalPins_DigitalPin.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreatePlatform_digitalPins_DigitalPin.gif
new file mode 100644
index 00000000..fb5bcb5c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreatePlatform_digitalPins_DigitalPin.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_board_ArduinoBoard.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_board_ArduinoBoard.gif
new file mode 100644
index 00000000..b822374d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_board_ArduinoBoard.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_boards_ArduinoBoard.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_boards_ArduinoBoard.gif
new file mode 100644
index 00000000..b822374d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_boards_ArduinoBoard.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_hardware_Hardware.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_hardware_Hardware.gif
new file mode 100644
index 00000000..4b44067c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_hardware_Hardware.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_links_Link.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_links_Link.gif
new file mode 100644
index 00000000..1061b8f4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_links_Link.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Actuator.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Actuator.gif
new file mode 100644
index 00000000..41eefa22
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Actuator.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_AmbientLightSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_AmbientLightSensor.gif
new file mode 100644
index 00000000..a39b7961
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_AmbientLightSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Buzzer.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Buzzer.gif
new file mode 100644
index 00000000..13449f59
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Buzzer.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Fan.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Fan.gif
new file mode 100644
index 00000000..7d4073e3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Fan.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_InfraRedSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_InfraRedSensor.gif
new file mode 100644
index 00000000..6fa04d1a
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_InfraRedSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_LED.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_LED.gif
new file mode 100644
index 00000000..a2c85842
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_LED.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_MicroServo.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_MicroServo.gif
new file mode 100644
index 00000000..80dd10a5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_MicroServo.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_MusicPlayer.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_MusicPlayer.gif
new file mode 100644
index 00000000..6fa04d1a
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_MusicPlayer.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_PushButton.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_PushButton.gif
new file mode 100644
index 00000000..3fa9c54b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_PushButton.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_RotationSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_RotationSensor.gif
new file mode 100644
index 00000000..72306dc1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_RotationSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Sensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Sensor.gif
new file mode 100644
index 00000000..cbd1b19c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_Sensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_SoundSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_SoundSensor.gif
new file mode 100644
index 00000000..0e34563c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_modules_SoundSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_platform_Platform.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_platform_Platform.gif
new file mode 100644
index 00000000..90f4828f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_platform_Platform.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_sketch_Sketch.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_sketch_Sketch.gif
new file mode 100644
index 00000000..3548c7d0
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateProject_sketch_Sketch.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSharedResource_variable_BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSharedResource_variable_BooleanVariable.gif
new file mode 100644
index 00000000..b33e855f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSharedResource_variable_BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSharedResource_variable_IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSharedResource_variable_IntegerVariable.gif
new file mode 100644
index 00000000..bdfb88b8
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSharedResource_variable_IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_block_Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_block_Block.gif
new file mode 100644
index 00000000..d4308a5e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_block_Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_block_Thread.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_block_Thread.gif
new file mode 100644
index 00000000..e75685c1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_block_Thread.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_channel_Channel.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_channel_Channel.gif
new file mode 100644
index 00000000..8ab34c64
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_channel_Channel.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_channels_Channel.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_channels_Channel.gif
new file mode 100644
index 00000000..8ab34c64
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_channels_Channel.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Delay.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Delay.gif
new file mode 100644
index 00000000..49fd29fa
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Delay.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_If.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_If.gif
new file mode 100644
index 00000000..dbd19ede
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_If.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_ModuleAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_ModuleAssignment.gif
new file mode 100644
index 00000000..f576b4f9
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_ModuleAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Repeat.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Repeat.gif
new file mode 100644
index 00000000..f018488d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Repeat.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Sketch.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Sketch.gif
new file mode 100644
index 00000000..cb3d509b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_Sketch.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_VariableAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_VariableAssignment.gif
new file mode 100644
index 00000000..f52d6a90
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_VariableAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_VariableDeclaration.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_VariableDeclaration.gif
new file mode 100644
index 00000000..d39e9f13
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_VariableDeclaration.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_While.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_While.gif
new file mode 100644
index 00000000..4e47629d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_instructions_While.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_IntegerSharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_IntegerSharedResource.gif
new file mode 100644
index 00000000..f418bb97
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_IntegerSharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_IntegerSharedVariable.gif
new file mode 100644
index 00000000..2397f66e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_SharedResource.gif
new file mode 100644
index 00000000..bcaa16d3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_SharedVariable.gif
new file mode 100644
index 00000000..e75685c1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_sharedResources_SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_threadConnectors_ThreadConnector.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_threadConnectors_ThreadConnector.gif
new file mode 100644
index 00000000..43bee183
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_threadConnectors_ThreadConnector.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_threads_Thread.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_threads_Thread.gif
new file mode 100644
index 00000000..e75685c1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateSketch_threads_Thread.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_accessors_SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_accessors_SharedVariableAccess.gif
new file mode 100644
index 00000000..95a52452
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_accessors_SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_Block.gif
new file mode 100644
index 00000000..889f3af9
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_InstructionBlock.gif
new file mode 100644
index 00000000..0f107c5f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_SynchronizationBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_SynchronizationBlock.gif
new file mode 100644
index 00000000..fac7c9b1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_block_SynchronizationBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_Block.gif
new file mode 100644
index 00000000..889f3af9
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_InstructionBlock.gif
new file mode 100644
index 00000000..0f107c5f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_SynchronizationBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_SynchronizationBlock.gif
new file mode 100644
index 00000000..fac7c9b1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateThread_blocks_SynchronizationBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BinaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BinaryBooleanExpression.gif
new file mode 100644
index 00000000..46c68606
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BinaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BinaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BinaryIntegerExpression.gif
new file mode 100644
index 00000000..258ed0ec
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BinaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanConstant.gif
new file mode 100644
index 00000000..961acc56
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanModuleGet.gif
new file mode 100644
index 00000000..b913037f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanVariable.gif
new file mode 100644
index 00000000..80c6c9e5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerConstant.gif
new file mode 100644
index 00000000..3a9f24e0
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerModuleGet.gif
new file mode 100644
index 00000000..5e689e64
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerSharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerSharedResource.gif
new file mode 100644
index 00000000..9cae865e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerSharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerSharedVariable.gif
new file mode 100644
index 00000000..f4c411ab
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerVariable.gif
new file mode 100644
index 00000000..b325c758
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedResource.gif
new file mode 100644
index 00000000..cc494d4c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedVariable.gif
new file mode 100644
index 00000000..b7e2f30c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedVariableAccess.gif
new file mode 100644
index 00000000..81084b9c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_UnaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_UnaryBooleanExpression.gif
new file mode 100644
index 00000000..da2473bc
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_UnaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_UnaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_UnaryIntegerExpression.gif
new file mode 100644
index 00000000..bccc6769
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_UnaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_VariableRef.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_VariableRef.gif
new file mode 100644
index 00000000..b325c758
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateUnaryExpression_operand_VariableRef.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_BooleanVariable.gif
new file mode 100644
index 00000000..9c4e0af1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_IntegerSharedVariable.gif
new file mode 100644
index 00000000..f5be1558
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_IntegerVariable.gif
new file mode 100644
index 00000000..205071f2
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedResource.gif
new file mode 100644
index 00000000..2dde1a2a
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedVariable.gif
new file mode 100644
index 00000000..78987b08
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedVariableAccess.gif
new file mode 100644
index 00000000..7f00aa63
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/ctool16/CreateVariableDeclaration_variable_SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AbstractInstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AbstractInstructionBlock.gif
new file mode 100644
index 00000000..59155918
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AbstractInstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Actuator.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Actuator.gif
new file mode 100644
index 00000000..be22463d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Actuator.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AmbientLightSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AmbientLightSensor.gif
new file mode 100644
index 00000000..b1f8afa4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AmbientLightSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AnalogPin.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AnalogPin.gif
new file mode 100644
index 00000000..90415988
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/AnalogPin.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ArduinoBoard.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ArduinoBoard.gif
new file mode 100644
index 00000000..c00aedf4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ArduinoBoard.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BinaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BinaryBooleanExpression.gif
new file mode 100644
index 00000000..106881e5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BinaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BinaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BinaryIntegerExpression.gif
new file mode 100644
index 00000000..e4bc22dd
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BinaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Block.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Block.gif
new file mode 100644
index 00000000..89ad5da3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Block.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanConstant.gif
new file mode 100644
index 00000000..badaab06
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanExpression.gif
new file mode 100644
index 00000000..ea58a657
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanModuleGet.gif
new file mode 100644
index 00000000..53500daf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanVariable.gif
new file mode 100644
index 00000000..4365960a
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/BooleanVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Buzzer.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Buzzer.gif
new file mode 100644
index 00000000..c3370c7d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Buzzer.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Channel.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Channel.gif
new file mode 100644
index 00000000..720aa96e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Channel.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Connector.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Connector.gif
new file mode 100644
index 00000000..ed874747
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Connector.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Constant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Constant.gif
new file mode 100644
index 00000000..a26660ec
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Constant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Delay.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Delay.gif
new file mode 100644
index 00000000..be22463d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Delay.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/DigitalPin.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/DigitalPin.gif
new file mode 100644
index 00000000..106881e5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/DigitalPin.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Fan.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Fan.gif
new file mode 100644
index 00000000..30f0c48d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Fan.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Hardware.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Hardware.gif
new file mode 100644
index 00000000..db7414e9
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Hardware.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/If.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/If.gif
new file mode 100644
index 00000000..7b7c428c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/If.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/InfraRedSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/InfraRedSensor.gif
new file mode 100644
index 00000000..7b7c428c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/InfraRedSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/InstructionBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/InstructionBlock.gif
new file mode 100644
index 00000000..9538e2e3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/InstructionBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerConstant.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerConstant.gif
new file mode 100644
index 00000000..48e3cf22
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerConstant.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerModuleGet.gif
new file mode 100644
index 00000000..afb82ea4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerSharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerSharedResource.gif
new file mode 100644
index 00000000..59155918
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerSharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerSharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerSharedVariable.gif
new file mode 100644
index 00000000..cb1755a7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerSharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerVariable.gif
new file mode 100644
index 00000000..c673a520
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/IntegerVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/LED.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/LED.gif
new file mode 100644
index 00000000..c414fe9f
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/LED.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Link.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Link.gif
new file mode 100644
index 00000000..89ad5da3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Link.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/MicroServo.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/MicroServo.gif
new file mode 100644
index 00000000..c4a8af41
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/MicroServo.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ModuleAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ModuleAssignment.gif
new file mode 100644
index 00000000..c4fb30e9
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ModuleAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ModuleGet.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ModuleGet.gif
new file mode 100644
index 00000000..b3643da0
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ModuleGet.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/MusicPlayer.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/MusicPlayer.gif
new file mode 100644
index 00000000..7b7c428c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/MusicPlayer.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Platform.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Platform.gif
new file mode 100644
index 00000000..33a997a1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Platform.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Project.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Project.gif
new file mode 100644
index 00000000..7bac4fd3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Project.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/PushButton.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/PushButton.gif
new file mode 100644
index 00000000..9250fecb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/PushButton.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Repeat.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Repeat.gif
new file mode 100644
index 00000000..134551bf
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Repeat.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/RotationSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/RotationSensor.gif
new file mode 100644
index 00000000..05dc74ad
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/RotationSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Sensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Sensor.gif
new file mode 100644
index 00000000..7bac4fd3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Sensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedResource.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedResource.gif
new file mode 100644
index 00000000..7bac4fd3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedResource.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedVariable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedVariable.gif
new file mode 100644
index 00000000..c4a8af41
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedVariable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedVariableAccess.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedVariableAccess.gif
new file mode 100644
index 00000000..33854e98
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SharedVariableAccess.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Sketch.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Sketch.gif
new file mode 100644
index 00000000..90415988
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Sketch.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SoundSensor.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SoundSensor.gif
new file mode 100644
index 00000000..afb82ea4
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SoundSensor.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Synchonization.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Synchonization.gif
new file mode 100644
index 00000000..8a5c70cb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Synchonization.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Synchronization.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Synchronization.gif
new file mode 100644
index 00000000..35ef84e2
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Synchronization.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SynchronizationBlock.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SynchronizationBlock.gif
new file mode 100644
index 00000000..4ab82231
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/SynchronizationBlock.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Thread.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Thread.gif
new file mode 100644
index 00000000..a36b03c7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Thread.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ThreadConnector.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ThreadConnector.gif
new file mode 100644
index 00000000..14af8aae
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/ThreadConnector.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/UnaryBooleanExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/UnaryBooleanExpression.gif
new file mode 100644
index 00000000..739ebbfa
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/UnaryBooleanExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/UnaryIntegerExpression.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/UnaryIntegerExpression.gif
new file mode 100644
index 00000000..1e5345fb
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/UnaryIntegerExpression.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Variable.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Variable.gif
new file mode 100644
index 00000000..83afb9b3
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/Variable.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableAssignment.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableAssignment.gif
new file mode 100644
index 00000000..30f0c48d
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableAssignment.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableDeclaration.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableDeclaration.gif
new file mode 100644
index 00000000..48e3cf22
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableDeclaration.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableRef.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableRef.gif
new file mode 100644
index 00000000..c673a520
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/VariableRef.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/While.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/While.gif
new file mode 100644
index 00000000..35ef84e2
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/icons/full/obj16/While.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/plugin.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/plugin.properties
new file mode 100644
index 00000000..f3267baa
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/plugin.properties
@@ -0,0 +1,243 @@
+# Copyright (c) 2013 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
+
+pluginName = Arduino Edit Support
+providerName = www.example.org
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_Hardware_type = Hardware
+_UI_Platform_type = Platform
+_UI_Module_type = Module
+_UI_DigitalPin_type = Digital Pin
+_UI_Pin_type = Pin
+_UI_AnalogPin_type = Analog Pin
+_UI_Sketch_type = Sketch
+_UI_Project_type = Project
+_UI_Instruction_type = Instruction
+_UI_ModuleAssignment_type = Module Assignment
+_UI_ModuleInstruction_type = Module Instruction
+_UI_Control_type = Control
+_UI_Utilities_type = Utilities
+_UI_Delay_type = Delay
+_UI_Sensor_type = Sensor
+_UI_Actuator_type = Actuator
+_UI_NamedElement_type = Named Element
+_UI_Connector_type = Connector
+_UI_Repeat_type = Repeat
+_UI_ModuleGet_type = Module Get
+_UI_While_type = While
+_UI_BinaryExpression_type = Binary Expression
+_UI_Variable_type = Variable
+_UI_VariableAssignment_type = Variable Assignment
+_UI_BinaryIntegerExpression_type = Binary Integer Expression
+_UI_BinaryBooleanExpression_type = Binary Boolean Expression
+_UI_Expression_type = Expression
+_UI_Constant_type = Constant
+_UI_If_type = If
+_UI_IntegerConstant_type = Integer Constant
+_UI_BooleanConstant_type = Boolean Constant
+_UI_BooleanExpression_type = Boolean Expression
+_UI_IntegerExpression_type = Integer Expression
+_UI_Assignment_type = Assignment
+_UI_IntegerVariable_type = Integer Variable
+_UI_BooleanVariable_type = Boolean Variable
+_UI_BooleanModuleGet_type = Boolean Module Get
+_UI_IntegerModuleGet_type = Integer Module Get
+_UI_UnaryExpression_type = Unary Expression
+_UI_UnaryBooleanExpression_type = Unary Boolean Expression
+_UI_UnaryIntegerExpression_type = Unary Integer Expression
+_UI_VariableDeclaration_type = Variable Declaration
+_UI_VariableRef_type = Variable Ref
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_Hardware_platforms_feature = Platforms
+_UI_Hardware_modules_feature = Modules
+_UI_Hardware_connectors_feature = Connectors
+_UI_Platform_digitalPins_feature = Digital Pins
+_UI_Platform_analogPins_feature = Analog Pins
+_UI_Platform_image_feature = Image
+_UI_Module_kind_feature = Kind
+_UI_Module_image_feature = Image
+_UI_Module_level_feature = Level
+_UI_Module_library_feature = Library
+_UI_Pin_id_feature = Id
+_UI_Pin_level_feature = Level
+_UI_Sketch_hardware_feature = Hardware
+_UI_Sketch_instructions_feature = Instructions
+_UI_Project_hardware_feature = Hardware
+_UI_Project_sketch_feature = Sketch
+_UI_Project_modules_feature = Modules
+_UI_Project_platform_feature = Platform
+_UI_Instruction_previous_feature = Previous
+_UI_Instruction_next_feature = Next
+_UI_ModuleInstruction_module_feature = Module
+_UI_Control_instructions_feature = Instructions
+_UI_Delay_unit_feature = Unit
+_UI_Delay_value_feature = Value
+_UI_NamedElement_name_feature = Name
+_UI_Connector_pin_feature = Pin
+_UI_Connector_module_feature = Module
+_UI_Repeat_iteration_feature = Iteration
+_UI_ModuleGet_module_feature = Module
+_UI_While_condition_feature = Condition
+_UI_BinaryExpression_left_feature = Left
+_UI_BinaryExpression_right_feature = Right
+_UI_VariableAssignment_variable_feature = Variable
+_UI_BinaryIntegerExpression_operator_feature = Operator
+_UI_BinaryBooleanExpression_operator_feature = Operator
+_UI_If_condition_feature = Condition
+_UI_IntegerConstant_value_feature = Value
+_UI_BooleanConstant_value_feature = Value
+_UI_Assignment_operand_feature = Operand
+_UI_IntegerVariable_initialValue_feature = Initial Value
+_UI_IntegerVariable_value_feature = Value
+_UI_BooleanVariable_initialValue_feature = Initial Value
+_UI_BooleanVariable_value_feature = Value
+_UI_UnaryExpression_operand_feature = Operand
+_UI_UnaryBooleanExpression_operator_feature = Operator
+_UI_UnaryIntegerExpression_operator_feature = Operator
+_UI_VariableDeclaration_variable_feature = Variable
+_UI_VariableRef_variable_feature = Variable
+_UI_Unknown_feature = Unspecified
+
+_UI_Time_MilliSecond_literal = MilliSecond
+_UI_Time_MicroSecond_literal = MicroSecond
+_UI_ModuleKind_digital_literal = digital
+_UI_ModuleKind_analog_literal = analog
+_UI_BinaryIntegerOperatorKind_minus_literal = minus
+_UI_BinaryIntegerOperatorKind_plus_literal = plus
+_UI_BinaryIntegerOperatorKind_mul_literal = mul
+_UI_BinaryIntegerOperatorKind_div_literal = div
+_UI_BinaryIntegerOperatorKind_min_literal = min
+_UI_BinaryIntegerOperatorKind_max_literal = max
+_UI_BinaryIntegerOperatorKind_pourcent_literal = pourcent
+_UI_Library_none_literal = none
+_UI_Library_servo_literal = servo
+_UI_Library_music_literal = music
+_UI_BinaryBooleanOperatorKind_inf_literal = inf
+_UI_BinaryBooleanOperatorKind_sup_literal = sup
+_UI_BinaryBooleanOperatorKind_infOrEqual_literal = infOrEqual
+_UI_BinaryBooleanOperatorKind_supOrEqual_literal = supOrEqual
+_UI_BinaryBooleanOperatorKind_equal_literal = equal
+_UI_BinaryBooleanOperatorKind_and_literal = and
+_UI_BinaryBooleanOperatorKind_or_literal = or
+_UI_BinaryBooleanOperatorKind_Different_literal = Different
+_UI_UnaryIntegerOperatorKind_minus_literal = minus
+_UI_UnaryIntegerOperatorKind_squareRoot_literal = squareRoot
+_UI_UnaryBooleanOperatorKind_not_literal = not
+_UI_LED_type = LED
+_UI_PushButton_type = Push Button
+_UI_Buzzer_type = Buzzer
+_UI_RotationSensor_type = Rotation Sensor
+_UI_MicroServo_type = Micro Servo
+_UI_InfraRedSensor_type = Infra Red Sensor
+_UI_AmbientLightSensor_type = Ambient Light Sensor
+_UI_SoundSensor_type = Sound Sensor
+_UI_Fan_type = Fan
+_UI_MusicPlayer_type = Music Player
+_UI_Board_type = Board
+_UI_ArduinoModule_type = Module
+_UI_Block_type = Block
+_UI_ArduinoBoard_type = Board
+_UI_ArduinoDigitalModule_type = Digital Module
+_UI_ArduinoAnalogModule_type = Analog Module
+_UI_DigitalPin_module_feature = Module
+_UI_AnalogPin_module_feature = Module
+_UI_Project_board_feature = Board
+_UI_Control_block_feature = Block
+_UI_Block_instructions_feature = Instructions
+_UI_ArduinoBoard_digitalPins_feature = Digital Pins
+_UI_ArduinoBoard_analogPins_feature = Analog Pins
+_UI_Board_project_feature = Project
+_UI_Sketch_project_feature = Project
+_UI_Sketch_block_feature = Block
+_UI_Thread_type = Thread
+_UI_SharedResource_type = Shared Resource
+_UI_SharedResource_isLocked_feature = Is Locked
+_UI_Sketch_threads_feature = Threads
+_UI_Sketch_sharedResources_feature = Shared Resources
+_UI_Thread_blocks_feature = Blocks
+_UI_Thread_block_feature = Block
+_UI_SharedResource_variable_feature = Variable
+_UI_SharedVariable_type = Shared Variable
+_UI_IntegerSharedVariable_type = Integer Shared Variable
+_UI_SharedVariable_isLocked_feature = Is Locked
+_UI_Instruction_block_feature = Block
+_UI_Block_thread_feature = Thread
+_UI_IntegerSharedResource_type = Integer Shared Resource
+_UI_Thread_externalResources_feature = External Resources
+_UI_SharedResource_threads_feature = Threads
+_UI_SharedVariable_threads_feature = Threads
+_UI_SharedVariableAccess_type = Shared Variable Access
+_UI_SharedVariableAccess_sharedVariable_feature = Shared Variable
+_UI_Thread_accessors_feature = Accessors
+_UI_ThreadConnector_type = Thread Connector
+_UI_Sketch_threadConnectors_feature = Thread Connectors
+_UI_Thread_threadConnectors_feature = Thread Connectors
+_UI_ThreadConnector_inThread_feature = In Thread
+_UI_ThreadConnector_outThread_feature = Out Thread
+_UI_Channel_type = Channel
+_UI_Sketch_channel_feature = Channel
+_UI_Thread_channels_feature = Channels
+_UI_Channel_inThread_feature = In Thread
+_UI_Channel_outThread_feature = Out Thread
+_UI_Channel_inRate_feature = In Rate
+_UI_Channel_outRate_feature = Out Rate
+_UI_Thread_cycles_feature = Cycles
+_UI_Channel_capacity_feature = Capacity
+_UI_Channel_currentSize_feature = Current Size
+_UI_Board_threads_feature = Threads
+_UI_DigitalPin_board_feature = Board
+_UI_AnalogPin_board_feature = Board
+_UI_ArduinoDigitalModule_pin_feature = Pin
+_UI_ArduinoAnalogModule_pin_feature = Pin
+_UI_Channel_source_feature = Source
+_UI_Channel_target_feature = Target
+_UI_Sketch_channels_feature = Channels
+_UI_Project_boards_feature = Boards
+_UI_Instruction_ownedBlock_feature = Owned Block
+_UI_Link_type = Link
+_UI_Synchonization_type = Synchonization
+_UI_Project_links_feature = Links
+_UI_Thread_currentInstruction_feature = Current Instruction
+_UI_Link_inBoard_feature = In Board
+_UI_Link_outBoard_feature = Out Board
+_UI_If_elseBlock_feature = Else Block
+_UI_Synchronization_type = Synchronization
+_UI_InstructionBlock_type = Instruction Block
+_UI_Block_instructionBlocks_feature = Instruction Blocks
+_UI_Block_synchronizations_feature = Synchronizations
+_UI_Synchronization_instruction_feature = Instruction
+_UI_InstructionBlock_instructions_feature = Instructions
+_UI_InstructionBlock_sync_feature = Sync
+_UI_SynchronizationBlock_type = Synchronization Block
+_UI_AbstractInstructionBlock_type = Abstract Instruction Block
+_UI_Block_abstractInstructionBlocks_feature = Abstract Instruction Blocks
+_UI_SynchronizationBlock_next_feature = Next
+_UI_SynchronizationBlock_previous_feature = Previous
+_UI_InstructionBlock_next_feature = Next
+_UI_InstructionBlock_previous_feature = Previous
+_UI_ThreadInstructionBlock_type = Thread Instruction Block
+_UI_ThreadInstructionBlock_thread_feature = Thread
+_UI_Thread_first_feature = First
+_UI_Thread_last_feature = Last
+_UI_ThreadInstructionBlock_next_feature = Next
+_UI_Link_channels_feature = Channels
+_UI_Thread_cycle_feature = Cycle
+_UI_Thread_nbCycle_feature = Nb Cycle
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/plugin.xml
new file mode 100644
index 00000000..5bafca0c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/plugin.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AmbientLightSensorItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AmbientLightSensorItemProvider.java
new file mode 100644
index 00000000..b70265af
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AmbientLightSensorItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.AmbientLightSensor;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.AmbientLightSensor} object.
+ *
+ *
+ * @generated
+ */
+public class AmbientLightSensorItemProvider extends ArduinoAnalogModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public AmbientLightSensorItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns AmbientLightSensor.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/AmbientLightSensor"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AmbientLightSensor)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AmbientLightSensor_type") :
+ getString("_UI_AmbientLightSensor_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AnalogPinItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AnalogPinItemProvider.java
new file mode 100644
index 00000000..d7cf93d3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AnalogPinItemProvider.java
@@ -0,0 +1,166 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.AnalogPin} object.
+ *
+ *
+ * @generated
+ */
+public class AnalogPinItemProvider extends PinItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public AnalogPinItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.ANALOG_PIN__MODULE);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns AnalogPin.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/AnalogPin"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ AnalogPin analogPin = (AnalogPin)object;
+ return getString("_UI_AnalogPin_type") + " " + analogPin.getId();
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(AnalogPin.class)) {
+ case ArduinoPackage.ANALOG_PIN__MODULE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ANALOG_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createRotationSensor()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ANALOG_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createAmbientLightSensor()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ANALOG_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createSoundSensor()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ANALOG_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createMusicPlayer()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoAnalogModuleItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoAnalogModuleItemProvider.java
new file mode 100644
index 00000000..44b74537
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoAnalogModuleItemProvider.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ArduinoAnalogModule} object.
+ *
+ *
+ * @generated
+ */
+public class ArduinoAnalogModuleItemProvider extends ArduinoModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ArduinoAnalogModuleItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ArduinoAnalogModule)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ArduinoAnalogModule_type") :
+ getString("_UI_ArduinoAnalogModule_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoBoardItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoBoardItemProvider.java
new file mode 100644
index 00000000..05642608
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoBoardItemProvider.java
@@ -0,0 +1,160 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ArduinoBoard} object.
+ *
+ *
+ * @generated
+ */
+public class ArduinoBoardItemProvider extends BoardItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ArduinoBoardItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.ARDUINO_BOARD__DIGITAL_PINS);
+ childrenFeatures.add(ArduinoPackage.Literals.ARDUINO_BOARD__ANALOG_PINS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns ArduinoBoard.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ArduinoBoard"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ArduinoBoard)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ArduinoBoard_type") :
+ getString("_UI_ArduinoBoard_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(ArduinoBoard.class)) {
+ case ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS:
+ case ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ARDUINO_BOARD__DIGITAL_PINS,
+ ArduinoFactory.eINSTANCE.createDigitalPin()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ARDUINO_BOARD__ANALOG_PINS,
+ ArduinoFactory.eINSTANCE.createAnalogPin()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoDigitalModuleItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoDigitalModuleItemProvider.java
new file mode 100644
index 00000000..cad1f28d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoDigitalModuleItemProvider.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ArduinoDigitalModule} object.
+ *
+ *
+ * @generated
+ */
+public class ArduinoDigitalModuleItemProvider extends ArduinoModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ArduinoDigitalModuleItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ArduinoDigitalModule)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ArduinoDigitalModule_type") :
+ getString("_UI_ArduinoDigitalModule_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoEditPlugin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoEditPlugin.java
new file mode 100644
index 00000000..fe6061cb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoEditPlugin.java
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Arduino edit plugin.
+ *
+ *
+ * @generated
+ */
+public final class ArduinoEditPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ *
+ *
+ * @generated
+ */
+ public static final ArduinoEditPlugin INSTANCE = new ArduinoEditPlugin();
+
+ /**
+ * Keep track of the singleton.
+ *
+ *
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ *
+ *
+ * @generated
+ */
+ public ArduinoEditPlugin() {
+ super
+ (new ResourceLocator [] {
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ *
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ *
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse Plugin .
+ *
+ *
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin {
+ /**
+ * Creates an instance.
+ *
+ *
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoItemProviderAdapterFactory.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoItemProviderAdapterFactory.java
new file mode 100644
index 00000000..8f5a446a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoItemProviderAdapterFactory.java
@@ -0,0 +1,1095 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+import fr.obeo.dsl.arduino.util.ArduinoAdapterFactory;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ *
+ *
+ * @generated
+ */
+public class ArduinoItemProviderAdapterFactory extends ArduinoAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+ /**
+ * This keeps track of the root adapter factory that delegates to this adapter factory.
+ *
+ *
+ * @generated
+ */
+ protected ComposedAdapterFactory parentAdapterFactory;
+
+ /**
+ * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+ *
+ *
+ * @generated
+ */
+ protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+ /**
+ * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+ *
+ *
+ * @generated
+ */
+ protected Collection supportedTypes = new ArrayList();
+
+ /**
+ * This constructs an instance.
+ *
+ *
+ * @generated
+ */
+ public ArduinoItemProviderAdapterFactory() {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.DigitalPin} instances.
+ *
+ *
+ * @generated
+ */
+ protected DigitalPinItemProvider digitalPinItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.DigitalPin}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createDigitalPinAdapter() {
+ if (digitalPinItemProvider == null) {
+ digitalPinItemProvider = new DigitalPinItemProvider(this);
+ }
+
+ return digitalPinItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.AnalogPin} instances.
+ *
+ *
+ * @generated
+ */
+ protected AnalogPinItemProvider analogPinItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.AnalogPin}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createAnalogPinAdapter() {
+ if (analogPinItemProvider == null) {
+ analogPinItemProvider = new AnalogPinItemProvider(this);
+ }
+
+ return analogPinItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Sketch} instances.
+ *
+ *
+ * @generated
+ */
+ protected SketchItemProvider sketchItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Sketch}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createSketchAdapter() {
+ if (sketchItemProvider == null) {
+ sketchItemProvider = new SketchItemProvider(this);
+ }
+
+ return sketchItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Project} instances.
+ *
+ *
+ * @generated
+ */
+ protected ProjectItemProvider projectItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Project}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createProjectAdapter() {
+ if (projectItemProvider == null) {
+ projectItemProvider = new ProjectItemProvider(this);
+ }
+
+ return projectItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.ModuleAssignment} instances.
+ *
+ *
+ * @generated
+ */
+ protected ModuleAssignmentItemProvider moduleAssignmentItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.ModuleAssignment}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createModuleAssignmentAdapter() {
+ if (moduleAssignmentItemProvider == null) {
+ moduleAssignmentItemProvider = new ModuleAssignmentItemProvider(this);
+ }
+
+ return moduleAssignmentItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Delay} instances.
+ *
+ *
+ * @generated
+ */
+ protected DelayItemProvider delayItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Delay}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createDelayAdapter() {
+ if (delayItemProvider == null) {
+ delayItemProvider = new DelayItemProvider(this);
+ }
+
+ return delayItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Repeat} instances.
+ *
+ *
+ * @generated
+ */
+ protected RepeatItemProvider repeatItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Repeat}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createRepeatAdapter() {
+ if (repeatItemProvider == null) {
+ repeatItemProvider = new RepeatItemProvider(this);
+ }
+
+ return repeatItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.While} instances.
+ *
+ *
+ * @generated
+ */
+ protected WhileItemProvider whileItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.While}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createWhileAdapter() {
+ if (whileItemProvider == null) {
+ whileItemProvider = new WhileItemProvider(this);
+ }
+
+ return whileItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.VariableAssignment} instances.
+ *
+ *
+ * @generated
+ */
+ protected VariableAssignmentItemProvider variableAssignmentItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.VariableAssignment}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createVariableAssignmentAdapter() {
+ if (variableAssignmentItemProvider == null) {
+ variableAssignmentItemProvider = new VariableAssignmentItemProvider(this);
+ }
+
+ return variableAssignmentItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.BinaryIntegerExpression} instances.
+ *
+ *
+ * @generated
+ */
+ protected BinaryIntegerExpressionItemProvider binaryIntegerExpressionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.BinaryIntegerExpression}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createBinaryIntegerExpressionAdapter() {
+ if (binaryIntegerExpressionItemProvider == null) {
+ binaryIntegerExpressionItemProvider = new BinaryIntegerExpressionItemProvider(this);
+ }
+
+ return binaryIntegerExpressionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.BinaryBooleanExpression} instances.
+ *
+ *
+ * @generated
+ */
+ protected BinaryBooleanExpressionItemProvider binaryBooleanExpressionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.BinaryBooleanExpression}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createBinaryBooleanExpressionAdapter() {
+ if (binaryBooleanExpressionItemProvider == null) {
+ binaryBooleanExpressionItemProvider = new BinaryBooleanExpressionItemProvider(this);
+ }
+
+ return binaryBooleanExpressionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.If} instances.
+ *
+ *
+ * @generated
+ */
+ protected IfItemProvider ifItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.If}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createIfAdapter() {
+ if (ifItemProvider == null) {
+ ifItemProvider = new IfItemProvider(this);
+ }
+
+ return ifItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.IntegerConstant} instances.
+ *
+ *
+ * @generated
+ */
+ protected IntegerConstantItemProvider integerConstantItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.IntegerConstant}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createIntegerConstantAdapter() {
+ if (integerConstantItemProvider == null) {
+ integerConstantItemProvider = new IntegerConstantItemProvider(this);
+ }
+
+ return integerConstantItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.BooleanConstant} instances.
+ *
+ *
+ * @generated
+ */
+ protected BooleanConstantItemProvider booleanConstantItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.BooleanConstant}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createBooleanConstantAdapter() {
+ if (booleanConstantItemProvider == null) {
+ booleanConstantItemProvider = new BooleanConstantItemProvider(this);
+ }
+
+ return booleanConstantItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.IntegerVariable} instances.
+ *
+ *
+ * @generated
+ */
+ protected IntegerVariableItemProvider integerVariableItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.IntegerVariable}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createIntegerVariableAdapter() {
+ if (integerVariableItemProvider == null) {
+ integerVariableItemProvider = new IntegerVariableItemProvider(this);
+ }
+
+ return integerVariableItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.BooleanVariable} instances.
+ *
+ *
+ * @generated
+ */
+ protected BooleanVariableItemProvider booleanVariableItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.BooleanVariable}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createBooleanVariableAdapter() {
+ if (booleanVariableItemProvider == null) {
+ booleanVariableItemProvider = new BooleanVariableItemProvider(this);
+ }
+
+ return booleanVariableItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.BooleanModuleGet} instances.
+ *
+ *
+ * @generated
+ */
+ protected BooleanModuleGetItemProvider booleanModuleGetItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.BooleanModuleGet}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createBooleanModuleGetAdapter() {
+ if (booleanModuleGetItemProvider == null) {
+ booleanModuleGetItemProvider = new BooleanModuleGetItemProvider(this);
+ }
+
+ return booleanModuleGetItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.IntegerModuleGet} instances.
+ *
+ *
+ * @generated
+ */
+ protected IntegerModuleGetItemProvider integerModuleGetItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.IntegerModuleGet}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createIntegerModuleGetAdapter() {
+ if (integerModuleGetItemProvider == null) {
+ integerModuleGetItemProvider = new IntegerModuleGetItemProvider(this);
+ }
+
+ return integerModuleGetItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.UnaryBooleanExpression} instances.
+ *
+ *
+ * @generated
+ */
+ protected UnaryBooleanExpressionItemProvider unaryBooleanExpressionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.UnaryBooleanExpression}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createUnaryBooleanExpressionAdapter() {
+ if (unaryBooleanExpressionItemProvider == null) {
+ unaryBooleanExpressionItemProvider = new UnaryBooleanExpressionItemProvider(this);
+ }
+
+ return unaryBooleanExpressionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.UnaryIntegerExpression} instances.
+ *
+ *
+ * @generated
+ */
+ protected UnaryIntegerExpressionItemProvider unaryIntegerExpressionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.UnaryIntegerExpression}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createUnaryIntegerExpressionAdapter() {
+ if (unaryIntegerExpressionItemProvider == null) {
+ unaryIntegerExpressionItemProvider = new UnaryIntegerExpressionItemProvider(this);
+ }
+
+ return unaryIntegerExpressionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.VariableDeclaration} instances.
+ *
+ *
+ * @generated
+ */
+ protected VariableDeclarationItemProvider variableDeclarationItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.VariableDeclaration}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createVariableDeclarationAdapter() {
+ if (variableDeclarationItemProvider == null) {
+ variableDeclarationItemProvider = new VariableDeclarationItemProvider(this);
+ }
+
+ return variableDeclarationItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.VariableRef} instances.
+ *
+ *
+ * @generated
+ */
+ protected VariableRefItemProvider variableRefItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.VariableRef}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createVariableRefAdapter() {
+ if (variableRefItemProvider == null) {
+ variableRefItemProvider = new VariableRefItemProvider(this);
+ }
+
+ return variableRefItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.LED} instances.
+ *
+ *
+ * @generated
+ */
+ protected LEDItemProvider ledItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.LED}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createLEDAdapter() {
+ if (ledItemProvider == null) {
+ ledItemProvider = new LEDItemProvider(this);
+ }
+
+ return ledItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.PushButton} instances.
+ *
+ *
+ * @generated
+ */
+ protected PushButtonItemProvider pushButtonItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.PushButton}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createPushButtonAdapter() {
+ if (pushButtonItemProvider == null) {
+ pushButtonItemProvider = new PushButtonItemProvider(this);
+ }
+
+ return pushButtonItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Buzzer} instances.
+ *
+ *
+ * @generated
+ */
+ protected BuzzerItemProvider buzzerItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Buzzer}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createBuzzerAdapter() {
+ if (buzzerItemProvider == null) {
+ buzzerItemProvider = new BuzzerItemProvider(this);
+ }
+
+ return buzzerItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.RotationSensor} instances.
+ *
+ *
+ * @generated
+ */
+ protected RotationSensorItemProvider rotationSensorItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.RotationSensor}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createRotationSensorAdapter() {
+ if (rotationSensorItemProvider == null) {
+ rotationSensorItemProvider = new RotationSensorItemProvider(this);
+ }
+
+ return rotationSensorItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.MicroServo} instances.
+ *
+ *
+ * @generated
+ */
+ protected MicroServoItemProvider microServoItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.MicroServo}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createMicroServoAdapter() {
+ if (microServoItemProvider == null) {
+ microServoItemProvider = new MicroServoItemProvider(this);
+ }
+
+ return microServoItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.InfraRedSensor} instances.
+ *
+ *
+ * @generated
+ */
+ protected InfraRedSensorItemProvider infraRedSensorItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.InfraRedSensor}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createInfraRedSensorAdapter() {
+ if (infraRedSensorItemProvider == null) {
+ infraRedSensorItemProvider = new InfraRedSensorItemProvider(this);
+ }
+
+ return infraRedSensorItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.AmbientLightSensor} instances.
+ *
+ *
+ * @generated
+ */
+ protected AmbientLightSensorItemProvider ambientLightSensorItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.AmbientLightSensor}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createAmbientLightSensorAdapter() {
+ if (ambientLightSensorItemProvider == null) {
+ ambientLightSensorItemProvider = new AmbientLightSensorItemProvider(this);
+ }
+
+ return ambientLightSensorItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.SoundSensor} instances.
+ *
+ *
+ * @generated
+ */
+ protected SoundSensorItemProvider soundSensorItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.SoundSensor}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createSoundSensorAdapter() {
+ if (soundSensorItemProvider == null) {
+ soundSensorItemProvider = new SoundSensorItemProvider(this);
+ }
+
+ return soundSensorItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Fan} instances.
+ *
+ *
+ * @generated
+ */
+ protected FanItemProvider fanItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Fan}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createFanAdapter() {
+ if (fanItemProvider == null) {
+ fanItemProvider = new FanItemProvider(this);
+ }
+
+ return fanItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.MusicPlayer} instances.
+ *
+ *
+ * @generated
+ */
+ protected MusicPlayerItemProvider musicPlayerItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.MusicPlayer}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createMusicPlayerAdapter() {
+ if (musicPlayerItemProvider == null) {
+ musicPlayerItemProvider = new MusicPlayerItemProvider(this);
+ }
+
+ return musicPlayerItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.ArduinoBoard} instances.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoBoardItemProvider arduinoBoardItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.ArduinoBoard}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createArduinoBoardAdapter() {
+ if (arduinoBoardItemProvider == null) {
+ arduinoBoardItemProvider = new ArduinoBoardItemProvider(this);
+ }
+
+ return arduinoBoardItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Thread} instances.
+ *
+ *
+ * @generated
+ */
+ protected ThreadItemProvider threadItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Thread}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createThreadAdapter() {
+ if (threadItemProvider == null) {
+ threadItemProvider = new ThreadItemProvider(this);
+ }
+
+ return threadItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Channel} instances.
+ *
+ *
+ * @generated
+ */
+ protected ChannelItemProvider channelItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Channel}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createChannelAdapter() {
+ if (channelItemProvider == null) {
+ channelItemProvider = new ChannelItemProvider(this);
+ }
+
+ return channelItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.Link} instances.
+ *
+ *
+ * @generated
+ */
+ protected LinkItemProvider linkItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.Link}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createLinkAdapter() {
+ if (linkItemProvider == null) {
+ linkItemProvider = new LinkItemProvider(this);
+ }
+
+ return linkItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.SynchronizationBlock} instances.
+ *
+ *
+ * @generated
+ */
+ protected SynchronizationBlockItemProvider synchronizationBlockItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.SynchronizationBlock}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createSynchronizationBlockAdapter() {
+ if (synchronizationBlockItemProvider == null) {
+ synchronizationBlockItemProvider = new SynchronizationBlockItemProvider(this);
+ }
+
+ return synchronizationBlockItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link fr.obeo.dsl.arduino.InstructionBlock} instances.
+ *
+ *
+ * @generated
+ */
+ protected InstructionBlockItemProvider instructionBlockItemProvider;
+
+ /**
+ * This creates an adapter for a {@link fr.obeo.dsl.arduino.InstructionBlock}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createInstructionBlockAdapter() {
+ if (instructionBlockItemProvider == null) {
+ instructionBlockItemProvider = new InstructionBlockItemProvider(this);
+ }
+
+ return instructionBlockItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ *
+ *
+ * @generated
+ */
+ public ComposeableAdapterFactory getRootAdapterFactory() {
+ return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+ }
+
+ /**
+ * This sets the composed adapter factory that contains this factory.
+ *
+ *
+ * @generated
+ */
+ public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+ this.parentAdapterFactory = parentAdapterFactory;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object type) {
+ return supportedTypes.contains(type) || super.isFactoryForType(type);
+ }
+
+ /**
+ * This implementation substitutes the factory itself as the key for the adapter.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Adapter adapt(Notifier notifier, Object type) {
+ return super.adapt(notifier, this);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object adapt(Object object, Object type) {
+ if (isFactoryForType(type)) {
+ Object adapter = super.adapt(object, type);
+ if (!(type instanceof Class>) || (((Class>)type).isInstance(adapter))) {
+ return adapter;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This adds a listener.
+ *
+ *
+ * @generated
+ */
+ public void addListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ *
+ *
+ * @generated
+ */
+ public void removeListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ *
+ *
+ * @generated
+ */
+ public void fireNotifyChanged(Notification notification) {
+ changeNotifier.fireNotifyChanged(notification);
+
+ if (parentAdapterFactory != null) {
+ parentAdapterFactory.fireNotifyChanged(notification);
+ }
+ }
+
+ /**
+ * This disposes all of the item providers created by this factory.
+ *
+ *
+ * @generated
+ */
+ public void dispose() {
+ if (digitalPinItemProvider != null) digitalPinItemProvider.dispose();
+ if (analogPinItemProvider != null) analogPinItemProvider.dispose();
+ if (sketchItemProvider != null) sketchItemProvider.dispose();
+ if (projectItemProvider != null) projectItemProvider.dispose();
+ if (moduleAssignmentItemProvider != null) moduleAssignmentItemProvider.dispose();
+ if (delayItemProvider != null) delayItemProvider.dispose();
+ if (repeatItemProvider != null) repeatItemProvider.dispose();
+ if (whileItemProvider != null) whileItemProvider.dispose();
+ if (variableAssignmentItemProvider != null) variableAssignmentItemProvider.dispose();
+ if (binaryIntegerExpressionItemProvider != null) binaryIntegerExpressionItemProvider.dispose();
+ if (binaryBooleanExpressionItemProvider != null) binaryBooleanExpressionItemProvider.dispose();
+ if (ifItemProvider != null) ifItemProvider.dispose();
+ if (integerConstantItemProvider != null) integerConstantItemProvider.dispose();
+ if (booleanConstantItemProvider != null) booleanConstantItemProvider.dispose();
+ if (integerVariableItemProvider != null) integerVariableItemProvider.dispose();
+ if (booleanVariableItemProvider != null) booleanVariableItemProvider.dispose();
+ if (booleanModuleGetItemProvider != null) booleanModuleGetItemProvider.dispose();
+ if (integerModuleGetItemProvider != null) integerModuleGetItemProvider.dispose();
+ if (unaryBooleanExpressionItemProvider != null) unaryBooleanExpressionItemProvider.dispose();
+ if (unaryIntegerExpressionItemProvider != null) unaryIntegerExpressionItemProvider.dispose();
+ if (variableDeclarationItemProvider != null) variableDeclarationItemProvider.dispose();
+ if (variableRefItemProvider != null) variableRefItemProvider.dispose();
+ if (ledItemProvider != null) ledItemProvider.dispose();
+ if (pushButtonItemProvider != null) pushButtonItemProvider.dispose();
+ if (buzzerItemProvider != null) buzzerItemProvider.dispose();
+ if (rotationSensorItemProvider != null) rotationSensorItemProvider.dispose();
+ if (microServoItemProvider != null) microServoItemProvider.dispose();
+ if (infraRedSensorItemProvider != null) infraRedSensorItemProvider.dispose();
+ if (ambientLightSensorItemProvider != null) ambientLightSensorItemProvider.dispose();
+ if (soundSensorItemProvider != null) soundSensorItemProvider.dispose();
+ if (fanItemProvider != null) fanItemProvider.dispose();
+ if (musicPlayerItemProvider != null) musicPlayerItemProvider.dispose();
+ if (arduinoBoardItemProvider != null) arduinoBoardItemProvider.dispose();
+ if (threadItemProvider != null) threadItemProvider.dispose();
+ if (channelItemProvider != null) channelItemProvider.dispose();
+ if (linkItemProvider != null) linkItemProvider.dispose();
+ if (synchronizationBlockItemProvider != null) synchronizationBlockItemProvider.dispose();
+ if (instructionBlockItemProvider != null) instructionBlockItemProvider.dispose();
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoModuleItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoModuleItemProvider.java
new file mode 100644
index 00000000..1fc1bfb7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ArduinoModuleItemProvider.java
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ArduinoModule} object.
+ *
+ *
+ * @generated
+ */
+public class ArduinoModuleItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ArduinoModuleItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addLevelPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Level feature.
+ *
+ *
+ * @generated
+ */
+ protected void addLevelPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Module_level_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Module_level_feature", "_UI_Module_type"),
+ ArduinoPackage.Literals.MODULE__LEVEL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ArduinoModule)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ArduinoModule_type") :
+ getString("_UI_ArduinoModule_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(ArduinoModule.class)) {
+ case ArduinoPackage.ARDUINO_MODULE__LEVEL:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AssignmentItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AssignmentItemProvider.java
new file mode 100644
index 00000000..27404a1a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/AssignmentItemProvider.java
@@ -0,0 +1,192 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Assignment} object.
+ *
+ *
+ * @generated
+ */
+public class AssignmentItemProvider extends InstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public AssignmentItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.ASSIGNMENT__OPERAND);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Assignment)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Assignment_type") :
+ getString("_UI_Assignment_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Assignment.class)) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createVariableRef()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryBooleanExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryBooleanExpressionItemProvider.java
new file mode 100644
index 00000000..a50ab54a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryBooleanExpressionItemProvider.java
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryBooleanOperatorKind;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BinaryBooleanExpression} object.
+ *
+ *
+ * @generated
+ */
+public class BinaryBooleanExpressionItemProvider extends BinaryExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BinaryBooleanExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addOperatorPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Operator feature.
+ *
+ *
+ * @generated
+ */
+ protected void addOperatorPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_BinaryBooleanExpression_operator_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_BinaryBooleanExpression_operator_feature", "_UI_BinaryBooleanExpression_type"),
+ ArduinoPackage.Literals.BINARY_BOOLEAN_EXPRESSION__OPERATOR,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns BinaryBooleanExpression.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/BinaryBooleanExpression"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ BinaryBooleanOperatorKind labelValue = ((BinaryBooleanExpression)object).getOperator();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ?
+ getString("_UI_BinaryBooleanExpression_type") :
+ getString("_UI_BinaryBooleanExpression_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(BinaryBooleanExpression.class)) {
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION__OPERATOR:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection> selection) {
+ Object childFeature = feature;
+ Object childObject = child;
+
+ boolean qualify =
+ childFeature == ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT ||
+ childFeature == ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT;
+
+ if (qualify) {
+ return getString
+ ("_UI_CreateChild_text2",
+ new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+ }
+ return super.getCreateChildText(owner, feature, child, selection);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryExpressionItemProvider.java
new file mode 100644
index 00000000..54826b5c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryExpressionItemProvider.java
@@ -0,0 +1,269 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryExpression;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BinaryExpression} object.
+ *
+ *
+ * @generated
+ */
+public class BinaryExpressionItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BinaryExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT);
+ childrenFeatures.add(ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_BinaryExpression_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(BinaryExpression.class)) {
+ case ArduinoPackage.BINARY_EXPRESSION__LEFT:
+ case ArduinoPackage.BINARY_EXPRESSION__RIGHT:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createBinaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createBinaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createIntegerConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createBooleanConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createBooleanModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createIntegerModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createUnaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createUnaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT,
+ ArduinoFactory.eINSTANCE.createVariableRef()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createBinaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createBinaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createIntegerConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createBooleanConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createBooleanModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createIntegerModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createUnaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createUnaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT,
+ ArduinoFactory.eINSTANCE.createVariableRef()));
+ }
+
+ /**
+ * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection> selection) {
+ Object childFeature = feature;
+ Object childObject = child;
+
+ boolean qualify =
+ childFeature == ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT ||
+ childFeature == ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT;
+
+ if (qualify) {
+ return getString
+ ("_UI_CreateChild_text2",
+ new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+ }
+ return super.getCreateChildText(owner, feature, child, selection);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryIntegerExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryIntegerExpressionItemProvider.java
new file mode 100644
index 00000000..9dbf8627
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BinaryIntegerExpressionItemProvider.java
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerOperatorKind;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BinaryIntegerExpression} object.
+ *
+ *
+ * @generated
+ */
+public class BinaryIntegerExpressionItemProvider extends BinaryExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BinaryIntegerExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addOperatorPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Operator feature.
+ *
+ *
+ * @generated
+ */
+ protected void addOperatorPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_BinaryIntegerExpression_operator_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_BinaryIntegerExpression_operator_feature", "_UI_BinaryIntegerExpression_type"),
+ ArduinoPackage.Literals.BINARY_INTEGER_EXPRESSION__OPERATOR,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns BinaryIntegerExpression.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/BinaryIntegerExpression"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ BinaryIntegerOperatorKind labelValue = ((BinaryIntegerExpression)object).getOperator();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ?
+ getString("_UI_BinaryIntegerExpression_type") :
+ getString("_UI_BinaryIntegerExpression_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(BinaryIntegerExpression.class)) {
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION__OPERATOR:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection> selection) {
+ Object childFeature = feature;
+ Object childObject = child;
+
+ boolean qualify =
+ childFeature == ArduinoPackage.Literals.BINARY_EXPRESSION__LEFT ||
+ childFeature == ArduinoPackage.Literals.BINARY_EXPRESSION__RIGHT;
+
+ if (qualify) {
+ return getString
+ ("_UI_CreateChild_text2",
+ new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+ }
+ return super.getCreateChildText(owner, feature, child, selection);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BoardItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BoardItemProvider.java
new file mode 100644
index 00000000..032882f5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BoardItemProvider.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Board;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Board} object.
+ *
+ *
+ * @generated
+ */
+public class BoardItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BoardItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addThreadsPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Threads feature.
+ *
+ *
+ * @generated
+ */
+ protected void addThreadsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Board_threads_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Board_threads_feature", "_UI_Board_type"),
+ ArduinoPackage.Literals.BOARD__THREADS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Board)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Board_type") :
+ getString("_UI_Board_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanConstantItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanConstantItemProvider.java
new file mode 100644
index 00000000..c7f391fc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanConstantItemProvider.java
@@ -0,0 +1,138 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanConstant;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BooleanConstant} object.
+ *
+ *
+ * @generated
+ */
+public class BooleanConstantItemProvider extends ConstantItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BooleanConstantItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_BooleanConstant_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_BooleanConstant_value_feature", "_UI_BooleanConstant_type"),
+ ArduinoPackage.Literals.BOOLEAN_CONSTANT__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns BooleanConstant.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/BooleanConstant"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ BooleanConstant booleanConstant = (BooleanConstant)object;
+ return getString("_UI_BooleanConstant_type") + " " + booleanConstant.isValue();
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(BooleanConstant.class)) {
+ case ArduinoPackage.BOOLEAN_CONSTANT__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanExpressionItemProvider.java
new file mode 100644
index 00000000..1e5e422a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanExpressionItemProvider.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BooleanExpression} object.
+ *
+ *
+ * @generated
+ */
+public class BooleanExpressionItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BooleanExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns BooleanExpression.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/BooleanExpression"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_BooleanExpression_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanModuleGetItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanModuleGetItemProvider.java
new file mode 100644
index 00000000..16564bf0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanModuleGetItemProvider.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BooleanModuleGet} object.
+ *
+ *
+ * @generated
+ */
+public class BooleanModuleGetItemProvider extends ModuleGetItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BooleanModuleGetItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns BooleanModuleGet.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/BooleanModuleGet"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_BooleanModuleGet_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanVariableItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanVariableItemProvider.java
new file mode 100644
index 00000000..780c723f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BooleanVariableItemProvider.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanVariable;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.BooleanVariable} object.
+ *
+ *
+ * @generated
+ */
+public class BooleanVariableItemProvider extends VariableItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BooleanVariableItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addInitialValuePropertyDescriptor(object);
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Initial Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addInitialValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_BooleanVariable_initialValue_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_BooleanVariable_initialValue_feature", "_UI_BooleanVariable_type"),
+ ArduinoPackage.Literals.BOOLEAN_VARIABLE__INITIAL_VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_BooleanVariable_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_BooleanVariable_value_feature", "_UI_BooleanVariable_type"),
+ ArduinoPackage.Literals.BOOLEAN_VARIABLE__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns BooleanVariable.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/BooleanVariable"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((BooleanVariable)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_BooleanVariable_type") :
+ getString("_UI_BooleanVariable_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(BooleanVariable.class)) {
+ case ArduinoPackage.BOOLEAN_VARIABLE__INITIAL_VALUE:
+ case ArduinoPackage.BOOLEAN_VARIABLE__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BuzzerItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BuzzerItemProvider.java
new file mode 100644
index 00000000..db820027
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/BuzzerItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.Buzzer;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Buzzer} object.
+ *
+ *
+ * @generated
+ */
+public class BuzzerItemProvider extends ArduinoDigitalModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public BuzzerItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns Buzzer.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Buzzer"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Buzzer)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Buzzer_type") :
+ getString("_UI_Buzzer_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ChannelItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ChannelItemProvider.java
new file mode 100644
index 00000000..874c1344
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ChannelItemProvider.java
@@ -0,0 +1,258 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Channel;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Channel} object.
+ *
+ *
+ * @generated
+ */
+public class ChannelItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ChannelItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addSourcePropertyDescriptor(object);
+ addTargetPropertyDescriptor(object);
+ addInRatePropertyDescriptor(object);
+ addOutRatePropertyDescriptor(object);
+ addCapacityPropertyDescriptor(object);
+ addCurrentSizePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Source feature.
+ *
+ *
+ * @generated
+ */
+ protected void addSourcePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Channel_source_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Channel_source_feature", "_UI_Channel_type"),
+ ArduinoPackage.Literals.CHANNEL__SOURCE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Target feature.
+ *
+ *
+ * @generated
+ */
+ protected void addTargetPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Channel_target_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Channel_target_feature", "_UI_Channel_type"),
+ ArduinoPackage.Literals.CHANNEL__TARGET,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the In Rate feature.
+ *
+ *
+ * @generated
+ */
+ protected void addInRatePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Channel_inRate_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Channel_inRate_feature", "_UI_Channel_type"),
+ ArduinoPackage.Literals.CHANNEL__IN_RATE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Out Rate feature.
+ *
+ *
+ * @generated
+ */
+ protected void addOutRatePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Channel_outRate_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Channel_outRate_feature", "_UI_Channel_type"),
+ ArduinoPackage.Literals.CHANNEL__OUT_RATE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Capacity feature.
+ *
+ *
+ * @generated
+ */
+ protected void addCapacityPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Channel_capacity_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Channel_capacity_feature", "_UI_Channel_type"),
+ ArduinoPackage.Literals.CHANNEL__CAPACITY,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Current Size feature.
+ *
+ *
+ * @generated
+ */
+ protected void addCurrentSizePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Channel_currentSize_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Channel_currentSize_feature", "_UI_Channel_type"),
+ ArduinoPackage.Literals.CHANNEL__CURRENT_SIZE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Channel.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Channel"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Channel)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Channel_type") :
+ getString("_UI_Channel_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Channel.class)) {
+ case ArduinoPackage.CHANNEL__IN_RATE:
+ case ArduinoPackage.CHANNEL__OUT_RATE:
+ case ArduinoPackage.CHANNEL__CAPACITY:
+ case ArduinoPackage.CHANNEL__CURRENT_SIZE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ConstantItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ConstantItemProvider.java
new file mode 100644
index 00000000..e8b62841
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ConstantItemProvider.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Constant} object.
+ *
+ *
+ * @generated
+ */
+public class ConstantItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ConstantItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns Constant.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Constant"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_Constant_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ControlItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ControlItemProvider.java
new file mode 100644
index 00000000..86fc68a5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ControlItemProvider.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Control;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Control} object.
+ *
+ *
+ * @generated
+ */
+public class ControlItemProvider extends InstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ControlItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.CONTROL__BLOCK);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Control)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Control_type") :
+ getString("_UI_Control_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Control.class)) {
+ case ArduinoPackage.CONTROL__BLOCK:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.CONTROL__BLOCK,
+ ArduinoFactory.eINSTANCE.createInstructionBlock()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/DelayItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/DelayItemProvider.java
new file mode 100644
index 00000000..9189731c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/DelayItemProvider.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Delay;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Delay} object.
+ *
+ *
+ * @generated
+ */
+public class DelayItemProvider extends UtilitiesItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public DelayItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addUnitPropertyDescriptor(object);
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Unit feature.
+ *
+ *
+ * @generated
+ */
+ protected void addUnitPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Delay_unit_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Delay_unit_feature", "_UI_Delay_type"),
+ ArduinoPackage.Literals.DELAY__UNIT,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Delay_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Delay_value_feature", "_UI_Delay_type"),
+ ArduinoPackage.Literals.DELAY__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Delay.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Delay"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Delay)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Delay_type") :
+ getString("_UI_Delay_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Delay.class)) {
+ case ArduinoPackage.DELAY__UNIT:
+ case ArduinoPackage.DELAY__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/DigitalPinItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/DigitalPinItemProvider.java
new file mode 100644
index 00000000..17fbbf66
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/DigitalPinItemProvider.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.DigitalPin;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.DigitalPin} object.
+ *
+ *
+ * @generated
+ */
+public class DigitalPinItemProvider extends PinItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public DigitalPinItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.DIGITAL_PIN__MODULE);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns DigitalPin.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/DigitalPin"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ DigitalPin digitalPin = (DigitalPin)object;
+ return getString("_UI_DigitalPin_type") + " " + digitalPin.getId();
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(DigitalPin.class)) {
+ case ArduinoPackage.DIGITAL_PIN__MODULE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.DIGITAL_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createLED()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.DIGITAL_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createPushButton()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.DIGITAL_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createBuzzer()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.DIGITAL_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createMicroServo()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.DIGITAL_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createInfraRedSensor()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.DIGITAL_PIN__MODULE,
+ ArduinoFactory.eINSTANCE.createFan()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ExpressionItemProvider.java
new file mode 100644
index 00000000..b4acf5f9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ExpressionItemProvider.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Expression} object.
+ *
+ *
+ * @generated
+ */
+public class ExpressionItemProvider
+ extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_Expression_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ArduinoEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/FanItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/FanItemProvider.java
new file mode 100644
index 00000000..5d815878
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/FanItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.Fan;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Fan} object.
+ *
+ *
+ * @generated
+ */
+public class FanItemProvider extends ArduinoDigitalModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public FanItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns Fan.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Fan"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Fan)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Fan_type") :
+ getString("_UI_Fan_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IfItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IfItemProvider.java
new file mode 100644
index 00000000..d7c1df73
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IfItemProvider.java
@@ -0,0 +1,200 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.If;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.If} object.
+ *
+ *
+ * @generated
+ */
+public class IfItemProvider extends ControlItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public IfItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addConditionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Condition feature.
+ *
+ *
+ * @generated
+ */
+ protected void addConditionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_If_condition_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_If_condition_feature", "_UI_If_type"),
+ ArduinoPackage.Literals.IF__CONDITION,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.IF__ELSE_BLOCK);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns If.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/If"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((If)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_If_type") :
+ getString("_UI_If_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(If.class)) {
+ case ArduinoPackage.IF__ELSE_BLOCK:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.IF__ELSE_BLOCK,
+ ArduinoFactory.eINSTANCE.createInstructionBlock()));
+ }
+
+ /**
+ * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection> selection) {
+ Object childFeature = feature;
+ Object childObject = child;
+
+ boolean qualify =
+ childFeature == ArduinoPackage.Literals.CONTROL__BLOCK ||
+ childFeature == ArduinoPackage.Literals.IF__ELSE_BLOCK;
+
+ if (qualify) {
+ return getString
+ ("_UI_CreateChild_text2",
+ new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+ }
+ return super.getCreateChildText(owner, feature, child, selection);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InfraRedSensorItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InfraRedSensorItemProvider.java
new file mode 100644
index 00000000..d16ca359
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InfraRedSensorItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.InfraRedSensor;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.InfraRedSensor} object.
+ *
+ *
+ * @generated
+ */
+public class InfraRedSensorItemProvider extends ArduinoDigitalModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public InfraRedSensorItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns InfraRedSensor.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/InfraRedSensor"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((InfraRedSensor)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_InfraRedSensor_type") :
+ getString("_UI_InfraRedSensor_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InstructionBlockItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InstructionBlockItemProvider.java
new file mode 100644
index 00000000..9e387790
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InstructionBlockItemProvider.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.InstructionBlock;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.InstructionBlock} object.
+ *
+ *
+ * @generated
+ */
+public class InstructionBlockItemProvider extends ThreadInstructionBlockItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public InstructionBlockItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns InstructionBlock.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/InstructionBlock"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((InstructionBlock)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_InstructionBlock_type") :
+ getString("_UI_InstructionBlock_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(InstructionBlock.class)) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createModuleAssignment()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createDelay()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createRepeat()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createWhile()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createVariableAssignment()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createIf()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.INSTRUCTION_BLOCK__INSTRUCTIONS,
+ ArduinoFactory.eINSTANCE.createVariableDeclaration()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InstructionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InstructionItemProvider.java
new file mode 100644
index 00000000..119ffa65
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/InstructionItemProvider.java
@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Instruction;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Instruction} object.
+ *
+ *
+ * @generated
+ */
+public class InstructionItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public InstructionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Instruction)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Instruction_type") :
+ getString("_UI_Instruction_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerConstantItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerConstantItemProvider.java
new file mode 100644
index 00000000..d428ac32
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerConstantItemProvider.java
@@ -0,0 +1,138 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.IntegerConstant;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.IntegerConstant} object.
+ *
+ *
+ * @generated
+ */
+public class IntegerConstantItemProvider extends ConstantItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public IntegerConstantItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_IntegerConstant_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_IntegerConstant_value_feature", "_UI_IntegerConstant_type"),
+ ArduinoPackage.Literals.INTEGER_CONSTANT__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns IntegerConstant.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/IntegerConstant"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ IntegerConstant integerConstant = (IntegerConstant)object;
+ return getString("_UI_IntegerConstant_type") + " " + integerConstant.getValue();
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(IntegerConstant.class)) {
+ case ArduinoPackage.INTEGER_CONSTANT__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerExpressionItemProvider.java
new file mode 100644
index 00000000..2fc1a1a4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerExpressionItemProvider.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.IntegerExpression} object.
+ *
+ *
+ * @generated
+ */
+public class IntegerExpressionItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public IntegerExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_IntegerExpression_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerModuleGetItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerModuleGetItemProvider.java
new file mode 100644
index 00000000..536496a1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerModuleGetItemProvider.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.IntegerModuleGet} object.
+ *
+ *
+ * @generated
+ */
+public class IntegerModuleGetItemProvider extends ModuleGetItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public IntegerModuleGetItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns IntegerModuleGet.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/IntegerModuleGet"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_IntegerModuleGet_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerVariableItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerVariableItemProvider.java
new file mode 100644
index 00000000..ff4e491c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/IntegerVariableItemProvider.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.IntegerVariable;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.IntegerVariable} object.
+ *
+ *
+ * @generated
+ */
+public class IntegerVariableItemProvider extends VariableItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public IntegerVariableItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addInitialValuePropertyDescriptor(object);
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Initial Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addInitialValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_IntegerVariable_initialValue_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_IntegerVariable_initialValue_feature", "_UI_IntegerVariable_type"),
+ ArduinoPackage.Literals.INTEGER_VARIABLE__INITIAL_VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ *
+ *
+ * @generated
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_IntegerVariable_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_IntegerVariable_value_feature", "_UI_IntegerVariable_type"),
+ ArduinoPackage.Literals.INTEGER_VARIABLE__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns IntegerVariable.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/IntegerVariable"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((IntegerVariable)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_IntegerVariable_type") :
+ getString("_UI_IntegerVariable_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(IntegerVariable.class)) {
+ case ArduinoPackage.INTEGER_VARIABLE__INITIAL_VALUE:
+ case ArduinoPackage.INTEGER_VARIABLE__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/LEDItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/LEDItemProvider.java
new file mode 100644
index 00000000..dcb2ee9a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/LEDItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.LED;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.LED} object.
+ *
+ *
+ * @generated
+ */
+public class LEDItemProvider extends ArduinoDigitalModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public LEDItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns LED.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/LED"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((LED)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_LED_type") :
+ getString("_UI_LED_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/LinkItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/LinkItemProvider.java
new file mode 100644
index 00000000..5281217b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/LinkItemProvider.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Link;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Link} object.
+ *
+ *
+ * @generated
+ */
+public class LinkItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public LinkItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addInBoardPropertyDescriptor(object);
+ addOutBoardPropertyDescriptor(object);
+ addChannelsPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the In Board feature.
+ *
+ *
+ * @generated
+ */
+ protected void addInBoardPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Link_inBoard_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Link_inBoard_feature", "_UI_Link_type"),
+ ArduinoPackage.Literals.LINK__IN_BOARD,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Out Board feature.
+ *
+ *
+ * @generated
+ */
+ protected void addOutBoardPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Link_outBoard_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Link_outBoard_feature", "_UI_Link_type"),
+ ArduinoPackage.Literals.LINK__OUT_BOARD,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Channels feature.
+ *
+ *
+ * @generated
+ */
+ protected void addChannelsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Link_channels_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Link_channels_feature", "_UI_Link_type"),
+ ArduinoPackage.Literals.LINK__CHANNELS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Link.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Link"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Link)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Link_type") :
+ getString("_UI_Link_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/MicroServoItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/MicroServoItemProvider.java
new file mode 100644
index 00000000..9a2e855d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/MicroServoItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.MicroServo;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.MicroServo} object.
+ *
+ *
+ * @generated
+ */
+public class MicroServoItemProvider extends ArduinoDigitalModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public MicroServoItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns MicroServo.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/MicroServo"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((MicroServo)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_MicroServo_type") :
+ getString("_UI_MicroServo_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleAssignmentItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleAssignmentItemProvider.java
new file mode 100644
index 00000000..963ce5c2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleAssignmentItemProvider.java
@@ -0,0 +1,203 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ModuleAssignment} object.
+ *
+ *
+ * @generated
+ */
+public class ModuleAssignmentItemProvider extends ModuleInstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ModuleAssignmentItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.ASSIGNMENT__OPERAND);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns ModuleAssignment.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ModuleAssignment"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ModuleAssignment)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ModuleAssignment_type") :
+ getString("_UI_ModuleAssignment_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(ModuleAssignment.class)) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createVariableRef()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleGetItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleGetItemProvider.java
new file mode 100644
index 00000000..ce49ede1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleGetItemProvider.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ModuleGet} object.
+ *
+ *
+ * @generated
+ */
+public class ModuleGetItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ModuleGetItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addModulePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Module feature.
+ *
+ *
+ * @generated
+ */
+ protected void addModulePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ModuleGet_module_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ModuleGet_module_feature", "_UI_ModuleGet_type"),
+ ArduinoPackage.Literals.MODULE_GET__MODULE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns ModuleGet.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ModuleGet"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_ModuleGet_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleInstructionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleInstructionItemProvider.java
new file mode 100644
index 00000000..a2f19799
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ModuleInstructionItemProvider.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.ModuleInstruction;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ModuleInstruction} object.
+ *
+ *
+ * @generated
+ */
+public class ModuleInstructionItemProvider extends InstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ModuleInstructionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addModulePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Module feature.
+ *
+ *
+ * @generated
+ */
+ protected void addModulePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ModuleInstruction_module_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ModuleInstruction_module_feature", "_UI_ModuleInstruction_type"),
+ ArduinoPackage.Literals.MODULE_INSTRUCTION__MODULE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ModuleInstruction)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ModuleInstruction_type") :
+ getString("_UI_ModuleInstruction_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/MusicPlayerItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/MusicPlayerItemProvider.java
new file mode 100644
index 00000000..57183bc9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/MusicPlayerItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.MusicPlayer;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.MusicPlayer} object.
+ *
+ *
+ * @generated
+ */
+public class MusicPlayerItemProvider extends ArduinoAnalogModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public MusicPlayerItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns MusicPlayer.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/MusicPlayer"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((MusicPlayer)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_MusicPlayer_type") :
+ getString("_UI_MusicPlayer_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/NamedElementItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/NamedElementItemProvider.java
new file mode 100644
index 00000000..60108ae6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/NamedElementItemProvider.java
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.NamedElement;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.NamedElement} object.
+ *
+ *
+ * @generated
+ */
+public class NamedElementItemProvider
+ extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public NamedElementItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ *
+ *
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_NamedElement_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_NamedElement_name_feature", "_UI_NamedElement_type"),
+ ArduinoPackage.Literals.NAMED_ELEMENT__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((NamedElement)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_NamedElement_type") :
+ getString("_UI_NamedElement_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(NamedElement.class)) {
+ case ArduinoPackage.NAMED_ELEMENT__NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ArduinoEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/PinItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/PinItemProvider.java
new file mode 100644
index 00000000..8c1a5289
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/PinItemProvider.java
@@ -0,0 +1,177 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Pin;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Pin} object.
+ *
+ *
+ * @generated
+ */
+public class PinItemProvider
+ extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public PinItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addIdPropertyDescriptor(object);
+ addLevelPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Id feature.
+ *
+ *
+ * @generated
+ */
+ protected void addIdPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Pin_id_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Pin_id_feature", "_UI_Pin_type"),
+ ArduinoPackage.Literals.PIN__ID,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Level feature.
+ *
+ *
+ * @generated
+ */
+ protected void addLevelPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Pin_level_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Pin_level_feature", "_UI_Pin_type"),
+ ArduinoPackage.Literals.PIN__LEVEL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ Pin pin = (Pin)object;
+ return getString("_UI_Pin_type") + " " + pin.getId();
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Pin.class)) {
+ case ArduinoPackage.PIN__ID:
+ case ArduinoPackage.PIN__LEVEL:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ArduinoEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ProjectItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ProjectItemProvider.java
new file mode 100644
index 00000000..9b22923c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ProjectItemProvider.java
@@ -0,0 +1,167 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Project;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Project} object.
+ *
+ *
+ * @generated
+ */
+public class ProjectItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ProjectItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.PROJECT__BOARDS);
+ childrenFeatures.add(ArduinoPackage.Literals.PROJECT__SKETCH);
+ childrenFeatures.add(ArduinoPackage.Literals.PROJECT__LINKS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns Project.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Project"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Project)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Project_type") :
+ getString("_UI_Project_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Project.class)) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ case ArduinoPackage.PROJECT__SKETCH:
+ case ArduinoPackage.PROJECT__LINKS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.PROJECT__BOARDS,
+ ArduinoFactory.eINSTANCE.createArduinoBoard()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.PROJECT__SKETCH,
+ ArduinoFactory.eINSTANCE.createSketch()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.PROJECT__LINKS,
+ ArduinoFactory.eINSTANCE.createLink()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/PushButtonItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/PushButtonItemProvider.java
new file mode 100644
index 00000000..f9873c6e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/PushButtonItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.PushButton;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.PushButton} object.
+ *
+ *
+ * @generated
+ */
+public class PushButtonItemProvider extends ArduinoDigitalModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public PushButtonItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns PushButton.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/PushButton"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((PushButton)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_PushButton_type") :
+ getString("_UI_PushButton_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/RepeatItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/RepeatItemProvider.java
new file mode 100644
index 00000000..72084d34
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/RepeatItemProvider.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Repeat;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Repeat} object.
+ *
+ *
+ * @generated
+ */
+public class RepeatItemProvider extends ControlItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public RepeatItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addIterationPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Iteration feature.
+ *
+ *
+ * @generated
+ */
+ protected void addIterationPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Repeat_iteration_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Repeat_iteration_feature", "_UI_Repeat_type"),
+ ArduinoPackage.Literals.REPEAT__ITERATION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Repeat.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Repeat"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Repeat)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Repeat_type") :
+ getString("_UI_Repeat_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Repeat.class)) {
+ case ArduinoPackage.REPEAT__ITERATION:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/RotationSensorItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/RotationSensorItemProvider.java
new file mode 100644
index 00000000..990bff2b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/RotationSensorItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.RotationSensor;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.RotationSensor} object.
+ *
+ *
+ * @generated
+ */
+public class RotationSensorItemProvider extends ArduinoAnalogModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public RotationSensorItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns RotationSensor.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/RotationSensor"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((RotationSensor)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_RotationSensor_type") :
+ getString("_UI_RotationSensor_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SketchItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SketchItemProvider.java
new file mode 100644
index 00000000..49be079e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SketchItemProvider.java
@@ -0,0 +1,160 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Sketch;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Sketch} object.
+ *
+ *
+ * @generated
+ */
+public class SketchItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public SketchItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.SKETCH__THREADS);
+ childrenFeatures.add(ArduinoPackage.Literals.SKETCH__CHANNELS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns Sketch.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Sketch"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Sketch)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Sketch_type") :
+ getString("_UI_Sketch_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Sketch.class)) {
+ case ArduinoPackage.SKETCH__THREADS:
+ case ArduinoPackage.SKETCH__CHANNELS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.SKETCH__THREADS,
+ ArduinoFactory.eINSTANCE.createThread()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.SKETCH__CHANNELS,
+ ArduinoFactory.eINSTANCE.createChannel()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SoundSensorItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SoundSensorItemProvider.java
new file mode 100644
index 00000000..7b930db9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SoundSensorItemProvider.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.SoundSensor;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.SoundSensor} object.
+ *
+ *
+ * @generated
+ */
+public class SoundSensorItemProvider extends ArduinoAnalogModuleItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public SoundSensorItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns SoundSensor.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/SoundSensor"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((SoundSensor)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_SoundSensor_type") :
+ getString("_UI_SoundSensor_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SynchronizationBlockItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SynchronizationBlockItemProvider.java
new file mode 100644
index 00000000..e3c08b1c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/SynchronizationBlockItemProvider.java
@@ -0,0 +1,109 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.SynchronizationBlock} object.
+ *
+ *
+ * @generated
+ */
+public class SynchronizationBlockItemProvider extends ThreadInstructionBlockItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public SynchronizationBlockItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns SynchronizationBlock.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/SynchronizationBlock"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((SynchronizationBlock)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_SynchronizationBlock_type") :
+ getString("_UI_SynchronizationBlock_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ThreadInstructionBlockItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ThreadInstructionBlockItemProvider.java
new file mode 100644
index 00000000..61c8781d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ThreadInstructionBlockItemProvider.java
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.ThreadInstructionBlock;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.ThreadInstructionBlock} object.
+ *
+ *
+ * @generated
+ */
+public class ThreadInstructionBlockItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlockItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addThreadPropertyDescriptor(object);
+ addNextPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Thread feature.
+ *
+ *
+ * @generated
+ */
+ protected void addThreadPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ThreadInstructionBlock_thread_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ThreadInstructionBlock_thread_feature", "_UI_ThreadInstructionBlock_type"),
+ ArduinoPackage.Literals.THREAD_INSTRUCTION_BLOCK__THREAD,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Next feature.
+ *
+ *
+ * @generated
+ */
+ protected void addNextPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ThreadInstructionBlock_next_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ThreadInstructionBlock_next_feature", "_UI_ThreadInstructionBlock_type"),
+ ArduinoPackage.Literals.THREAD_INSTRUCTION_BLOCK__NEXT,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ThreadInstructionBlock)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ThreadInstructionBlock_type") :
+ getString("_UI_ThreadInstructionBlock_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ThreadItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ThreadItemProvider.java
new file mode 100644
index 00000000..10122521
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/ThreadItemProvider.java
@@ -0,0 +1,277 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Thread} object.
+ *
+ *
+ * @generated
+ */
+public class ThreadItemProvider extends NamedElementItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public ThreadItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addChannelsPropertyDescriptor(object);
+ addCurrentInstructionPropertyDescriptor(object);
+ addFirstPropertyDescriptor(object);
+ addLastPropertyDescriptor(object);
+ addNbCyclePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Channels feature.
+ *
+ *
+ * @generated
+ */
+ protected void addChannelsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Thread_channels_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Thread_channels_feature", "_UI_Thread_type"),
+ ArduinoPackage.Literals.THREAD__CHANNELS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Current Instruction feature.
+ *
+ *
+ * @generated
+ */
+ protected void addCurrentInstructionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Thread_currentInstruction_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Thread_currentInstruction_feature", "_UI_Thread_type"),
+ ArduinoPackage.Literals.THREAD__CURRENT_INSTRUCTION,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the First feature.
+ *
+ *
+ * @generated
+ */
+ protected void addFirstPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Thread_first_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Thread_first_feature", "_UI_Thread_type"),
+ ArduinoPackage.Literals.THREAD__FIRST,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Last feature.
+ *
+ *
+ * @generated
+ */
+ protected void addLastPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Thread_last_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Thread_last_feature", "_UI_Thread_type"),
+ ArduinoPackage.Literals.THREAD__LAST,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Nb Cycle feature.
+ *
+ *
+ * @generated
+ */
+ protected void addNbCyclePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Thread_nbCycle_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Thread_nbCycle_feature", "_UI_Thread_type"),
+ ArduinoPackage.Literals.THREAD__NB_CYCLE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.THREAD__BLOCKS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns Thread.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Thread"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((fr.obeo.dsl.arduino.Thread)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Thread_type") :
+ getString("_UI_Thread_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(fr.obeo.dsl.arduino.Thread.class)) {
+ case ArduinoPackage.THREAD__NB_CYCLE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ArduinoPackage.THREAD__BLOCKS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.THREAD__BLOCKS,
+ ArduinoFactory.eINSTANCE.createSynchronizationBlock()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.THREAD__BLOCKS,
+ ArduinoFactory.eINSTANCE.createInstructionBlock()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryBooleanExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryBooleanExpressionItemProvider.java
new file mode 100644
index 00000000..2cd2f65e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryBooleanExpressionItemProvider.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryBooleanOperatorKind;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.UnaryBooleanExpression} object.
+ *
+ *
+ * @generated
+ */
+public class UnaryBooleanExpressionItemProvider extends UnaryExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public UnaryBooleanExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addOperatorPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Operator feature.
+ *
+ *
+ * @generated
+ */
+ protected void addOperatorPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_UnaryBooleanExpression_operator_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_UnaryBooleanExpression_operator_feature", "_UI_UnaryBooleanExpression_type"),
+ ArduinoPackage.Literals.UNARY_BOOLEAN_EXPRESSION__OPERATOR,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns UnaryBooleanExpression.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/UnaryBooleanExpression"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ UnaryBooleanOperatorKind labelValue = ((UnaryBooleanExpression)object).getOperator();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ?
+ getString("_UI_UnaryBooleanExpression_type") :
+ getString("_UI_UnaryBooleanExpression_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(UnaryBooleanExpression.class)) {
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION__OPERATOR:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryExpressionItemProvider.java
new file mode 100644
index 00000000..d1c3bd9e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryExpressionItemProvider.java
@@ -0,0 +1,189 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.UnaryExpression;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.UnaryExpression} object.
+ *
+ *
+ * @generated
+ */
+public class UnaryExpressionItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public UnaryExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_UnaryExpression_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(UnaryExpression.class)) {
+ case ArduinoPackage.UNARY_EXPRESSION__OPERAND:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.UNARY_EXPRESSION__OPERAND,
+ ArduinoFactory.eINSTANCE.createVariableRef()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryIntegerExpressionItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryIntegerExpressionItemProvider.java
new file mode 100644
index 00000000..6c1399bb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UnaryIntegerExpressionItemProvider.java
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerOperatorKind;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.UnaryIntegerExpression} object.
+ *
+ *
+ * @generated
+ */
+public class UnaryIntegerExpressionItemProvider extends UnaryExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public UnaryIntegerExpressionItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addOperatorPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Operator feature.
+ *
+ *
+ * @generated
+ */
+ protected void addOperatorPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_UnaryIntegerExpression_operator_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_UnaryIntegerExpression_operator_feature", "_UI_UnaryIntegerExpression_type"),
+ ArduinoPackage.Literals.UNARY_INTEGER_EXPRESSION__OPERATOR,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns UnaryIntegerExpression.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/UnaryIntegerExpression"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ UnaryIntegerOperatorKind labelValue = ((UnaryIntegerExpression)object).getOperator();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ?
+ getString("_UI_UnaryIntegerExpression_type") :
+ getString("_UI_UnaryIntegerExpression_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(UnaryIntegerExpression.class)) {
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION__OPERATOR:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UtilitiesItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UtilitiesItemProvider.java
new file mode 100644
index 00000000..109a4440
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/UtilitiesItemProvider.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.Utilities;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Utilities} object.
+ *
+ *
+ * @generated
+ */
+public class UtilitiesItemProvider extends InstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public UtilitiesItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Utilities)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Utilities_type") :
+ getString("_UI_Utilities_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableAssignmentItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableAssignmentItemProvider.java
new file mode 100644
index 00000000..00ad31f6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableAssignmentItemProvider.java
@@ -0,0 +1,227 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.VariableAssignment;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.VariableAssignment} object.
+ *
+ *
+ * @generated
+ */
+public class VariableAssignmentItemProvider extends InstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public VariableAssignmentItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addVariablePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Variable feature.
+ *
+ *
+ * @generated
+ */
+ protected void addVariablePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_VariableAssignment_variable_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_VariableAssignment_variable_feature", "_UI_VariableAssignment_type"),
+ ArduinoPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.ASSIGNMENT__OPERAND);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns VariableAssignment.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/VariableAssignment"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((VariableAssignment)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_VariableAssignment_type") :
+ getString("_UI_VariableAssignment_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(VariableAssignment.class)) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBinaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanConstant()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createBooleanModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createIntegerModuleGet()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryBooleanExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createUnaryIntegerExpression()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.ASSIGNMENT__OPERAND,
+ ArduinoFactory.eINSTANCE.createVariableRef()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableDeclarationItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableDeclarationItemProvider.java
new file mode 100644
index 00000000..7451d220
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableDeclarationItemProvider.java
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.VariableDeclaration} object.
+ *
+ *
+ * @generated
+ */
+public class VariableDeclarationItemProvider extends InstructionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public VariableDeclarationItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ArduinoPackage.Literals.VARIABLE_DECLARATION__VARIABLE);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns VariableDeclaration.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/VariableDeclaration"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((VariableDeclaration)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_VariableDeclaration_type") :
+ getString("_UI_VariableDeclaration_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(VariableDeclaration.class)) {
+ case ArduinoPackage.VARIABLE_DECLARATION__VARIABLE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.VARIABLE_DECLARATION__VARIABLE,
+ ArduinoFactory.eINSTANCE.createIntegerVariable()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ArduinoPackage.Literals.VARIABLE_DECLARATION__VARIABLE,
+ ArduinoFactory.eINSTANCE.createBooleanVariable()));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableItemProvider.java
new file mode 100644
index 00000000..e44174be
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableItemProvider.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Variable;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.Variable} object.
+ *
+ *
+ * @generated
+ */
+public class VariableItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public VariableItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ *
+ *
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_NamedElement_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_NamedElement_name_feature", "_UI_NamedElement_type"),
+ ArduinoPackage.Literals.NAMED_ELEMENT__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Variable.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Variable"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Variable)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_Variable_type") :
+ getString("_UI_Variable_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Variable.class)) {
+ case ArduinoPackage.VARIABLE__NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableRefItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableRefItemProvider.java
new file mode 100644
index 00000000..7a297469
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/VariableRefItemProvider.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.VariableRef} object.
+ *
+ *
+ * @generated
+ */
+public class VariableRefItemProvider extends ExpressionItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public VariableRefItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addVariablePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Variable feature.
+ *
+ *
+ * @generated
+ */
+ protected void addVariablePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_VariableRef_variable_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_VariableRef_variable_feature", "_UI_VariableRef_type"),
+ ArduinoPackage.Literals.VARIABLE_REF__VARIABLE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns VariableRef.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/VariableRef"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_VariableRef_type");
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/WhileItemProvider.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/WhileItemProvider.java
new file mode 100644
index 00000000..d9a61258
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.edit/src-gen/fr/obeo/dsl/arduino/provider/WhileItemProvider.java
@@ -0,0 +1,132 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.provider;
+
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.While;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link fr.obeo.dsl.arduino.While} object.
+ *
+ *
+ * @generated
+ */
+public class WhileItemProvider extends ControlItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ *
+ *
+ * @generated
+ */
+ public WhileItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public List getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addConditionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Condition feature.
+ *
+ *
+ * @generated
+ */
+ protected void addConditionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_While_condition_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_While_condition_feature", "_UI_While_type"),
+ ArduinoPackage.Literals.WHILE__CONDITION,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns While.gif.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/While"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((While)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_While_type") :
+ getString("_UI_While_type") + " " + label;
+ }
+
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/.classpath
new file mode 100644
index 00000000..858bac42
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/.project
new file mode 100644
index 00000000..c310c345
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/.project
@@ -0,0 +1,28 @@
+
+
+ fr.obeo.dsl.arduino.editor
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..23d91edd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: fr.obeo.dsl.arduino.editor;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: fr.obeo.dsl.arduino.presentation.ArduinoEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: fr.obeo.dsl.arduino.presentation
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ fr.obeo.dsl.arduino.edit;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.ui.ide;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/build.properties
new file mode 100644
index 00000000..4a0dca34
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/build.properties
@@ -0,0 +1,17 @@
+# Copyright (c) 2013 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
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src-gen/
+output.. = bin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/icons/full/obj16/ArduinoModelFile.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/icons/full/obj16/ArduinoModelFile.gif
new file mode 100644
index 00000000..e5c6e175
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/icons/full/obj16/ArduinoModelFile.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/icons/full/wizban/NewArduino.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/icons/full/wizban/NewArduino.gif
new file mode 100644
index 00000000..caab2147
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/icons/full/wizban/NewArduino.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/plugin.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/plugin.properties
new file mode 100644
index 00000000..95ef0c81
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/plugin.properties
@@ -0,0 +1,60 @@
+# Copyright (c) 2013 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
+
+pluginName = Arduino Editor
+providerName = www.example.org
+
+_UI_ArduinoEditor_menu = &Arduino Editor
+
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+
+_UI_SelectionPage_label = Selection
+_UI_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+
+_UI_OpenEditorError_label = Open Editor
+
+_UI_Wizard_category = Example EMF Model Creation Wizards
+
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+
+_UI_ArduinoModelWizard_label = Arduino Model
+_UI_ArduinoModelWizard_description = Create a new Arduino model
+
+_UI_ArduinoEditor_label = Arduino Model Editor
+
+_UI_ArduinoEditorFilenameDefaultBase = My
+_UI_ArduinoEditorFilenameExtensions = arduino
+
+_UI_Wizard_label = New
+
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor. Do you wish to discard this editor's changes?
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/plugin.xml
new file mode 100644
index 00000000..9ada8ccb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/plugin.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+ %_UI_ArduinoModelWizard_description
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoActionBarContributor.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoActionBarContributor.java
new file mode 100644
index 00000000..8e3372fd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoActionBarContributor.java
@@ -0,0 +1,431 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.presentation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Arduino model editor.
+ *
+ *
+ * @generated
+ */
+public class ArduinoActionBarContributor
+ extends EditingDomainActionBarContributor
+ implements ISelectionChangedListener {
+ /**
+ * This keeps track of the active editor.
+ *
+ *
+ * @generated
+ */
+ protected IEditorPart activeEditorPart;
+
+ /**
+ * This keeps track of the current selection provider.
+ *
+ *
+ * @generated
+ */
+ protected ISelectionProvider selectionProvider;
+
+ /**
+ * This action opens the Properties view.
+ *
+ *
+ * @generated
+ */
+ protected IAction showPropertiesViewAction =
+ new Action(ArduinoEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+ @Override
+ public void run() {
+ try {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ }
+ catch (PartInitException exception) {
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * This action refreshes the viewer of the current editor if the editor
+ * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+ *
+ *
+ * @generated
+ */
+ protected IAction refreshViewerAction =
+ new Action(ArduinoEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+ @Override
+ public boolean isEnabled() {
+ return activeEditorPart instanceof IViewerProvider;
+ }
+
+ @Override
+ public void run() {
+ if (activeEditorPart instanceof IViewerProvider) {
+ Viewer viewer = ((IViewerProvider)activeEditorPart).getViewer();
+ if (viewer != null) {
+ viewer.refresh();
+ }
+ }
+ }
+ };
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ *
+ *
+ * @generated
+ */
+ protected Collection createChildActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+ *
+ *
+ * @generated
+ */
+ protected IMenuManager createChildMenuManager;
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ *
+ *
+ * @generated
+ */
+ protected Collection createSiblingActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+ *
+ *
+ * @generated
+ */
+ protected IMenuManager createSiblingMenuManager;
+
+ /**
+ * This creates an instance of the contributor.
+ *
+ *
+ * @generated
+ */
+ public ArduinoActionBarContributor() {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ validateAction = new ValidateAction();
+ controlAction = new ControlAction();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager) {
+ toolBarManager.add(new Separator("arduino-settings"));
+ toolBarManager.add(new Separator("arduino-additions"));
+ }
+
+ /**
+ * This adds to the menu bar a menu and some separators for editor additions,
+ * as well as the sub-menus for object creation items.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void contributeToMenu(IMenuManager menuManager) {
+ super.contributeToMenu(menuManager);
+
+ IMenuManager submenuManager = new MenuManager(ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoEditor_menu"), "fr.obeo.dsl.arduinoMenuID");
+ menuManager.insertAfter("additions", submenuManager);
+ submenuManager.add(new Separator("settings"));
+ submenuManager.add(new Separator("actions"));
+ submenuManager.add(new Separator("additions"));
+ submenuManager.add(new Separator("additions-end"));
+
+ // Prepare for CreateChild item addition or removal.
+ //
+ createChildMenuManager = new MenuManager(ArduinoEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(ArduinoEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener
+ (new IMenuListener() {
+ public void menuAboutToShow(IMenuManager menuManager) {
+ menuManager.updateAll(true);
+ }
+ });
+
+ addGlobalActions(submenuManager);
+ }
+
+ /**
+ * When the active editor changes, this remembers the change and registers with it as a selection provider.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setActiveEditor(IEditorPart part) {
+ super.setActiveEditor(part);
+ activeEditorPart = part;
+
+ // Switch to the new selection provider.
+ //
+ if (selectionProvider != null) {
+ selectionProvider.removeSelectionChangedListener(this);
+ }
+ if (part == null) {
+ selectionProvider = null;
+ }
+ else {
+ selectionProvider = part.getSite().getSelectionProvider();
+ selectionProvider.addSelectionChangedListener(this);
+
+ // Fake a selection changed event to update the menus.
+ //
+ if (selectionProvider.getSelection() != null) {
+ selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+ }
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+ * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+ * that can be added to the selected object and updating the menus accordingly.
+ *
+ *
+ * @generated
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+ // Remove any menu items for old selection.
+ //
+ if (createChildMenuManager != null) {
+ depopulateManager(createChildMenuManager, createChildActions);
+ }
+ if (createSiblingMenuManager != null) {
+ depopulateManager(createSiblingMenuManager, createSiblingActions);
+ }
+
+ // Query the new selection for appropriate new child/sibling descriptors
+ //
+ Collection> newChildDescriptors = null;
+ Collection> newSiblingDescriptors = null;
+
+ ISelection selection = event.getSelection();
+ if (selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+ Object object = ((IStructuredSelection)selection).getFirstElement();
+
+ EditingDomain domain = ((IEditingDomainProvider)activeEditorPart).getEditingDomain();
+
+ newChildDescriptors = domain.getNewChildDescriptors(object, null);
+ newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+ }
+
+ // Generate actions for selection; populate and redraw the menus.
+ //
+ createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+ createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+ if (createChildMenuManager != null) {
+ populateManager(createChildMenuManager, createChildActions, null);
+ createChildMenuManager.update(true);
+ }
+ if (createSiblingMenuManager != null) {
+ populateManager(createSiblingMenuManager, createSiblingActions, null);
+ createSiblingMenuManager.update(true);
+ }
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in descriptors
,
+ * and returns the collection of these actions.
+ *
+ *
+ * @generated
+ */
+ protected Collection generateCreateChildActions(Collection> descriptors, ISelection selection) {
+ Collection actions = new ArrayList();
+ if (descriptors != null) {
+ for (Object descriptor : descriptors) {
+ actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in descriptors
,
+ * and returns the collection of these actions.
+ *
+ *
+ * @generated
+ */
+ protected Collection generateCreateSiblingActions(Collection> descriptors, ISelection selection) {
+ Collection actions = new ArrayList();
+ if (descriptors != null) {
+ for (Object descriptor : descriptors) {
+ actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This populates the specified manager
with {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the actions
collection,
+ * by inserting them before the specified contribution item contributionID
.
+ * If contributionID
is null
, they are simply added.
+ *
+ *
+ * @generated
+ */
+ protected void populateManager(IContributionManager manager, Collection extends IAction> actions, String contributionID) {
+ if (actions != null) {
+ for (IAction action : actions) {
+ if (contributionID != null) {
+ manager.insertBefore(contributionID, action);
+ }
+ else {
+ manager.add(action);
+ }
+ }
+ }
+ }
+
+ /**
+ * This removes from the specified manager
all {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the actions
collection.
+ *
+ *
+ * @generated
+ */
+ protected void depopulateManager(IContributionManager manager, Collection extends IAction> actions) {
+ if (actions != null) {
+ IContributionItem[] items = manager.getItems();
+ for (int i = 0; i < items.length; i++) {
+ // Look into SubContributionItems
+ //
+ IContributionItem contributionItem = items[i];
+ while (contributionItem instanceof SubContributionItem) {
+ contributionItem = ((SubContributionItem)contributionItem).getInnerItem();
+ }
+
+ // Delete the ActionContributionItems with matching action.
+ //
+ if (contributionItem instanceof ActionContributionItem) {
+ IAction action = ((ActionContributionItem)contributionItem).getAction();
+ if (actions.contains(action)) {
+ manager.remove(contributionItem);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This populates the pop-up menu before it appears.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager) {
+ super.menuAboutToShow(menuManager);
+ MenuManager submenuManager = null;
+
+ submenuManager = new MenuManager(ArduinoEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(ArduinoEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ populateManager(submenuManager, createSiblingActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+ }
+
+ /**
+ * This inserts global actions before the "additions-end" separator.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void addGlobalActions(IMenuManager menuManager) {
+ menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+ menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+ refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+ menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+ super.addGlobalActions(menuManager);
+ }
+
+ /**
+ * This ensures that a delete action will clean up all references to deleted objects.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected boolean removeAllReferencesOnDelete() {
+ return true;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoEditor.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoEditor.java
new file mode 100644
index 00000000..b0e1cc82
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoEditor.java
@@ -0,0 +1,1826 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.presentation;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+import org.eclipse.emf.common.ui.ViewerPane;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import fr.obeo.dsl.arduino.provider.ArduinoItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Arduino model editor.
+ *
+ *
+ * @generated
+ */
+public class ArduinoEditor
+ extends MultiPageEditorPart
+ implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+ /**
+ * This keeps track of the editing domain that is used to track all changes to the model.
+ *
+ *
+ * @generated
+ */
+ protected AdapterFactoryEditingDomain editingDomain;
+
+ /**
+ * This is the one adapter factory used for providing views of the model.
+ *
+ *
+ * @generated
+ */
+ protected ComposedAdapterFactory adapterFactory;
+
+ /**
+ * This is the content outline page.
+ *
+ *
+ * @generated
+ */
+ protected IContentOutlinePage contentOutlinePage;
+
+ /**
+ * This is a kludge...
+ *
+ *
+ * @generated
+ */
+ protected IStatusLineManager contentOutlineStatusLineManager;
+
+ /**
+ * This is the content outline page's viewer.
+ *
+ *
+ * @generated
+ */
+ protected TreeViewer contentOutlineViewer;
+
+ /**
+ * This is the property sheet page.
+ *
+ *
+ * @generated
+ */
+ protected List propertySheetPages = new ArrayList();
+
+ /**
+ * This is the viewer that shadows the selection in the content outline.
+ * The parent relation must be correctly defined for this to work.
+ *
+ *
+ * @generated
+ */
+ protected TreeViewer selectionViewer;
+
+ /**
+ * This inverts the roll of parent and child in the content provider and show parents as a tree.
+ *
+ *
+ * @generated
+ */
+ protected TreeViewer parentViewer;
+
+ /**
+ * This shows how a tree view works.
+ *
+ *
+ * @generated
+ */
+ protected TreeViewer treeViewer;
+
+ /**
+ * This shows how a list view works.
+ * A list viewer doesn't support icons.
+ *
+ *
+ * @generated
+ */
+ protected ListViewer listViewer;
+
+ /**
+ * This shows how a table view works.
+ * A table can be used as a list with icons.
+ *
+ *
+ * @generated
+ */
+ protected TableViewer tableViewer;
+
+ /**
+ * This shows how a tree view with columns works.
+ *
+ *
+ * @generated
+ */
+ protected TreeViewer treeViewerWithColumns;
+
+ /**
+ * This keeps track of the active viewer pane, in the book.
+ *
+ *
+ * @generated
+ */
+ protected ViewerPane currentViewerPane;
+
+ /**
+ * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+ *
+ *
+ * @generated
+ */
+ protected Viewer currentViewer;
+
+ /**
+ * This listens to which ever viewer is active.
+ *
+ *
+ * @generated
+ */
+ protected ISelectionChangedListener selectionChangedListener;
+
+ /**
+ * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+ *
+ *
+ * @generated
+ */
+ protected Collection selectionChangedListeners = new ArrayList();
+
+ /**
+ * This keeps track of the selection of the editor as a whole.
+ *
+ *
+ * @generated
+ */
+ protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+ /**
+ * The MarkerHelper is responsible for creating workspace resource markers presented
+ * in Eclipse's Problems View.
+ *
+ *
+ * @generated
+ */
+ protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+ /**
+ * This listens for when the outline becomes active
+ *
+ *
+ * @generated
+ */
+ protected IPartListener partListener =
+ new IPartListener() {
+ public void partActivated(IWorkbenchPart p) {
+ if (p instanceof ContentOutline) {
+ if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+ getActionBarContributor().setActiveEditor(ArduinoEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ }
+ else if (p instanceof PropertySheet) {
+ if (propertySheetPages.contains(((PropertySheet)p).getCurrentPage())) {
+ getActionBarContributor().setActiveEditor(ArduinoEditor.this);
+ handleActivate();
+ }
+ }
+ else if (p == ArduinoEditor.this) {
+ handleActivate();
+ }
+ }
+ public void partBroughtToTop(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partClosed(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partDeactivated(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partOpened(IWorkbenchPart p) {
+ // Ignore.
+ }
+ };
+
+ /**
+ * Resources that have been removed since last activation.
+ *
+ *
+ * @generated
+ */
+ protected Collection removedResources = new ArrayList();
+
+ /**
+ * Resources that have been changed since last activation.
+ *
+ *
+ * @generated
+ */
+ protected Collection changedResources = new ArrayList();
+
+ /**
+ * Resources that have been saved.
+ *
+ *
+ * @generated
+ */
+ protected Collection savedResources = new ArrayList();
+
+ /**
+ * Map to store the diagnostic associated with a resource.
+ *
+ *
+ * @generated
+ */
+ protected Map resourceToDiagnosticMap = new LinkedHashMap();
+
+ /**
+ * Controls whether the problem indication should be updated.
+ *
+ *
+ * @generated
+ */
+ protected boolean updateProblemIndication = true;
+
+ /**
+ * Adapter used to update the problem indication when resources are demanded loaded.
+ *
+ *
+ * @generated
+ */
+ protected EContentAdapter problemIndicationAdapter =
+ new EContentAdapter() {
+ @Override
+ public void notifyChanged(Notification notification) {
+ if (notification.getNotifier() instanceof Resource) {
+ switch (notification.getFeatureID(Resource.class)) {
+ case Resource.RESOURCE__IS_LOADED:
+ case Resource.RESOURCE__ERRORS:
+ case Resource.RESOURCE__WARNINGS: {
+ Resource resource = (Resource)notification.getNotifier();
+ Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ resourceToDiagnosticMap.put(resource, diagnostic);
+ }
+ else {
+ resourceToDiagnosticMap.remove(resource);
+ }
+
+ if (updateProblemIndication) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+ break;
+ }
+ }
+ }
+ else {
+ super.notifyChanged(notification);
+ }
+ }
+
+ @Override
+ protected void setTarget(Resource target) {
+ basicSetTarget(target);
+ }
+
+ @Override
+ protected void unsetTarget(Resource target) {
+ basicUnsetTarget(target);
+ resourceToDiagnosticMap.remove(target);
+ if (updateProblemIndication) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+ }
+ };
+
+ /**
+ * This listens for workspace changes.
+ *
+ *
+ * @generated
+ */
+ protected IResourceChangeListener resourceChangeListener =
+ new IResourceChangeListener() {
+ public void resourceChanged(IResourceChangeEvent event) {
+ IResourceDelta delta = event.getDelta();
+ try {
+ class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+ protected ResourceSet resourceSet = editingDomain.getResourceSet();
+ protected Collection changedResources = new ArrayList();
+ protected Collection removedResources = new ArrayList();
+
+ public boolean visit(IResourceDelta delta) {
+ if (delta.getResource().getType() == IResource.FILE) {
+ if (delta.getKind() == IResourceDelta.REMOVED ||
+ delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+ Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+ if (resource != null) {
+ if (delta.getKind() == IResourceDelta.REMOVED) {
+ removedResources.add(resource);
+ }
+ else if (!savedResources.remove(resource)) {
+ changedResources.add(resource);
+ }
+ }
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ public Collection getChangedResources() {
+ return changedResources;
+ }
+
+ public Collection getRemovedResources() {
+ return removedResources;
+ }
+ }
+
+ final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+ delta.accept(visitor);
+
+ if (!visitor.getRemovedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty()) {
+ getSite().getPage().closeEditor(ArduinoEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == ArduinoEditor.this) {
+ handleActivate();
+ }
+ }
+ });
+ }
+ }
+ catch (CoreException exception) {
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * Handles activation of the editor or it's associated views.
+ *
+ *
+ * @generated
+ */
+ protected void handleActivate() {
+ // Recompute the read only state.
+ //
+ if (editingDomain.getResourceToReadOnlyMap() != null) {
+ editingDomain.getResourceToReadOnlyMap().clear();
+
+ // Refresh any actions that may become enabled or disabled.
+ //
+ setSelection(getSelection());
+ }
+
+ if (!removedResources.isEmpty()) {
+ if (handleDirtyConflict()) {
+ getSite().getPage().closeEditor(ArduinoEditor.this, false);
+ }
+ else {
+ removedResources.clear();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ }
+ else if (!changedResources.isEmpty()) {
+ changedResources.removeAll(savedResources);
+ handleChangedResources();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ }
+
+ /**
+ * Handles what to do with changed resources on activation.
+ *
+ *
+ * @generated
+ */
+ protected void handleChangedResources() {
+ if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+ if (isDirty()) {
+ changedResources.addAll(editingDomain.getResourceSet().getResources());
+ }
+ editingDomain.getCommandStack().flush();
+
+ updateProblemIndication = false;
+ for (Resource resource : changedResources) {
+ if (resource.isLoaded()) {
+ resource.unload();
+ try {
+ resource.load(Collections.EMPTY_MAP);
+ }
+ catch (IOException exception) {
+ if (!resourceToDiagnosticMap.containsKey(resource)) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ }
+ }
+ }
+
+ if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+ setSelection(StructuredSelection.EMPTY);
+ }
+
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+ }
+
+ /**
+ * Updates the problems indication with the information described in the specified diagnostic.
+ *
+ *
+ * @generated
+ */
+ protected void updateProblemIndication() {
+ if (updateProblemIndication) {
+ BasicDiagnostic diagnostic =
+ new BasicDiagnostic
+ (Diagnostic.OK,
+ "fr.obeo.dsl.arduino.editor",
+ 0,
+ null,
+ new Object [] { editingDomain.getResourceSet() });
+ for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+ if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+ diagnostic.add(childDiagnostic);
+ }
+ }
+
+ int lastEditorPage = getPageCount() - 1;
+ if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+ ((ProblemEditorPart)getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ setActivePage(lastEditorPage);
+ }
+ }
+ else if (diagnostic.getSeverity() != Diagnostic.OK) {
+ ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+ problemEditorPart.setDiagnostic(diagnostic);
+ problemEditorPart.setMarkerHelper(markerHelper);
+ try {
+ addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+ setPageText(lastEditorPage, problemEditorPart.getPartName());
+ setActivePage(lastEditorPage);
+ showTabs();
+ }
+ catch (PartInitException exception) {
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+ markerHelper.deleteMarkers(editingDomain.getResourceSet());
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ try {
+ markerHelper.createMarkers(diagnostic);
+ }
+ catch (CoreException exception) {
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Shows a dialog that asks if conflicting changes should be discarded.
+ *
+ *
+ * @generated
+ */
+ protected boolean handleDirtyConflict() {
+ return
+ MessageDialog.openQuestion
+ (getSite().getShell(),
+ getString("_UI_FileConflict_label"),
+ getString("_WARN_FileConflict"));
+ }
+
+ /**
+ * This creates a model editor.
+ *
+ *
+ * @generated
+ */
+ public ArduinoEditor() {
+ super();
+ initializeEditingDomain();
+ }
+
+ /**
+ * This sets up the editing domain for the model editor.
+ *
+ *
+ * @generated
+ */
+ protected void initializeEditingDomain() {
+ // Create an adapter factory that yields item providers.
+ //
+ adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ArduinoItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ // Create the command stack that will notify this editor as commands are executed.
+ //
+ BasicCommandStack commandStack = new BasicCommandStack();
+
+ // Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+ //
+ commandStack.addCommandStackListener
+ (new CommandStackListener() {
+ public void commandStackChanged(final EventObject event) {
+ getContainer().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+
+ // Try to select the affected objects.
+ //
+ Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
+ if (mostRecentCommand != null) {
+ setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+ }
+ for (Iterator i = propertySheetPages.iterator(); i.hasNext(); ) {
+ PropertySheetPage propertySheetPage = i.next();
+ if (propertySheetPage.getControl().isDisposed()) {
+ i.remove();
+ }
+ else {
+ propertySheetPage.refresh();
+ }
+ }
+ }
+ });
+ }
+ });
+
+ // Create the editing domain with a special command stack.
+ //
+ editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap());
+ }
+
+ /**
+ * This is here for the listener to be able to call it.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void firePropertyChange(int action) {
+ super.firePropertyChange(action);
+ }
+
+ /**
+ * This sets the selection into whichever viewer is active.
+ *
+ *
+ * @generated
+ */
+ public void setSelectionToViewer(Collection> collection) {
+ final Collection> theSelection = collection;
+ // Make sure it's okay.
+ //
+ if (theSelection != null && !theSelection.isEmpty()) {
+ Runnable runnable =
+ new Runnable() {
+ public void run() {
+ // Try to select the items in the current content viewer of the editor.
+ //
+ if (currentViewer != null) {
+ currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+ }
+ }
+ };
+ getSite().getShell().getDisplay().asyncExec(runnable);
+ }
+ }
+
+ /**
+ * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+ * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+ * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+ *
+ *
+ * @generated
+ */
+ public EditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+ /**
+ *
+ *
+ * @generated
+ */
+ public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object [] getElements(Object object) {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object [] getChildren(Object object) {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object) {
+ Object parent = super.getParent(object);
+ return parent != null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object getParent(Object object) {
+ return null;
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setCurrentViewerPane(ViewerPane viewerPane) {
+ if (currentViewerPane != viewerPane) {
+ if (currentViewerPane != null) {
+ currentViewerPane.showFocus(false);
+ }
+ currentViewerPane = viewerPane;
+ }
+ setCurrentViewer(currentViewerPane.getViewer());
+ }
+
+ /**
+ * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+ * is the current one.
+ *
+ *
+ * @generated
+ */
+ public void setCurrentViewer(Viewer viewer) {
+ // If it is changing...
+ //
+ if (currentViewer != viewer) {
+ if (selectionChangedListener == null) {
+ // Create the listener on demand.
+ //
+ selectionChangedListener =
+ new ISelectionChangedListener() {
+ // This just notifies those things that are affected by the section.
+ //
+ public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+ setSelection(selectionChangedEvent.getSelection());
+ }
+ };
+ }
+
+ // Stop listening to the old one.
+ //
+ if (currentViewer != null) {
+ currentViewer.removeSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Start listening to the new one.
+ //
+ if (viewer != null) {
+ viewer.addSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Remember it.
+ //
+ currentViewer = viewer;
+
+ // Set the editors selection based on the current viewer's selection.
+ //
+ setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+ }
+ }
+
+ /**
+ * This returns the viewer as required by the {@link IViewerProvider} interface.
+ *
+ *
+ * @generated
+ */
+ public Viewer getViewer() {
+ return currentViewer;
+ }
+
+ /**
+ * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+ *
+ *
+ * @generated
+ */
+ protected void createContextMenuFor(StructuredViewer viewer) {
+ MenuManager contextMenu = new MenuManager("#PopUp");
+ contextMenu.add(new Separator("additions"));
+ contextMenu.setRemoveAllWhenShown(true);
+ contextMenu.addMenuListener(this);
+ Menu menu= contextMenu.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+ int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+ Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
+ viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+ viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+ }
+
+ /**
+ * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+ *
+ *
+ * @generated
+ */
+ public void createModel() {
+ URI resourceURI = EditUIUtil.getURI(getEditorInput());
+ Exception exception = null;
+ Resource resource = null;
+ try {
+ // Load the resource through the editing domain.
+ //
+ resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+ }
+ catch (Exception e) {
+ exception = e;
+ resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+ }
+
+ Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+ }
+
+ /**
+ * Returns a diagnostic describing the errors and warnings listed in the resource
+ * and the specified exception (if any).
+ *
+ *
+ * @generated
+ */
+ public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+ if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+ BasicDiagnostic basicDiagnostic =
+ new BasicDiagnostic
+ (Diagnostic.ERROR,
+ "fr.obeo.dsl.arduino.editor",
+ 0,
+ getString("_UI_CreateModelError_message", resource.getURI()),
+ new Object [] { exception == null ? (Object)resource : exception });
+ basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+ return basicDiagnostic;
+ }
+ else if (exception != null) {
+ return
+ new BasicDiagnostic
+ (Diagnostic.ERROR,
+ "fr.obeo.dsl.arduino.editor",
+ 0,
+ getString("_UI_CreateModelError_message", resource.getURI()),
+ new Object[] { exception });
+ }
+ else {
+ return Diagnostic.OK_INSTANCE;
+ }
+ }
+
+ /**
+ * This is the method used by the framework to install your own controls.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void createPages() {
+ // Creates the model from the editor input
+ //
+ createModel();
+
+ // Only creates the other pages if there is something that can be edited
+ //
+ if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+ // Create a page for the selection tree view.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ArduinoEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ selectionViewer = (TreeViewer)viewerPane.getViewer();
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+ selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ selectionViewer.setInput(editingDomain.getResourceSet());
+ selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ viewerPane.setTitle(editingDomain.getResourceSet());
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(selectionViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+ }
+
+ // Create a page for the parent tree view.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ArduinoEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ parentViewer = (TreeViewer)viewerPane.getViewer();
+ parentViewer.setAutoExpandLevel(30);
+ parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+ parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(parentViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ParentPage_label"));
+ }
+
+ // This is the page for the list viewer
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ArduinoEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new ListViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ listViewer = (ListViewer)viewerPane.getViewer();
+ listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(listViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ListPage_label"));
+ }
+
+ // This is the page for the tree viewer
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ArduinoEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ treeViewer = (TreeViewer)viewerPane.getViewer();
+ treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(treeViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreePage_label"));
+ }
+
+ // This is the page for the table viewer.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ArduinoEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TableViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ tableViewer = (TableViewer)viewerPane.getViewer();
+
+ Table table = tableViewer.getTable();
+ TableLayout layout = new TableLayout();
+ table.setLayout(layout);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(3, 100, true));
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+
+ TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(2, 100, true));
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+
+ tableViewer.setColumnProperties(new String [] {"a", "b"});
+ tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(tableViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TablePage_label"));
+ }
+
+ // This is the page for the table tree viewer.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ArduinoEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
+
+ Tree tree = treeViewerWithColumns.getTree();
+ tree.setLayoutData(new FillLayout());
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+ objectColumn.setWidth(250);
+
+ TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+ selfColumn.setWidth(200);
+
+ treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});
+ treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(treeViewerWithColumns);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+ }
+
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ setActivePage(0);
+ }
+ });
+ }
+
+ // Ensures that this editor will only display the page's tab
+ // area if there are more than one page
+ //
+ getContainer().addControlListener
+ (new ControlAdapter() {
+ boolean guard = false;
+ @Override
+ public void controlResized(ControlEvent event) {
+ if (!guard) {
+ guard = true;
+ hideTabs();
+ guard = false;
+ }
+ }
+ });
+
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+
+ /**
+ * If there is just one page in the multi-page editor part,
+ * this hides the single tab at the bottom.
+ *
+ *
+ * @generated
+ */
+ protected void hideTabs() {
+ if (getPageCount() <= 1) {
+ setPageText(0, "");
+ if (getContainer() instanceof CTabFolder) {
+ ((CTabFolder)getContainer()).setTabHeight(1);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y + 6);
+ }
+ }
+ }
+
+ /**
+ * If there is more than one page in the multi-page editor part,
+ * this shows the tabs at the bottom.
+ *
+ *
+ * @generated
+ */
+ protected void showTabs() {
+ if (getPageCount() > 1) {
+ setPageText(0, getString("_UI_SelectionPage_label"));
+ if (getContainer() instanceof CTabFolder) {
+ ((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y - 6);
+ }
+ }
+ }
+
+ /**
+ * This is used to track the active viewer.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected void pageChange(int pageIndex) {
+ super.pageChange(pageIndex);
+
+ if (contentOutlinePage != null) {
+ handleContentOutlineSelection(contentOutlinePage.getSelection());
+ }
+ }
+
+ /**
+ * This is how the framework determines which interfaces we implement.
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Object getAdapter(Class key) {
+ if (key.equals(IContentOutlinePage.class)) {
+ return showOutlineView() ? getContentOutlinePage() : null;
+ }
+ else if (key.equals(IPropertySheetPage.class)) {
+ return getPropertySheetPage();
+ }
+ else if (key.equals(IGotoMarker.class)) {
+ return this;
+ }
+ else {
+ return super.getAdapter(key);
+ }
+ }
+
+ /**
+ * This accesses a cached version of the content outliner.
+ *
+ *
+ * @generated
+ */
+ public IContentOutlinePage getContentOutlinePage() {
+ if (contentOutlinePage == null) {
+ // The content outline is just a tree.
+ //
+ class MyContentOutlinePage extends ContentOutlinePage {
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ contentOutlineViewer = getTreeViewer();
+ contentOutlineViewer.addSelectionChangedListener(this);
+
+ // Set up the tree viewer.
+ //
+ contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ // Make sure our popups work.
+ //
+ createContextMenuFor(contentOutlineViewer);
+
+ if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+ // Select the root object in the view.
+ //
+ contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ }
+ }
+
+ @Override
+ public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+ super.makeContributions(menuManager, toolBarManager, statusLineManager);
+ contentOutlineStatusLineManager = statusLineManager;
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ }
+
+ contentOutlinePage = new MyContentOutlinePage();
+
+ // Listen to selection so that we can handle it is a special way.
+ //
+ contentOutlinePage.addSelectionChangedListener
+ (new ISelectionChangedListener() {
+ // This ensures that we handle selections correctly.
+ //
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleContentOutlineSelection(event.getSelection());
+ }
+ });
+ }
+
+ return contentOutlinePage;
+ }
+
+ /**
+ * This accesses a cached version of the property sheet.
+ *
+ *
+ * @generated
+ */
+ public IPropertySheetPage getPropertySheetPage() {
+ PropertySheetPage propertySheetPage =
+ new ExtendedPropertySheetPage(editingDomain) {
+ @Override
+ public void setSelectionToViewer(List> selection) {
+ ArduinoEditor.this.setSelectionToViewer(selection);
+ ArduinoEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+ propertySheetPages.add(propertySheetPage);
+
+ return propertySheetPage;
+ }
+
+ /**
+ * This deals with how we want selection in the outliner to affect the other views.
+ *
+ *
+ * @generated
+ */
+ public void handleContentOutlineSelection(ISelection selection) {
+ if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+ Iterator> selectedElements = ((IStructuredSelection)selection).iterator();
+ if (selectedElements.hasNext()) {
+ // Get the first selected element.
+ //
+ Object selectedElement = selectedElements.next();
+
+ // If it's the selection viewer, then we want it to select the same selection as this selection.
+ //
+ if (currentViewerPane.getViewer() == selectionViewer) {
+ ArrayList selectionList = new ArrayList();
+ selectionList.add(selectedElement);
+ while (selectedElements.hasNext()) {
+ selectionList.add(selectedElements.next());
+ }
+
+ // Set the selection to the widget.
+ //
+ selectionViewer.setSelection(new StructuredSelection(selectionList));
+ }
+ else {
+ // Set the input to the widget.
+ //
+ if (currentViewerPane.getViewer().getInput() != selectedElement) {
+ currentViewerPane.getViewer().setInput(selectedElement);
+ currentViewerPane.setTitle(selectedElement);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply tests the command stack.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean isDirty() {
+ return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply saves the model file.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void doSave(IProgressMonitor progressMonitor) {
+ // Save only resources that have actually changed.
+ //
+ final Map saveOptions = new HashMap();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+ saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
+
+ // Do the work within an operation because this is a long running activity that modifies the workbench.
+ //
+ WorkspaceModifyOperation operation =
+ new WorkspaceModifyOperation() {
+ // This is the method that gets invoked when the operation runs.
+ //
+ @Override
+ public void execute(IProgressMonitor monitor) {
+ // Save the resources to the file system.
+ //
+ boolean first = true;
+ for (Resource resource : editingDomain.getResourceSet().getResources()) {
+ if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+ try {
+ long timeStamp = resource.getTimeStamp();
+ resource.save(saveOptions);
+ if (resource.getTimeStamp() != timeStamp) {
+ savedResources.add(resource);
+ }
+ }
+ catch (Exception exception) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ first = false;
+ }
+ }
+ }
+ };
+
+ updateProblemIndication = false;
+ try {
+ // This runs the options, and shows progress.
+ //
+ new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+ // Refresh the necessary state.
+ //
+ ((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+ }
+ catch (Exception exception) {
+ // Something went wrong that shouldn't.
+ //
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ }
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+
+ /**
+ * This returns whether something has been persisted to the URI of the specified resource.
+ * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+ *
+ *
+ * @generated
+ */
+ protected boolean isPersisted(Resource resource) {
+ boolean result = false;
+ try {
+ InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+ if (stream != null) {
+ result = true;
+ stream.close();
+ }
+ }
+ catch (IOException e) {
+ // Ignore
+ }
+ return result;
+ }
+
+ /**
+ * This always returns true because it is not currently supported.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean isSaveAsAllowed() {
+ return true;
+ }
+
+ /**
+ * This also changes the editor's input.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void doSaveAs() {
+ SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+ saveAsDialog.open();
+ IPath path = saveAsDialog.getResult();
+ if (path != null) {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ if (file != null) {
+ doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+ }
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected void doSaveAs(URI uri, IEditorInput editorInput) {
+ (editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ IProgressMonitor progressMonitor =
+ getActionBars().getStatusLineManager() != null ?
+ getActionBars().getStatusLineManager().getProgressMonitor() :
+ new NullProgressMonitor();
+ doSave(progressMonitor);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void gotoMarker(IMarker marker) {
+ List> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
+ if (!targetObjects.isEmpty()) {
+ setSelectionToViewer(targetObjects);
+ }
+ }
+
+ /**
+ * This is called during startup.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void init(IEditorSite site, IEditorInput editorInput) {
+ setSite(site);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ site.setSelectionProvider(this);
+ site.getPage().addPartListener(partListener);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setFocus() {
+ if (currentViewerPane != null) {
+ currentViewerPane.setFocus();
+ }
+ else {
+ getControl(getActivePage()).setFocus();
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ *
+ *
+ * @generated
+ */
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ *
+ *
+ * @generated
+ */
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.remove(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+ *
+ *
+ * @generated
+ */
+ public ISelection getSelection() {
+ return editorSelection;
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+ * Calling this result will notify the listeners.
+ *
+ *
+ * @generated
+ */
+ public void setSelection(ISelection selection) {
+ editorSelection = selection;
+
+ for (ISelectionChangedListener listener : selectionChangedListeners) {
+ listener.selectionChanged(new SelectionChangedEvent(this, selection));
+ }
+ setStatusLineManager(selection);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStatusLineManager(ISelection selection) {
+ IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
+ contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+ if (statusLineManager != null) {
+ if (selection instanceof IStructuredSelection) {
+ Collection> collection = ((IStructuredSelection)selection).toList();
+ switch (collection.size()) {
+ case 0: {
+ statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+ break;
+ }
+ case 1: {
+ String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+ statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+ break;
+ }
+ default: {
+ statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));
+ break;
+ }
+ }
+ }
+ else {
+ statusLineManager.setMessage("");
+ }
+ }
+ }
+
+ /**
+ * This looks up a string in the plugin's plugin.properties file.
+ *
+ *
+ * @generated
+ */
+ private static String getString(String key) {
+ return ArduinoEditorPlugin.INSTANCE.getString(key);
+ }
+
+ /**
+ * This looks up a string in plugin.properties, making a substitution.
+ *
+ *
+ * @generated
+ */
+ private static String getString(String key, Object s1) {
+ return ArduinoEditorPlugin.INSTANCE.getString(key, new Object [] { s1 });
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+ *
+ *
+ * @generated
+ */
+ public void menuAboutToShow(IMenuManager menuManager) {
+ ((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EditingDomainActionBarContributor getActionBarContributor() {
+ return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IActionBars getActionBars() {
+ return getActionBarContributor().getActionBars();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public AdapterFactory getAdapterFactory() {
+ return adapterFactory;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void dispose() {
+ updateProblemIndication = false;
+
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+ getSite().getPage().removePartListener(partListener);
+
+ adapterFactory.dispose();
+
+ if (getActionBarContributor().getActiveEditor() == this) {
+ getActionBarContributor().setActiveEditor(null);
+ }
+
+ for (PropertySheetPage propertySheetPage : propertySheetPages) {
+ propertySheetPage.dispose();
+ }
+
+ if (contentOutlinePage != null) {
+ contentOutlinePage.dispose();
+ }
+
+ super.dispose();
+ }
+
+ /**
+ * Returns whether the outline view should be presented to the user.
+ *
+ *
+ * @generated
+ */
+ protected boolean showOutlineView() {
+ return true;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoEditorPlugin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoEditorPlugin.java
new file mode 100644
index 00000000..4a9e2a35
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoEditorPlugin.java
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Arduino editor plugin.
+ *
+ *
+ * @generated
+ */
+public final class ArduinoEditorPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ *
+ *
+ * @generated
+ */
+ public static final ArduinoEditorPlugin INSTANCE = new ArduinoEditorPlugin();
+
+ /**
+ * Keep track of the singleton.
+ *
+ *
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ *
+ *
+ * @generated
+ */
+ public ArduinoEditorPlugin() {
+ super
+ (new ResourceLocator [] {
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ *
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ *
+ *
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse Plugin .
+ *
+ *
+ * @generated
+ */
+ public static class Implementation extends EclipseUIPlugin {
+ /**
+ * Creates an instance.
+ *
+ *
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoModelWizard.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoModelWizard.java
new file mode 100644
index 00000000..573f41bb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.editor/src-gen/fr/obeo/dsl/arduino/presentation/ArduinoModelWizard.java
@@ -0,0 +1,636 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.presentation;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.provider.ArduinoEditPlugin;
+
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ *
+ *
+ * @generated
+ */
+public class ArduinoModelWizard extends Wizard implements INewWizard {
+ /**
+ * The supported extensions for created files.
+ *
+ *
+ * @generated
+ */
+ public static final List FILE_EXTENSIONS =
+ Collections.unmodifiableList(Arrays.asList(ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoEditorFilenameExtensions").split("\\s*,\\s*")));
+
+ /**
+ * A formatted list of supported file extensions, suitable for display.
+ *
+ *
+ * @generated
+ */
+ public static final String FORMATTED_FILE_EXTENSIONS =
+ ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoPackage arduinoPackage = ArduinoPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoFactory arduinoFactory = arduinoPackage.getArduinoFactory();
+
+ /**
+ * This is the file creation page.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+ /**
+ * Remember the selection during initialization for populating the default container.
+ *
+ *
+ * @generated
+ */
+ protected IStructuredSelection selection;
+
+ /**
+ * Remember the workbench during initialization.
+ *
+ *
+ * @generated
+ */
+ protected IWorkbench workbench;
+
+ /**
+ * Caches the names of the types that can be created as the root object.
+ *
+ *
+ * @generated
+ */
+ protected List initialObjectNames;
+
+ /**
+ * This just records the information.
+ *
+ *
+ * @generated
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(ArduinoEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ArduinoEditorPlugin.INSTANCE.getImage("full/wizban/NewArduino")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ *
+ *
+ * @generated
+ */
+ protected Collection getInitialObjectNames() {
+ if (initialObjectNames == null) {
+ initialObjectNames = new ArrayList();
+ for (EClassifier eClassifier : arduinoPackage.getEClassifiers()) {
+ if (eClassifier instanceof EClass) {
+ EClass eClass = (EClass)eClassifier;
+ if (!eClass.isAbstract()) {
+ initialObjectNames.add(eClass.getName());
+ }
+ }
+ }
+ Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+ }
+ return initialObjectNames;
+ }
+
+ /**
+ * Create a new model.
+ *
+ *
+ * @generated
+ */
+ protected EObject createInitialModel() {
+ EClass eClass = (EClass)arduinoPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = arduinoFactory.create(eClass);
+ return rootObject;
+ }
+
+ /**
+ * Do the work after everything is specified.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean performFinish() {
+ try {
+ // Remember the file.
+ //
+ final IFile modelFile = getModelFile();
+
+ // Do the work within an operation.
+ //
+ WorkspaceModifyOperation operation =
+ new WorkspaceModifyOperation() {
+ @Override
+ protected void execute(IProgressMonitor progressMonitor) {
+ try {
+ // Create a resource set
+ //
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ // Get the URI of the model file.
+ //
+ URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+ // Create a resource for this file.
+ //
+ Resource resource = resourceSet.createResource(fileURI);
+
+ // Add the initial model object to the contents.
+ //
+ EObject rootObject = createInitialModel();
+ if (rootObject != null) {
+ resource.getContents().add(rootObject);
+ }
+
+ // Save the contents of the resource to the file system.
+ //
+ Map options = new HashMap();
+ options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+ resource.save(options);
+ }
+ catch (Exception exception) {
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ }
+ finally {
+ progressMonitor.done();
+ }
+ }
+ };
+
+ getContainer().run(false, false, operation);
+
+ // Select the new file resource in the current view.
+ //
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ IWorkbenchPage page = workbenchWindow.getActivePage();
+ final IWorkbenchPart activePart = page.getActivePart();
+ if (activePart instanceof ISetSelectionTarget) {
+ final ISelection targetSelection = new StructuredSelection(modelFile);
+ getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ ((ISetSelectionTarget)activePart).selectReveal(targetSelection);
+ }
+ });
+ }
+
+ // Open an editor on the new file.
+ //
+ try {
+ page.openEditor
+ (new FileEditorInput(modelFile),
+ workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString()).getId());
+ }
+ catch (PartInitException exception) {
+ MessageDialog.openError(workbenchWindow.getShell(), ArduinoEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ }
+ catch (Exception exception) {
+ ArduinoEditorPlugin.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ *
+ *
+ * @generated
+ */
+ public class ArduinoModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+ /**
+ * Pass in the selection.
+ *
+ *
+ * @generated
+ */
+ public ArduinoModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+ super(pageId, selection);
+ }
+
+ /**
+ * The framework calls this to see if the file is correct.
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected boolean validatePage() {
+ if (super.validatePage()) {
+ String extension = new Path(getFileName()).getFileExtension();
+ if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+ String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+ setErrorMessage(ArduinoEditorPlugin.INSTANCE.getString(key, new Object [] { FORMATTED_FILE_EXTENSIONS }));
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IFile getModelFile() {
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+ }
+ }
+
+ /**
+ * This is the page where the type of object to create is selected.
+ *
+ *
+ * @generated
+ */
+ public class ArduinoModelWizardInitialObjectCreationPage extends WizardPage {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Combo initialObjectField;
+
+ /**
+ * @generated
+ *
+ *
+ */
+ protected List encodings;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Combo encodingField;
+
+ /**
+ * Pass in the selection.
+ *
+ *
+ * @generated
+ */
+ public ArduinoModelWizardInitialObjectCreationPage(String pageId) {
+ super(pageId);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ {
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 12;
+ composite.setLayout(layout);
+
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.grabExcessVerticalSpace = true;
+ data.horizontalAlignment = GridData.FILL;
+ composite.setLayoutData(data);
+ }
+
+ Label containerLabel = new Label(composite, SWT.LEFT);
+ {
+ containerLabel.setText(ArduinoEditorPlugin.INSTANCE.getString("_UI_ModelObject"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ containerLabel.setLayoutData(data);
+ }
+
+ initialObjectField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ initialObjectField.setLayoutData(data);
+ }
+
+ for (String objectName : getInitialObjectNames()) {
+ initialObjectField.add(getLabel(objectName));
+ }
+
+ if (initialObjectField.getItemCount() == 1) {
+ initialObjectField.select(0);
+ }
+ initialObjectField.addModifyListener(validator);
+
+ Label encodingLabel = new Label(composite, SWT.LEFT);
+ {
+ encodingLabel.setText(ArduinoEditorPlugin.INSTANCE.getString("_UI_XMLEncoding"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ encodingLabel.setLayoutData(data);
+ }
+ encodingField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ encodingField.setLayoutData(data);
+ }
+
+ for (String encoding : getEncodings()) {
+ encodingField.add(encoding);
+ }
+
+ encodingField.select(0);
+ encodingField.addModifyListener(validator);
+
+ setPageComplete(validatePage());
+ setControl(composite);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ModifyListener validator =
+ new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ setPageComplete(validatePage());
+ }
+ };
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected boolean validatePage() {
+ return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ if (visible) {
+ if (initialObjectField.getItemCount() == 1) {
+ initialObjectField.clearSelection();
+ encodingField.setFocus();
+ }
+ else {
+ encodingField.clearSelection();
+ initialObjectField.setFocus();
+ }
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getInitialObjectName() {
+ String label = initialObjectField.getText();
+
+ for (String name : getInitialObjectNames()) {
+ if (getLabel(name).equals(label)) {
+ return name;
+ }
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getEncoding() {
+ return encodingField.getText();
+ }
+
+ /**
+ * Returns the label for the specified type name.
+ *
+ *
+ * @generated
+ */
+ protected String getLabel(String typeName) {
+ try {
+ return ArduinoEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+ }
+ catch(MissingResourceException mre) {
+ ArduinoEditorPlugin.INSTANCE.log(mre);
+ }
+ return typeName;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Collection getEncodings() {
+ if (encodings == null) {
+ encodings = new ArrayList();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(ArduinoEditorPlugin.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens(); ) {
+ encodings.add(stringTokenizer.nextToken());
+ }
+ }
+ return encodings;
+ }
+ }
+
+ /**
+ * The framework calls this to create the contents of the wizard.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void addPages() {
+ // Create a page, set the title, and the initial model file name.
+ //
+ newFileCreationPage = new ArduinoModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoModelWizard_label"));
+ newFileCreationPage.setDescription(ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoModelWizard_description"));
+ newFileCreationPage.setFileName(ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));
+ addPage(newFileCreationPage);
+
+ // Try and get the resource selection to determine a current directory for the file dialog.
+ //
+ if (selection != null && !selection.isEmpty()) {
+ // Get the resource...
+ //
+ Object selectedElement = selection.iterator().next();
+ if (selectedElement instanceof IResource) {
+ // Get the resource parent, if its a file.
+ //
+ IResource selectedResource = (IResource)selectedElement;
+ if (selectedResource.getType() == IResource.FILE) {
+ selectedResource = selectedResource.getParent();
+ }
+
+ // This gives us a directory...
+ //
+ if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+ // Set this for the container.
+ //
+ newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+ // Make up a unique new name here.
+ //
+ String defaultModelBaseFilename = ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoEditorFilenameDefaultBase");
+ String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+ String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+ for (int i = 1; ((IContainer)selectedResource).findMember(modelFilename) != null; ++i) {
+ modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+ }
+ newFileCreationPage.setFileName(modelFilename);
+ }
+ }
+ }
+ initialObjectCreationPage = new ArduinoModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(ArduinoEditorPlugin.INSTANCE.getString("_UI_ArduinoModelWizard_label"));
+ initialObjectCreationPage.setDescription(ArduinoEditorPlugin.INSTANCE.getString("_UI_Wizard_initial_object_description"));
+ addPage(initialObjectCreationPage);
+ }
+
+ /**
+ * Get the file from the page.
+ *
+ *
+ * @generated
+ */
+ public IFile getModelFile() {
+ return newFileCreationPage.getModelFile();
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.classpath
new file mode 100644
index 00000000..64c5e31b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.project
new file mode 100644
index 00000000..0e157150
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.project
@@ -0,0 +1,28 @@
+
+
+ fr.obeo.dsl.arduino.gen.ui
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.settings/org.eclipse.jdt.core.prefs b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..d1c0bf94
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/.settings/org.eclipse.jdt.core.prefs
@@ -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
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..a0cd1bca
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Acceleo Gen Module IDE Plug-in
+Bundle-SymbolicName: fr.obeo.dsl.arduino.gen.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: fr.obeo.dsl.arduino.gen.ui.Activator
+Bundle-Vendor: Eclipse Modeling Project
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ fr.obeo.dsl.arduino.gen,
+ 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
+Export-Package: fr.obeo.dsl.arduino.gen.ui,
+ fr.obeo.dsl.arduino.gen.ui.common,
+ fr.obeo.dsl.arduino.gen.ui.popupMenus
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/build.properties
new file mode 100644
index 00000000..d0a0e71d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ icons/
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/icons/default.gif b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/icons/default.gif
new file mode 100644
index 00000000..6a04c491
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/icons/default.gif differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/plugin.xml
new file mode 100644
index 00000000..4713b5a1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/plugin.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/Activator.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/Activator.java
new file mode 100644
index 00000000..194fd45e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/Activator.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * 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 fr.obeo.dsl.arduino.gen.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 = "fr.obeo.dsl.arduino.gen.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
+ */
+ 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
+ */
+ 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/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/common/GenerateAll.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/common/GenerateAll.java
new file mode 100644
index 00000000..bf9fbc90
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/common/GenerateAll.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * 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 fr.obeo.dsl.arduino.gen.ui.common;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.osgi.framework.Bundle;
+
+
+/**
+ * Main entry point of the 'Gen' 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("fr.obeo.dsl.arduino.gen", new Path("/fr/obeo/dsl/arduino/gen/main/generate.emtl"));
+ // fr.obeo.dsl.arduino.gen.main.Generate gen0 = new fr.obeo.dsl.arduino.gen.main.Generate(modelURI, targetFolder.getLocation().toFile(), arguments) {
+ // protected URI createTemplateURI(String entry) {
+ // return template0;
+ // }
+ //};
+ //gen0.doGenerate(BasicMonitor.toMonitor(monitor));
+ monitor.subTask("Loading...");
+ fr.obeo.dsl.arduino.gen.main.Generate gen0 = new fr.obeo.dsl.arduino.gen.main.Generate(modelURI, targetFolder.getLocation().toFile(), arguments);
+ monitor.worked(1);
+ String generationID = org.eclipse.acceleo.engine.utils.AcceleoLaunchingUtil.computeUIProjectID("fr.obeo.dsl.arduino.gen", "fr.obeo.dsl.arduino.gen.main.Generate", modelURI.toString(), targetFolder.getFullPath().toString(), new ArrayList());
+ gen0.setGenerationID(generationID);
+ gen0.doGenerate(BasicMonitor.toMonitor(monitor));
+
+
+ }
+
+ /**
+ * Finds the template in the plug-in. Returns the template plug-in URI.
+ *
+ * @param bundleID
+ * is the plug-in ID
+ * @param relativePath
+ * is the relative path of the template in the plug-in
+ * @return the template URI
+ * @throws IOException
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ private URI getTemplateURI(String bundleID, IPath relativePath) throws IOException {
+ Bundle bundle = Platform.getBundle(bundleID);
+ if (bundle == null) {
+ // no need to go any further
+ return URI.createPlatformResourceURI(new Path(bundleID).append(relativePath).toString(), false);
+ }
+ URL url = bundle.getEntry(relativePath.toString());
+ if (url == null && relativePath.segmentCount() > 1) {
+ Enumeration entries = bundle.findEntries("/", "*.emtl", true);
+ if (entries != null) {
+ String[] segmentsRelativePath = relativePath.segments();
+ while (url == null && entries.hasMoreElements()) {
+ URL entry = entries.nextElement();
+ IPath path = new Path(entry.getPath());
+ if (path.segmentCount() > relativePath.segmentCount()) {
+ path = path.removeFirstSegments(path.segmentCount() - relativePath.segmentCount());
+ }
+ String[] segmentsPath = path.segments();
+ boolean equals = segmentsPath.length == segmentsRelativePath.length;
+ for (int i = 0; equals && i < segmentsPath.length; i++) {
+ equals = segmentsPath[i].equals(segmentsRelativePath[i]);
+ }
+ if (equals) {
+ url = bundle.getEntry(entry.getPath());
+ }
+ }
+ }
+ }
+ URI result;
+ if (url != null) {
+ result = URI.createPlatformPluginURI(new Path(bundleID).append(new Path(url.getPath())).toString(), false);
+ } else {
+ result = URI.createPlatformResourceURI(new Path(bundleID).append(relativePath).toString(), false);
+ }
+ return result;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/popupMenus/AcceleoGenerateGenAction.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/popupMenus/AcceleoGenerateGenAction.java
new file mode 100644
index 00000000..4da67dcc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen.ui/src/fr/obeo/dsl/arduino/gen/ui/popupMenus/AcceleoGenerateGenAction.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * 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 fr.obeo.dsl.arduino.gen.ui.popupMenus;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IContainer;
+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.action.IAction;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import fr.obeo.dsl.arduino.gen.ui.Activator;
+import fr.obeo.dsl.arduino.gen.ui.common.GenerateAll;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+
+/**
+ * Gen code generation.
+ */
+public class AcceleoGenerateGenAction extends ActionDelegate implements IActionDelegate {
+
+ /**
+ * Selected model files.
+ */
+ protected List files;
+
+ /**{@inheritDoc}
+ *
+ * @see org.eclipse.ui.actions.ActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ public void selectionChanged(IAction action, ISelection selection) {
+ if (selection instanceof IStructuredSelection) {
+ files = ((IStructuredSelection) selection).toList();
+ }
+ }
+
+ /**{@inheritDoc}
+ *
+ * @see org.eclipse.ui.actions.ActionDelegate#run(org.eclipse.jface.action.IAction)
+ * @generated
+ */
+ public void run(IAction action) {
+ if (files != null) {
+ IRunnableWithProgress operation = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) {
+ try {
+ Iterator filesIt = files.iterator();
+ while (filesIt.hasNext()) {
+ IFile model = (IFile)filesIt.next();
+ URI modelURI = URI.createPlatformResourceURI(model.getFullPath().toString(), true);
+ try {
+ IContainer target = model.getProject().getFolder("src-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 {
+ model.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);
+ }
+ }
+ }
+
+ /**
+ * Computes the arguments of the generator.
+ *
+ * @return the arguments
+ * @generated
+ */
+ protected List extends Object> getArguments() {
+ return new ArrayList();
+ }
+
+}
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/.classpath
new file mode 100644
index 00000000..bf1769bc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/.project
new file mode 100644
index 00000000..3bf9ce00
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/.project
@@ -0,0 +1,35 @@
+
+
+ fr.obeo.dsl.arduino.gen
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.acceleo.ide.ui.acceleoBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.acceleo.ide.ui.acceleoNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..5ba27e48
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Acceleo Gen Module Runtime Plug-in
+Bundle-SymbolicName: fr.obeo.dsl.arduino.gen
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: fr.obeo.dsl.arduino.gen.Activator
+Bundle-Vendor: Eclipse Modeling Project
+Require-Bundle: org.eclipse.core.runtime,
+ fr.obeo.dsl.arduino,
+ 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
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Eclipse-LazyStart: true
+Export-Package: fr.obeo.dsl.arduino.gen.main
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/build.properties
new file mode 100644
index 00000000..dc056cb7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
+customBuildCallbacks = build.acceleo
+jre.compilation.profile = JavaSE-1.6
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/pom.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/pom.xml
new file mode 100644
index 00000000..0ee9e589
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/pom.xml
@@ -0,0 +1,72 @@
+
+
+
+ 4.0.0
+
+
+ fr.obeo.dsl.arduino
+ parent
+ 1.0.0-SNAPSHOT
+ ../../releng/fr.obeo.dsl.arduino.parent
+
+
+ fr.obeo.dsl.arduino.gen
+ eclipse-plugin
+
+ Arduino Acceleo Generator
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+
+
+ org.eclipse.acceleo
+ org.eclipse.acceleo.maven
+ 3.5.0-SNAPSHOT
+
+
+ compile
+
+ acceleo-compile
+
+
+
+
+ false
+ true
+
+ ${project.basedir}
+
+
+ src
+ target/classes
+
+
+
+
+ fr.obeo.dsl.arduino.ArduinoPackage
+
+ org.eclipse.acceleo.maven.AcceleoURIHandler
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/Activator.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/Activator.java
new file mode 100644
index 00000000..715124f9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/Activator.java
@@ -0,0 +1,82 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.gen;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+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 = "fr.obeo.dsl.arduino.gen";
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The constructor.
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.runtime.Plugin#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;
+ }
+
+ /**
+ * A helper to log plugin errors.
+ *
+ * @param severity
+ * the error severity.
+ * @param message
+ * the error message.
+ * @param exception
+ * the error exception.
+ */
+ public static void log(int severity, String message, Throwable exception) {
+ getDefault().getLog().log(
+ new Status(severity, PLUGIN_ID, message, exception));
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/ArduinoGenServices.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/ArduinoGenServices.java
new file mode 100644
index 00000000..4db3b615
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/ArduinoGenServices.java
@@ -0,0 +1,188 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.gen.main;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Constant;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.BinaryExpression;
+import fr.obeo.dsl.arduino.ModuleGet;
+import fr.obeo.dsl.arduino.Repeat;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.UnaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.UnaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Variable;
+
+public class ArduinoGenServices {
+
+ public int getRepeatInstructionIndex(Sketch sketch, Repeat repeat) {
+ int i = 0;
+ for (Iterator iterator = sketch.eAllContents(); iterator.hasNext();) {
+ Instruction instruction = (Instruction) iterator.next();
+ i++;
+ if (instruction instanceof Repeat && instruction.equals(repeat)) {
+ return i;
+ }
+ }
+
+ return 0;
+ }
+
+ public String getValue(Expression value) {
+ if (value instanceof Variable) {
+ return ((Variable) value).getName();
+ }
+ if (value instanceof Constant) {
+ return "Constant";//value.getValue();
+ }
+ if (value instanceof BinaryBooleanExpression) {
+ return "(" + getValue(((BinaryExpression) value).getLeft())
+ + getOperator(((BinaryBooleanExpression) value).getOperator())
+ + getValue(((BinaryExpression) value).getRight()) + ")";
+ }
+ if (value instanceof BinaryIntegerExpression) {
+ return "(" + getValue(((BinaryExpression) value).getLeft())
+ + getOperator(((BinaryIntegerExpression) value).getOperator())
+ + getValue(((BinaryExpression) value).getRight()) + ")";
+ }
+ if (value instanceof ModuleGet) {
+ return ((ModuleGet) value).getModule().getName().replaceAll(" ", "");
+ }
+ return null;
+ }
+
+ public String getOperator(Enumerator operator) {
+ return "operator not supported";
+ }
+ public String getOperator(BinaryIntegerOperatorKind operator) {
+ switch (operator) {
+ case DIV:
+ return "/";
+ case MAX:
+ return "max";
+ case MIN:
+ return "min";
+ case MINUS:
+ return "-";
+ case MUL:
+ return "*";
+ case PLUS:
+ return "+";
+ case POURCENT:
+ return "%";
+ }
+ return null;
+ }
+
+ public String getOperator(UnaryIntegerOperatorKind operator) {
+ switch (operator) {
+ case MINUS:
+ return "-";
+ case SQUARE_ROOT:
+ return "sqrt";
+ }
+ return null;
+ }
+
+ public String getOperator(UnaryBooleanOperatorKind operator) {
+ switch (operator) {
+ case NOT:
+ return "!";
+ }
+ return null;
+ }
+
+ public String getOperator(BinaryBooleanOperatorKind operator) {
+ switch (operator) {
+ case AND:
+ return "&";
+ case DIFFERENT:
+ return "!=";
+ case EQUAL:
+ return "==";
+ case OR:
+ return "or";
+ case SUP:
+ return ">";
+ case SUP_OR_EQUAL:
+ return ">=";
+ case INF:
+ return "<";
+ case INF_OR_EQUAL:
+ return "<=";
+ }
+ return null;
+ }
+
+ public Enumerator getOperator(String operator) {
+
+ if (operator.equals("/") || operator.equals("div")) {
+ return BinaryIntegerOperatorKind.DIV;
+ }
+ if (operator.equals("max")) {
+ return BinaryIntegerOperatorKind.MAX;
+ }
+ if (operator.equals("min")) {
+ return BinaryIntegerOperatorKind.MIN;
+ }
+ if (operator.equals("-") || operator.equals("minus")) {
+ return BinaryIntegerOperatorKind.MINUS;
+ }
+ if (operator.equals("*") || operator.equals("mul")) {
+ return BinaryIntegerOperatorKind.MUL;
+ }
+ if (operator.equals("+") || operator.equals("plus")) {
+ return BinaryIntegerOperatorKind.PLUS;
+ }
+ if (operator.equals("%") || operator.equals("pourcent")) {
+ return BinaryIntegerOperatorKind.POURCENT;
+ }
+
+ if (operator.equals("&") || operator.equals("and")) {
+ return BinaryBooleanOperatorKind.AND;
+ }
+ if (operator.equals("!=") || operator.equals("diff")) {
+ return BinaryBooleanOperatorKind.DIFFERENT;
+ }
+ if (operator.equals("==") || operator.equals("equal")) {
+ return BinaryBooleanOperatorKind.EQUAL;
+ }
+ if (operator.equals("<") || operator.equals("lower")) {
+ return BinaryBooleanOperatorKind.INF;
+ }
+ if (operator.equals("<=") || operator.equals("lowerOrEqual")) {
+ return BinaryBooleanOperatorKind.INF_OR_EQUAL;
+ }
+ if (operator.equals("or")) {
+ return BinaryBooleanOperatorKind.OR;
+ }
+ if (operator.equals(">") || operator.equals("upper")) {
+ return BinaryBooleanOperatorKind.SUP;
+ }
+ if (operator.equals(">=") || operator.equals("upperOrEqual")) {
+ return BinaryBooleanOperatorKind.SUP_OR_EQUAL;
+ }
+ if (operator.equals("not")) {
+ return UnaryBooleanOperatorKind.NOT;
+ }
+
+ return null;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/Generate.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/Generate.java
new file mode 100644
index 00000000..4faa99ad
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/Generate.java
@@ -0,0 +1,429 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.gen.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 'Generate' generation module.
+ *
+ * @generated
+ */
+public class Generate extends AbstractAcceleoGenerator {
+ /**
+ * The name of the module.
+ *
+ * @generated
+ */
+ public static final String MODULE_FILE_NAME = "/fr/obeo/dsl/arduino/gen/main/generate";
+
+ /**
+ * The name of the templates that are to be generated.
+ *
+ * @generated
+ */
+ public static final String[] TEMPLATE_NAMES = { "generateSketch" };
+
+ /**
+ * The list of properties files from the launch parameters (Launch
+ * configuration).
+ *
+ * @generated
+ */
+ private List propertiesFiles = new ArrayList();
+
+ /**
+ * 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.
+ *
+ * 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()}.
+ *
+ *
+ * @generated
+ */
+ public Generate() {
+ // 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 Generate(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 Generate(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 arguments = new ArrayList();
+
+ /*
+ * 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.
+ */
+
+ Generate generator = new Generate(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 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 getGenerationListeners() {
+ List 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.
+ *
+ * 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.
+ *
+ *
+ * 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}
+ * . Note , however, that this cannot be used standalone.
+ *
+ *
+ * All three of these default strategies support merging through JMerge.
+ *
+ *
+ * @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 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);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/arduinoservices.mtl b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/arduinoservices.mtl
new file mode 100644
index 00000000..4a12acef
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/arduinoservices.mtl
@@ -0,0 +1,18 @@
+[comment encoding = UTF-8 /]
+[module arduinoservices('http://www.obeo.fr/arduino')/]
+
+[query public getRepeatInstructionIndex(arg0 : Sketch, arg1 : Repeat) : Integer
+ = invoke('fr.obeo.dsl.arduino.gen.main.ArduinoGenServices', 'getRepeatInstructionIndex(fr.obeo.dsl.arduino.Sketch, fr.obeo.dsl.arduino.Repeat)', Sequence{arg0,arg1})
+/]
+
+[query public getOperator(arg0 : BinaryIntegerOperatorKind) : String
+ = invoke('fr.obeo.dsl.arduino.gen.main.ArduinoGenServices', 'getOperator(fr.obeo.dsl.arduino.BinaryIntegerOperatorKind)', Sequence{arg0})
+/]
+
+[query public getOperator(arg0 : BinaryBooleanOperatorKind) : String
+ = invoke('fr.obeo.dsl.arduino.gen.main.ArduinoGenServices', 'getOperator(fr.obeo.dsl.arduino.BinaryBooleanOperatorKind)', Sequence{arg0})
+/]
+
+[query public getValue(arg0 : Expression) : String
+ = invoke('fr.obeo.dsl.arduino.gen.main.ArduinoGenServices', 'getValue(fr.obeo.dsl.arduino.Expression)', Sequence{arg0})
+/]
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/generate.mtl b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/generate.mtl
new file mode 100644
index 00000000..dd919423
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/src/fr/obeo/dsl/arduino/gen/main/generate.mtl
@@ -0,0 +1,258 @@
+[comment encoding = UTF-8 /]
+[module generate('http://www.obeo.fr/arduino')]
+[import fr::obeo::dsl::arduino::gen::main::arduinoservices /]
+
+
+[template public generateSketch(sketch : Sketch)]
+
+[comment @main/]
+[genIno()/]
+[genMakefile()/]
+[/template]
+
+[template public genIno (sketch : Sketch) ]
+[file (sketch.getVariableName()+'.ino', false, 'UTF-8')]
+[for (library : Library | sketch.eAllContents("ModuleAssignment").module->select(library<>arduino::Library::none).library->asOrderedSet())]
+#include <[library.toString().toUpperFirst()/].h>
+[/for]
+[for (mod : Module | sketch.eAllContents("ModuleInstruction").module->asOrderedSet())]
+[if (mod.library<>arduino::Library::music)]
+int [mod.getVariableName()/] = [sketch.getPinId(mod)/];
+[/if]
+[/for]
+[for (mod : Module | sketch.eAllContents("ModuleAssignment").module->select(library<>arduino::Library::none)->asOrderedSet())]
+[mod.library.toString().toUpperFirst()/] [mod.getVariableName()/];
+[/for]
+[for (mod : Module | sketch.eAllContents("ModuleGet").module->select(m |m.oclIsKindOf(Sensor))->asOrderedSet())]
+int [mod.getVariableName()/] = [sketch.getPinId(mod)/];
+[/for]
+[for (instruction : Repeat | getRepeatInstructions(sketch))]
+int iter_[eContainer(arduino::Sketch).getRepeatInstructionIndex(instruction)/];
+[/for]
+[for (instruction : VariableDeclaration | sketch.eAllContents("VariableDeclaration"))]
+[if (instruction.variable.oclIsTypeOf(IntegerVariable))]int [instruction.variable.name/];[/if]
+[if (instruction.variable.oclIsTypeOf(BooleanVariable))]short unsigned int [instruction.variable.name/];[/if]
+[/for]
+
+void setup() {
+[if (sketch.eAllContents("ModuleAssignment").module.library->select(lib|lib = arduino::Library::music)->asOrderedSet()->size()>=1)]
+ music.init();
+[/if]
+[for (mod : Module | sketch.eAllContents("ModuleAssignment").module->asOrderedSet())]
+[if (mod.library<>arduino::Library::music)]
+ pinMode([mod.getVariableName()/], OUTPUT);
+[/if]
+[/for]
+[for (mod : Module | sketch.eAllContents("ModuleAssignment").module->select(library<>arduino::Library::none)->asOrderedSet())]
+ [mod.getVariableName()/].attach([sketch.getPinId(mod)/]);
+[/for]
+[for (instruction : VariableDeclaration | sketch.eAllContents("VariableDeclaration"))]
+[if (instruction.variable.oclIsTypeOf(IntegerVariable))][instruction.variable.name/] = [instruction.variable.oclAsType(IntegerVariable).initialValue/];[/if]
+[if (instruction.variable.oclIsTypeOf(BooleanVariable))][instruction.variable.name/] = [instruction.variable.oclAsType(BooleanVariable).initialValue/];[/if]
+[/for]
+}
+
+// the loop routine runs over and over again forever:
+void loop() {
+ [sketch.next.genINO()/]
+}
+[/file]
+[/template]
+
+[template public genINO(i : Instruction)post (trim())]
+[i.generateInstruction()/]
+[if (not i.oclIsInvalid() and not i.next.oclIsInvalid() and not i.next.oclIsKindOf(arduino::Sketch))]
+[genINO(i.next)/]
+[/if]
+[/template]
+
+
+[template public genMakefile (sketch : Sketch) ]
+[file ('Makefile', false, 'UTF-8')]
+BOARD_TAG = uno
+ARDUINO_PORT = /dev/ttyACM0
+ARDUINO_LIBS = [for (library : Library | sketch.eAllContents("ModuleAssignment").module->select(library<>arduino::Library::none).library->asOrderedSet())][library.toString().toUpperFirst()/][/for]
+
+include /usr/share/arduino/Arduino.mk
+[/file]
+[/template]
+
+[template public generateInstruction(instruction : Delay)post (trim())]
+delay([instruction.value/]);
+[/template]
+
+[template public generateInstruction(instruction : ModuleAssignment)post (trim())]
+[if (instruction.module.library=arduino::Library::music)]
+[if (instruction.operand.oclIsTypeOf(BooleanConstant) and instruction.operand.oclAsType(BooleanConstant).value=false)]
+ music.play();
+[else]
+ music.pause();
+[/if]
+[else]
+digitalWrite([instruction.module.getVariableName()/], [getStatus(instruction)/]);
+[/if]
+
+[/template]
+
+[template public generateInstruction(instruction : ModuleGet)post (trim())]
+[instruction.module.getVariableName()/]_value
+[/template]
+
+[template private getStatus(instruction : ModuleAssignment)post (trim())]
+[if ((not instruction.operand.oclIsInvalid()) and instruction.operand.oclIsTypeOf(BooleanConstant))]
+ [if (instruction.operand.oclAsType(BooleanConstant).value=false)]
+HIGH
+ [else]
+LOW
+ [/if]
+[else]
+ [if (instruction.operand.oclIsTypeOf(IntegerConstant))]
+[instruction.operand.oclAsType(IntegerConstant).value/]
+ [else]
+ [if (instruction.operand.oclIsTypeOf(ModuleGet))]
+[generateInstruction(instruction)/]
+ [/if]
+ [/if]
+[/if]
+[/template]
+
+[template public generateInstruction(instruction : ModuleInstruction)post (trim())]
+[if (instruction.module.kind=ModuleKind::digital)]
+digitalRead([instruction.module.getVariableName()/])
+[else]
+analogRead([instruction.module.getVariableName()/])
+[/if]
+
+[/template]
+
+[template public generateInstruction(instruction : Repeat)post (trim())]
+[let index : Integer = eContainer(arduino::Sketch).getRepeatInstructionIndex(instruction)]
+for (iter_[index/]=0; iter_[index/] < ( [instruction.iteration/] ); ++iter_[index/] )
+{
+ [instruction.instructions->first().genINO()/]
+}
+[/let]
+[/template]
+
+[template public generateInstruction(instruction : While)post (trim())]
+{
+ [instruction.generateContainedModuleGet()/]
+ while ([instruction.condition.generateExpression()/])
+ {
+ [instruction.instructions->first().genINO()/]
+ }
+}
+[/template]
+
+[template public generateInstruction(instruction : If)post (trim())]
+{//IF
+ [instruction.generateContainedModuleGet()/]
+ if ([instruction.condition.generateExpression()/])
+ {
+ [instruction.instructions->first().genINO()/]
+ }
+//endIf
+}
+[/template]
+
+[template public generateContainedModuleGet(instruction : If)post (trim())]
+[if (((not instruction.condition.oclIsInvalid()) and instruction.condition.oclIsKindOf(ModuleGet)) )]
+int [instruction.condition.oclAsType(ModuleGet).module.getVariableName()/]_value = digitalRead([instruction.condition.oclAsType(ModuleGet).module.getVariableName()/]);
+[/if]
+[if ((not instruction.condition.oclIsInvalid())
+ and
+ (instruction.condition.oclIsKindOf(BinaryBooleanExpression)
+ and instruction.condition.oclAsType(BinaryBooleanExpression).left.oclIsKindOf(ModuleGet))
+ )]
+int [instruction.condition.oclAsType(BinaryBooleanExpression).left.oclAsType(ModuleGet).module.getVariableName()/]_value = digitalRead([instruction.condition.oclAsType(BinaryBooleanExpression).left.oclAsType(ModuleGet).module.getVariableName()/]);
+[/if]
+[if ((not instruction.condition.oclIsInvalid())
+ and
+ (instruction.condition.oclIsKindOf(BinaryBooleanExpression)
+ and instruction.condition.oclAsType(BinaryBooleanExpression).right.oclIsKindOf(ModuleGet))
+ )]
+int [instruction.condition.oclAsType(BinaryBooleanExpression).right.oclAsType(ModuleGet).module.getVariableName()/]_value = digitalRead([instruction.condition.oclAsType(BinaryBooleanExpression).right.oclAsType(ModuleGet).module.getVariableName()/]);
+[/if]
+[/template]
+
+[template public generateContainedModuleGet(instruction : While)post (trim())]
+[if (((not instruction.condition.oclIsInvalid()) and instruction.condition.oclIsKindOf(ModuleGet)) )]
+int [instruction.condition.oclAsType(ModuleGet).module.getVariableName()/]_value = digitalRead([instruction.condition.oclAsType(ModuleGet).module.getVariableName()/]);
+[/if]
+[if ((not instruction.condition.oclIsInvalid())
+ and
+ (instruction.condition.oclIsKindOf(BinaryBooleanExpression)
+ and instruction.condition.oclAsType(BinaryBooleanExpression).left.oclIsKindOf(ModuleGet))
+ )]
+int [instruction.condition.oclAsType(BinaryBooleanExpression).left.oclAsType(ModuleGet).module.getVariableName()/]_value = digitalRead([instruction.condition.oclAsType(BinaryBooleanExpression).left.oclAsType(ModuleGet).module.getVariableName()/]);
+[/if]
+[if ((not instruction.condition.oclIsInvalid())
+ and
+ (instruction.condition.oclIsKindOf(BinaryBooleanExpression)
+ and instruction.condition.oclAsType(BinaryBooleanExpression).right.oclIsKindOf(ModuleGet))
+ )]
+int [instruction.condition.oclAsType(BinaryBooleanExpression).right.oclAsType(ModuleGet).module.getVariableName()/]_value = digitalRead([instruction.condition.oclAsType(BinaryBooleanExpression).right.oclAsType(ModuleGet).module.getVariableName()/]);
+[/if]
+[/template]
+
+
+
+[comment][template public generateInstruction(instruction : Level)post (trim())]
+[if (instruction.module.library=arduino::Library::servo)]
+[instruction.module.getVariableName()/].write([instruction.level.generateInstruction()/]);
+[else]
+analogWrite([instruction.eContainer(arduino::Sketch).getPinId(instruction.module)/],255-([instruction.level.generateInstruction()/]));
+[/if]
+[/template][/comment]
+
+
+
+[template public generateInstruction(instruction : IntegerVariable)post (trim())]
+[instruction.getValue()/]
+[/template]
+
+[template public generateInstruction(instruction : BooleanVariable)post (trim())]
+[instruction.getValue()/]
+[/template]
+
+[template public generateInstruction(instruction : Sketch)post (trim())]
+[/template]
+
+[template public generateExpression(expression : VariableRef)post (trim())]
+[expression.variable.name/];
+[/template]
+
+[template public generateExpression(expression : BinaryIntegerExpression)post (trim())]
+([expression.left.generateExpression()/] [expression.operator.getOperator()/] [expression.right.generateExpression()/])
+[/template]
+
+[template public generateExpression(expression : BinaryBooleanExpression)post (trim())]
+([expression.left.generateExpression()/] [expression.operator.getOperator()/] [expression.right.generateExpression()/])
+[/template]
+
+[template public generateExpression(expression : ModuleGet)post (trim())]
+[expression.module.getVariableName()/]
+[/template]
+
+[template public generateExpression(instruction : IntegerConstant)post (trim())]
+[instruction.value/]
+[/template]
+
+[template public generateExpression(instruction : BooleanConstant)post (trim())]
+[instruction.value/]
+[/template]
+
+[template public generateExpression(expression : Expression)post (trim())]
+Generation error for [expression/]
+[/template]
+
+[template public generateInstruction(instruction : Instruction)]
+Generation error for [instruction/]
+[/template]
+
+
+[query public getPinId (sketch : Sketch, mod : Module) : Integer = sketch.hardware.connectors->select(c| c.module = mod)->first().pin.id/]
+
+[query public getVariableName (element : NamedElement) : String = element.name.replaceAll(' ', '')/]
+
+[query public getRepeatInstructions (sketch : Sketch) : OrderedSet(Repeat) = sketch.eAllContents("Repeat")->asOrderedSet()/]
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/tasks/generate.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/tasks/generate.xml
new file mode 100644
index 00000000..1c1eee1c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/tasks/generate.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/tasks/generateTarget.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/tasks/generateTarget.xml
new file mode 100644
index 00000000..a403c882
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.gen/tasks/generateTarget.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.classpath
new file mode 100644
index 00000000..098194ca
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.gitignore b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.gitignore
new file mode 100644
index 00000000..5e56e040
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.project
new file mode 100644
index 00000000..54d6afb7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.project
@@ -0,0 +1,28 @@
+
+
+ fr.obeo.dsl.arduino.preferences
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.settings/org.eclipse.jdt.core.prefs b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..f42de363
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..3822afd3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Preferences
+Bundle-SymbolicName: fr.obeo.dsl.arduino.preferences;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: fr.obeo.dsl.arduino.preferences.ArduinoPreferencesPlugin
+Bundle-Vendor: Obeo
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.sirius.ui,
+ org.eclipse.ui.ide
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-ActivationPolicy: lazy
+Export-Package: fr.obeo.dsl.arduino.preferences
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/build.properties
new file mode 100644
index 00000000..e9863e28
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/plugin.xml
new file mode 100644
index 00000000..11293470
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/plugin.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/pom.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/pom.xml
new file mode 100644
index 00000000..be8bbc3a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ 4.0.0
+
+
+ fr.obeo.dsl.arduino
+ parent
+ 1.0.0-SNAPSHOT
+ ../../releng/fr.obeo.dsl.arduino.parent
+
+
+ fr.obeo.dsl.arduino.preferences
+ eclipse-plugin
+
+ Arduino Designer Preferences
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferences.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferences.java
new file mode 100644
index 00000000..f7d75c44
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferences.java
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.preferences;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class ArduinoPreferences {
+
+ /**
+ * Keys for user answer preference in preference store.
+ */
+ public static final String ARDUINO_SDK_ID = "arduino_sdk_preference";
+ public static final String ARDUINO_SERIAL_PORT = "arduino_serial_port_preference";
+
+ /**
+ * The preference store.
+ */
+ private IPreferenceStore preferenceStore = ArduinoPreferencesPlugin
+ .getDefault().getPreferenceStore();
+
+ /**
+ * Store the Arduino SDK path.
+ *
+ * @param answerId
+ * The answer is a string
+ */
+ public void storeArduinoSdk(String answerId) {
+ preferenceStore.setValue(ARDUINO_SDK_ID, answerId);
+ }
+
+ /**
+ * Get Arduino sdk.
+ *
+ * @return String representing the Arduino SDK path
+ */
+ public String getArduinoSdk() {
+ return preferenceStore.getString(ARDUINO_SDK_ID);
+ }
+
+ /**
+ * Get Arduino serial port.
+ *
+ * @return String representing the Arduino serial port
+ */
+ public String getArduinoSerialPort() {
+ return preferenceStore.getString(ARDUINO_SERIAL_PORT);
+ }
+
+ /**
+ * Store the Arduino SDK path.
+ *
+ * @param answerId
+ * The answer is a string
+ */
+ public void storeArduinoSerialPort(String answerPort) {
+ preferenceStore.setValue(ARDUINO_SERIAL_PORT, answerPort);
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferencesPage.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferencesPage.java
new file mode 100644
index 00000000..78f88e16
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferencesPage.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.preferences;
+
+import org.eclipse.jface.preference.DirectoryFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class ArduinoPreferencesPage extends FieldEditorPreferencePage implements
+ IWorkbenchPreferencePage {
+
+ public ArduinoPreferencesPage() {
+ super(GRID);
+ }
+
+ @Override
+ protected Control createContents(Composite parent) {
+ Control control = super.createContents(parent);
+ return control;
+ }
+
+ private void createArduinoSdk(Composite parent) {
+ DirectoryFieldEditor sdk = new DirectoryFieldEditor(
+ ArduinoPreferences.ARDUINO_SDK_ID, "Arduino SDK :",
+ getFieldEditorParent());
+ addField(sdk);
+
+ StringFieldEditor port = new StringFieldEditor(
+ ArduinoPreferences.ARDUINO_SERIAL_PORT,
+ "Arduino Serial Port :", getFieldEditorParent());
+ addField(port);
+ }
+
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(ArduinoPreferencesPlugin.getDefault()
+ .getPreferenceStore());
+
+ setDescription("Give the path of the Arduino SDK installed on your computer (e.g. /home/user/path/arduino/arduino-1.0.5/) and the serial port of the Arduino linked to your computer (e.g. com3, /dev/ttyACM0, /dev/tty.usbmodem1421, ...).\n");
+ }
+
+ @Override
+ protected void createFieldEditors() {
+ createArduinoSdk((Composite) getControl());
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferencesPlugin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferencesPlugin.java
new file mode 100644
index 00000000..e102cafc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoPreferencesPlugin.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.preferences;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class ArduinoPreferencesPlugin extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "fr.obeo.dsl.arduino.preferences"; //$NON-NLS-1$
+
+ // The shared instance
+ private static ArduinoPreferencesPlugin plugin;
+
+ /**
+ * The constructor
+ */
+ public ArduinoPreferencesPlugin() {
+ }
+
+ /*
+ * (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 ArduinoPreferencesPlugin getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoSdkDialog.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoSdkDialog.java
new file mode 100644
index 00000000..df891aac
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.preferences/src/fr/obeo/dsl/arduino/preferences/ArduinoSdkDialog.java
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.preferences;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Shell;
+
+public class ArduinoSdkDialog extends Dialog {
+
+ public ArduinoSdkDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ @Override
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText("Arduino SDK is missing");
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = (Composite) super.createDialogArea(parent);
+ Link link = new Link(composite, SWT.NONE);
+ String message = "Set the path to the Arduino SDK in the Arduino Designer Preferences to be able to compile and upload code to the target";
+ link.setText(message);
+
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER)
+ .grab(true, false)
+ .hint(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH, SWT.DEFAULT)
+ .applyTo(link);
+ applyDialogFont(composite);
+
+ return composite;
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
+ false);
+ }
+
+ @Override
+ protected void buttonPressed(int buttonId) {
+ // Close dialog
+ setReturnCode(buttonId);
+ close();
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.classpath
new file mode 100644
index 00000000..eca7bdba
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.gitignore b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.gitignore
new file mode 100644
index 00000000..5e56e040
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.project
new file mode 100644
index 00000000..e6bfa593
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.project
@@ -0,0 +1,28 @@
+
+
+ fr.obeo.dsl.arduino.ui
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.settings/org.eclipse.jdt.core.prefs b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..0c68a61d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/.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/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..3553ce3a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Menus
+Bundle-SymbolicName: fr.obeo.dsl.arduino.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: fr.obeo.dsl.arduino.menus.ArduinoUiActivator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ com.google.guava,
+ org.eclipse.core.resources,
+ org.eclipse.core.expressions,
+ fr.obeo.dsl.arduino,
+ org.eclipse.emf.transaction,
+ fr.obeo.dsl.arduino.gen,
+ org.eclipse.acceleo.engine,
+ org.eclipse.sirius.ui,
+ fr.obeo.dsl.arduino.build,
+ fr.obeo.dsl.arduino.preferences,
+ org.eclipse.ui.ide,
+ org.eclipse.sirius.common,
+ org.eclipse.emf.validation,
+ org.eclipse.sirius.ext.base,
+ org.eclipse.gef;bundle-version="3.9.0",
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.7.0",
+ org.eclipse.sirius.diagram;bundle-version="2.0.0",
+ org.eclipse.sirius.diagram.ui;bundle-version="2.0.0",
+ org.eclipse.emf.common.ui;bundle-version="2.9.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: fr.obeo.dsl.arduino.commands;x-friends:="fr.obeo.dsl.arduino.design",
+ fr.obeo.dsl.arduino.utils;x-friends:="fr.obeo.dsl.arduino.design"
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/build.properties
new file mode 100644
index 00000000..6c480f39
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ icons/
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardware.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardware.png
new file mode 100644
index 00000000..e3c9b184
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardware.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareHover.png
new file mode 100644
index 00000000..1b70ba2b
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareInvalid.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareInvalid.png
new file mode 100644
index 00000000..04b41481
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareInvalid.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareInvalidHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareInvalidHover.png
new file mode 100644
index 00000000..972434ce
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/hardwareInvalidHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/iconmonstr-bug-icon-128.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/iconmonstr-bug-icon-128.png
new file mode 100644
index 00000000..d756baae
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/iconmonstr-bug-icon-128.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/iconmonstr-laptop-3-icon-128.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/iconmonstr-laptop-3-icon-128.png
new file mode 100644
index 00000000..9fd6a153
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/iconmonstr-laptop-3-icon-128.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/newProject.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/newProject.png
new file mode 100644
index 00000000..21bd99df
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/newProject.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/newProjectHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/newProjectHover.png
new file mode 100644
index 00000000..b2897477
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/newProjectHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/openProject.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/openProject.png
new file mode 100644
index 00000000..cba2d9e1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/openProject.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/openProjectHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/openProjectHover.png
new file mode 100644
index 00000000..0463cc73
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/openProjectHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/preferences.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/preferences.png
new file mode 100644
index 00000000..df11a7b7
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/preferences.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/preferencesHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/preferencesHover.png
new file mode 100644
index 00000000..3850be82
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/preferencesHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketch.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketch.png
new file mode 100644
index 00000000..c04bcd02
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketch.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchHover.png
new file mode 100644
index 00000000..8f43e8e1
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchInvalid.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchInvalid.png
new file mode 100644
index 00000000..ec6e4046
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchInvalid.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchInvalidHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchInvalidHover.png
new file mode 100644
index 00000000..6d2ba1a5
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/sketchInvalidHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/upload.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/upload.png
new file mode 100644
index 00000000..a32a9dbe
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/upload.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/uploadHover.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/uploadHover.png
new file mode 100644
index 00000000..fe10284a
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/128x128/uploadHover.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/hardware.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/hardware.png
new file mode 100644
index 00000000..eaa4172c
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/hardware.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/newHardwareKit.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/newHardwareKit.png
new file mode 100644
index 00000000..7c1fc36e
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/newHardwareKit.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/project.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/project.png
new file mode 100644
index 00000000..228e82e9
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/project.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/simulator.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/simulator.png
new file mode 100644
index 00000000..1eb0ad23
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/simulator.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/sketch.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/sketch.png
new file mode 100644
index 00000000..a6f4f0e6
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/sketch.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/upload.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/upload.png
new file mode 100644
index 00000000..a0b84138
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/32x32/upload.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/README b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/README
new file mode 100644
index 00000000..9b7f9796
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/README
@@ -0,0 +1,25 @@
+All the icons are coming from : http://iconmonstr.com/
+Licence : http://iconmonstr.com/license/
+"License Agreement
+
+By copying or downloading any icons from iconmonstr, you automatically agree to the following terms and conditions:
+
+All ownership and copyright of the icons remain the property of iconmonstr.
+All icons from iconmonstr are provided as-is without any express or implied warranty.
+All trademarks of social icons are copyright of their respective trademark owners.
+You are allowed to ...
+
+
+Use in both personal and commercial projects with no attribution required.
+
+Use in a website or presentation template or application as part of your design with no attribution required.
+
+Modify in shape, color, size or otherwise manipulate for your needs.
+
+Up to 50 icons embed in a font or regenerate as web font via 3rd party tools.
+You are not allowed to ...
+
+
+The icons may not be sub-licensed, resold, rented, redistributed or detached from a template, application or web page.
+
+The icons may not be included in any online or offline archive or archived downloadable format."
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/hardware.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/hardware.svg
new file mode 100644
index 00000000..dc1e865d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/hardware.svg
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/hardware2.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/hardware2.svg
new file mode 100644
index 00000000..150b627c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/hardware2.svg
@@ -0,0 +1,53 @@
+
+
+
+image/svg+xml
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/newProject.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/newProject.svg
new file mode 100644
index 00000000..4bb93949
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/newProject.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/openProject.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/openProject.svg
new file mode 100644
index 00000000..6aaf50c7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/openProject.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/preferences.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/preferences.svg
new file mode 100644
index 00000000..369df827
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/preferences.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/sketch.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/sketch.svg
new file mode 100644
index 00000000..c7a188ed
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/sketch.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/upload.svg b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/upload.svg
new file mode 100644
index 00000000..817192a5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/icons/svg/upload.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/plugin.xml
new file mode 100644
index 00000000..4b55ee8a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/plugin.xml
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Arduino Designer perspective
+
+
+
+
+ Arduino Designer Debug perspective
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/pom.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/pom.xml
new file mode 100644
index 00000000..0354c975
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ 4.0.0
+
+
+ fr.obeo.dsl.arduino
+ parent
+ 1.0.0-SNAPSHOT
+ ../../releng/fr.obeo.dsl.arduino.parent
+
+
+ fr.obeo.dsl.arduino.ui
+ eclipse-plugin
+
+ Arduino Designer UI
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/DeleteProjectHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/DeleteProjectHandler.java
new file mode 100644
index 00000000..4f878c20
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/DeleteProjectHandler.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.PlatformUI;
+
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+import fr.obeo.dsl.arduino.utils.ProjectServices;
+
+public class DeleteProjectHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+ ProjectServices projectService = new ProjectServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ final IProject project = service.getWorkspaceProject();
+
+ boolean confirmation = MessageDialog.openConfirm(PlatformUI
+ .getWorkbench().getActiveWorkbenchWindow().getShell(),
+ "Confirm",
+ "Do you want to delete the project " + project.getName()
+ + " ? (cannot be undone)");
+ if (confirmation) {
+ projectService.closeOpenedEditors();
+
+ try {
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .run(false, false, new IRunnableWithProgress() {
+
+ @Override
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException,
+ InterruptedException {
+ try {
+ project.delete(true, true, monitor);
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR,
+ "Delete project failed", e);
+ }
+ }
+ });
+ } catch (InvocationTargetException e) {
+ ArduinoUiActivator
+ .log(Status.ERROR, "Delete project failed", e);
+ } catch (InterruptedException e) {
+ ArduinoUiActivator
+ .log(Status.ERROR, "Delete project failed", e);
+ }
+
+ }
+ return null;
+ }
+
+ public static IProject getCurrentSelectedProject() {
+ IProject project = null;
+ ISelectionService selectionService = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getSelectionService();
+
+ ISelection selection = selectionService.getSelection();
+
+ if (selection instanceof IStructuredSelection) {
+ Object element = ((IStructuredSelection) selection)
+ .getFirstElement();
+
+ if (element instanceof IResource) {
+ project = ((IResource) element).getProject();
+ }
+ }
+ return project;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/DeleteSketchHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/DeleteSketchHandler.java
new file mode 100644
index 00000000..68dcf607
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/DeleteSketchHandler.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+public class DeleteSketchHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ System.out.println("Delete Sketch");
+ return null;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/NewProjectHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/NewProjectHandler.java
new file mode 100644
index 00000000..da9a93f8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/NewProjectHandler.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import fr.obeo.dsl.arduino.wizard.ArduinoProjectWizard;
+
+public class NewProjectHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Shell shell = HandlerUtil.getActiveShell(event);
+ WizardDialog wizard = new WizardDialog(shell,
+ new ArduinoProjectWizard());
+ wizard.open();
+
+ return null;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenDashboardHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenDashboardHandler.java
new file mode 100644
index 00000000..d95e95f2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenDashboardHandler.java
@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+import fr.obeo.dsl.arduino.utils.ProjectServices;
+import fr.obeo.dsl.arduino.views.DashboardView;
+
+public class OpenDashboardHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+ ProjectServices projectServices = new ProjectServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ try {
+ HandlerUtil.getActiveWorkbenchWindow(event).getActivePage()
+ .showView(DashboardView.VIEW_ID);
+ } catch (PartInitException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Open dashboard failed", e);
+ }
+ return null;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenHardwareHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenHardwareHandler.java
new file mode 100644
index 00000000..238ee03f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenHardwareHandler.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+
+public class OpenHardwareHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ System.out.println("Open hardware");
+ Session session = service.getSession();
+ DialectUIManager.INSTANCE.openEditor(session,
+ service.getDiagram(session, "Hardware"), new NullProgressMonitor());
+ return null;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenHardwareKitHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenHardwareKitHandler.java
new file mode 100644
index 00000000..5471c733
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenHardwareKitHandler.java
@@ -0,0 +1,41 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.sirius.business.api.session.Session;
+
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+import fr.obeo.dsl.arduino.utils.ProjectServices;
+
+public class OpenHardwareKitHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+ ProjectServices projectServices = new ProjectServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Session session = service.getSession();
+ if (session != null) {
+ if (ProjectServices.isViewpointEnabled(session,
+ ProjectServices.HARDWARE_KIT_VP)) {
+ projectServices
+ .unActivateHardwareKitDefinition(new NullProgressMonitor());
+ } else {
+ projectServices
+ .activateHardwareKitDefinition(new NullProgressMonitor());
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenProjectHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenProjectHandler.java
new file mode 100644
index 00000000..086d3556
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenProjectHandler.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+import fr.obeo.dsl.arduino.utils.ProjectServices;
+import fr.obeo.dsl.arduino.wizard.ArduinoExternalProjectImportWizard;
+
+public class OpenProjectHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+ ProjectServices projectServices = new ProjectServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Shell shell = HandlerUtil.getActiveShell(event);
+ WizardDialog wizard = new WizardDialog(shell,
+ new ArduinoExternalProjectImportWizard());
+ wizard.open();
+ return null;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenSketchHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenSketchHandler.java
new file mode 100644
index 00000000..a218a24e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/OpenSketchHandler.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+
+public class OpenSketchHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ System.out.println("Open sketch");
+ Session session = service.getSession();
+ DialectUIManager.INSTANCE.openEditor(session,
+ service.getDiagram(session, "Sketch"),
+ new NullProgressMonitor());
+ return null;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/PreferencesHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/PreferencesHandler.java
new file mode 100644
index 00000000..73adbc9a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/PreferencesHandler.java
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.preference.IPreferencePage;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import fr.obeo.dsl.arduino.preferences.ArduinoPreferencesPage;
+
+public class PreferencesHandler extends AbstractHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IPreferencePage page = new ArduinoPreferencesPage();
+ Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event)
+ .getShell();
+ PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(
+ shell, "fr.obeo.dsl.arduino.preferences.ArduinoPreferencePage",
+ new String[] {}, null);
+ if (dialog != null)
+ dialog.open();
+ return null;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/UploadSketchHandler.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/UploadSketchHandler.java
new file mode 100644
index 00000000..ee4f9018
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/commands/UploadSketchHandler.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+
+public class UploadSketchHandler extends AbstractHandler {
+ ArduinoServices service = new ArduinoServices();
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ System.out.println("Upload sketch");
+
+ Project project = service.getArduinoProject();
+ if (project != null) {
+ service.upload(project.getSketch());
+ }
+
+ return null;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/menus/ArduinoUiActivator.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/menus/ArduinoUiActivator.java
new file mode 100644
index 00000000..36182aef
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/menus/ArduinoUiActivator.java
@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.menus;
+
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class ArduinoUiActivator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "fr.obeo.dsl.arduino.ui"; //$NON-NLS-1$
+
+ // The shared instance
+ private static ArduinoUiActivator plugin;
+
+ /**
+ * The constructor
+ */
+ public ArduinoUiActivator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+ * )
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ // SiriusDiagramEditorPlugin.getInstance().getPreferenceStore().setValue(org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys.PREF_OLD_UI.name(),
+ // Boolean.TRUE);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+ * )
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static ArduinoUiActivator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * A helper to log plugin errors.
+ *
+ * @param severity
+ * the error severity.
+ * @param message
+ * the error message.
+ * @param exception
+ * the error exception.
+ */
+ public static void log(int severity, String message, Throwable exception) {
+ getDefault().getLog().log(
+ new Status(severity, PLUGIN_ID, message, exception));
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given plug-in
+ * relative path
+ *
+ * @param path
+ * the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/perspective/ArduinoPerspectiveFactory.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/perspective/ArduinoPerspectiveFactory.java
new file mode 100644
index 00000000..31113900
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/perspective/ArduinoPerspectiveFactory.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.perspective;
+
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+public class ArduinoPerspectiveFactory implements IPerspectiveFactory {
+
+ @Override
+ public void createInitialLayout(IPageLayout layout) {
+ layout.setEditorAreaVisible(true);
+ layout.setFixed(true);
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/properties/ArduinoPropertyTester.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/properties/ArduinoPropertyTester.java
new file mode 100644
index 00000000..589ccbd7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/properties/ArduinoPropertyTester.java
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.properties;
+
+import org.eclipse.core.expressions.PropertyTester;
+
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+
+public class ArduinoPropertyTester extends PropertyTester {
+ ArduinoServices service = new ArduinoServices();
+
+ public ArduinoPropertyTester() {
+ }
+
+ @Override
+ public boolean test(Object receiver, String property, Object[] args,
+ Object expectedValue) {
+ Project project = service.getArduinoProject();
+ if (project == null) {
+ return false;
+ }
+
+ if ("existHardware".equals(property) && project.getBoards() != null) {
+ return true;
+ }
+
+ if ("validHardware".equals(property) && service.isValidHardware()) {
+ return true;
+ }
+
+ if ("validSketch".equals(property)
+ && service.isValidSketch(project.getSketch())) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/utils/ArduinoServices.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/utils/ArduinoServices.java
new file mode 100644
index 00000000..07711780
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/utils/ArduinoServices.java
@@ -0,0 +1,235 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.acceleo.common.preference.AcceleoPreferences;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.sirius.business.api.dialect.DialectManager;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.business.api.session.SessionManager;
+import org.eclipse.sirius.viewpoint.DRepresentation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.build.ArduinoBuilder;
+import fr.obeo.dsl.arduino.gen.main.Generate;
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+import fr.obeo.dsl.arduino.preferences.ArduinoPreferences;
+import fr.obeo.dsl.arduino.preferences.ArduinoSdkDialog;
+
+public class ArduinoServices {
+ private ArduinoPreferences preferences = new ArduinoPreferences();
+
+ public IProject getWorkspaceProject() {
+ IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
+ .getProjects();
+
+ if (projects.length > 0) {
+ return projects[0];
+ }
+ return null;
+ }
+
+ public Session getSession() {
+ Collection sessions = SessionManager.INSTANCE.getSessions();
+ if (sessions.size() > 0) {
+ return (Session) sessions.toArray()[0];
+ }
+ return null;
+ }
+
+ public Project getArduinoProject() {
+ Session session = getSession();
+ if (session == null) {
+ return null;
+ }
+ Collection resources = session.getSemanticResources();
+ if (resources.size() == 0) {
+ return null;
+ }
+ Resource resource = (Resource) resources.toArray()[0];
+
+ List contents = resource.getContents();
+ if (contents == null || contents.size() == 0) {
+ return null;
+ }
+ return (Project) contents.get(0);
+ }
+
+ public boolean isInvalidSketch(Sketch sketch) {
+ return !isValidSketch(sketch);
+ }
+
+ public boolean isValidSketch(Sketch sketch) {
+ if (sketch != null) {
+ return true;
+ }
+ return false;
+ }
+
+ public void upload(final Sketch sketch) {
+ if (preferences.getArduinoSdk() == null
+ || preferences.getArduinoSdk().length() == 0) {
+ askUser();
+ return;
+ }
+ final ProgressMonitorDialog dialog = new ProgressMonitorDialog(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+ try {
+ dialog.run(true, true, new IRunnableWithProgress() {
+ @Override
+ public void run(IProgressMonitor monitor) {
+ monitor.beginTask("Upload sketch to arduino platform...",
+ 100);
+ monitor.subTask("Generate code");
+ File genFolder = generateCode(sketch);
+ monitor.worked(33);
+ monitor.subTask("Compile code");
+
+ String arduinoSdk = preferences.getArduinoSdk();
+ String serialPort = preferences.getArduinoSerialPort();
+ String boardTag = sketch.getProject().getBoards().get(0).getName();
+ String workingDirectory = genFolder.toString();
+ ArduinoBuilder builder = new ArduinoBuilder(arduinoSdk,
+ boardTag, workingDirectory, serialPort);
+ List libraries = getLibraries(sketch);
+ final IStatus compileStatus = builder.compile("Sketch",
+ libraries);
+ if (compileStatus.getSeverity() != IStatus.OK) {
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ MessageDialog.openError(
+ dialog.getShell(),
+ "Compilation Fail",
+ "Compilation fail : "
+ + compileStatus.getMessage());
+ }
+ });
+ return;
+ }
+
+ monitor.worked(33);
+ monitor.subTask("Upload code");
+ final IStatus uploadStatus = builder.upload();
+ if (uploadStatus.getSeverity() != IStatus.OK) {
+ Display.getDefault().syncExec(new Runnable() {
+ public void run() {
+ MessageDialog.openError(dialog.getShell(),
+ "Upload Fail", "Upload fail : "
+ + uploadStatus.getMessage());
+ }
+ });
+ }
+ monitor.done();
+ }
+ });
+ } catch (InvocationTargetException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Upload failed", e);
+ } catch (InterruptedException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Upload failed", e);
+ }
+ }
+
+ protected List getLibraries(Sketch sketch) {
+ final List libraries = new ArrayList<>();
+ return libraries;
+ }
+
+ private void askUser() {
+ Shell shell = PlatformUI.getWorkbench().getModalDialogShellProvider()
+ .getShell();
+
+ ArduinoSdkDialog dialog = new ArduinoSdkDialog(shell);
+ dialog.open();
+ }
+
+ private File generateCode(Sketch sketch) {
+ boolean oldNotificationsPref = AcceleoPreferences
+ .areNotificationsForcedDisabled();
+ AcceleoPreferences.switchForceDeactivationNotifications(true);
+ IFile file = ResourcesPlugin
+ .getWorkspace()
+ .getRoot()
+ .getFile(
+ new Path(sketch.eResource().getURI()
+ .toPlatformString(true)));
+ IFolder folder = file.getProject().getFolder("code");
+ File genFolder = folder.getRawLocation().makeAbsolute().toFile();
+
+ try {
+ Generate generator = new Generate(sketch.eResource().getURI(),
+ genFolder, new ArrayList());
+ generator.doGenerate(new BasicMonitor());
+ } catch (IOException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Code generation failed", e);
+ }
+ AcceleoPreferences
+ .switchForceDeactivationNotifications(oldNotificationsPref);
+
+ return genFolder;
+ }
+
+ public DRepresentation getDiagram(Session session, String diagramName) {
+ Collection representations = DialectManager.INSTANCE
+ .getAllRepresentations(session);
+ DRepresentation diagram = null;
+ for (DRepresentation representation : representations) {
+ if (diagramName.equals(representation.getName())) {
+ diagram = representation;
+ }
+ }
+ return diagram;
+ }
+
+ public boolean isProjectOpened() {
+ return getWorkspaceProject() != null;
+ }
+
+ public boolean isValidSketch() {
+ Project project = getArduinoProject();
+ if (project == null) {
+ return false;
+ }
+ Sketch sketch = project.getSketch();
+ if (sketch == null) {
+ return false;
+ }
+ return isValidSketch(sketch);
+ }
+
+ public boolean isValidHardware() {
+ Project project = getArduinoProject();
+ return !(project == null || project.getBoards() == null);
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/utils/ProjectServices.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/utils/ProjectServices.java
new file mode 100644
index 00000000..76929069
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/utils/ProjectServices.java
@@ -0,0 +1,340 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.utils;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.sirius.business.api.componentization.ViewpointRegistry;
+import org.eclipse.sirius.business.api.dialect.DialectManager;
+import org.eclipse.sirius.business.api.modelingproject.ModelingProject;
+import org.eclipse.sirius.business.api.session.DefaultLocalSessionCreationOperation;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.business.api.session.SessionCreationOperation;
+import org.eclipse.sirius.ext.base.Option;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+import org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionCallback;
+import org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager;
+import org.eclipse.sirius.viewpoint.DRepresentation;
+import org.eclipse.sirius.viewpoint.description.Viewpoint;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.PlatformUI;
+
+import com.google.common.collect.Maps;
+
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+
+public class ProjectServices {
+ ArduinoServices service = new ArduinoServices();
+ public static final String ARDUINO_VP = "Arduino";
+ public static final String HARDWARE_KIT_VP = "Hardware Kit";
+
+ public void createProject(IProgressMonitor monitor, IProject project) {
+ try {
+ project.create(monitor);
+ project.open(monitor);
+ ModelingProjectManager.INSTANCE.convertToModelingProject(project, monitor);
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Open project failed", e);
+ }
+
+ String modelPath = '/' + project.getName(); //$NON-NLS-1$
+ final Session session = createAird(
+ project,
+ URI.createPlatformResourceURI(modelPath
+ + "/representations.aird", true), monitor);
+
+ final String semanticModelPath = getSemanticModelPath(session);
+ initSemanticModel(session, semanticModelPath, monitor);
+
+ final String[] viewpointsToActivate = { ARDUINO_VP };
+ enableViewpoints(session, viewpointsToActivate);
+
+ openHardware(session);
+ }
+
+ private Session createAird(IProject project, URI representationsURI,
+ IProgressMonitor monitor) {
+ final Session session;
+ Option modelingProject = ModelingProject
+ .asModelingProject(project);
+ if (modelingProject.some()) {
+ session = modelingProject.get().getSession();
+ } else {
+ Session tempSession = null;
+ SessionCreationOperation sessionCreationOperation = new DefaultLocalSessionCreationOperation(
+ representationsURI, monitor);
+ try {
+ sessionCreationOperation.execute();
+ tempSession = sessionCreationOperation.getCreatedSession();
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR,
+ "Create representations file failed", e);
+ }
+ if (tempSession != null) {
+ session = tempSession;
+ } else {
+ session = null;
+ }
+ }
+ return session;
+ }
+
+ public void openProject(final String projectPath) {
+ try {
+ ProjectServices service = new ProjectServices();
+ service.closeOpenedEditors();
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .run(true, true, new IRunnableWithProgress() {
+ @Override
+ public void run(IProgressMonitor monitor) {
+ monitor.beginTask("Open project" + projectPath, 100);
+ ProjectServices service = new ProjectServices();
+ service.closeProjects(monitor);
+
+ monitor.worked(25);
+
+ IProjectDescription description;
+ try {
+ description = ResourcesPlugin.getWorkspace()
+ .loadProjectDescription(
+ new Path(projectPath));
+ IProject project = ResourcesPlugin
+ .getWorkspace().getRoot()
+ .getProject(description.getName());
+ monitor.subTask("Open project : "
+ + description.getName());
+ project.create(description, null);
+ monitor.worked(25);
+ project.open(null);
+ monitor.worked(25);
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR,
+ "Open project failed", e);
+ }
+ monitor.done();
+ }
+ });
+ } catch (InvocationTargetException e1) {
+ ArduinoUiActivator.log(Status.ERROR, "Open project failed", e1);
+ } catch (InterruptedException e1) {
+ ArduinoUiActivator.log(Status.ERROR, "Open project failed", e1);
+ }
+ Session session = service.getSession();
+ while (session == null) {
+ session = service.getSession();
+ }
+// openHardware(session);
+ // openDashboard(session);
+ }
+
+ public void openHardware(final Session session) {
+ Collection representations = DialectManager.INSTANCE
+ .getAllRepresentations(session);
+ for (DRepresentation representation : representations) {
+ if ("Hardware".equals(representation.getName())) {
+ DialectUIManager.INSTANCE.openEditor(session, representation,
+ new NullProgressMonitor());
+ return;
+ }
+ }
+ }
+
+ private String getSemanticModelPath(final Session session) {
+ Resource aird = (Resource) session.getAllSessionResources().toArray()[0];
+ String airdUri = aird.getURI().toPlatformString(true);
+ final String semanticModelPath = airdUri.substring(0,
+ airdUri.lastIndexOf("/") + 1)
+ + "model.arduino";
+ return semanticModelPath;
+ }
+
+ private void initSemanticModel(final Session session,
+ final String semanticModelPath, final IProgressMonitor monitor) {
+ session.getTransactionalEditingDomain()
+ .getCommandStack()
+ .execute(
+ new RecordingCommand(session
+ .getTransactionalEditingDomain()) {
+ @Override
+ protected void doExecute() {
+
+ final URI semanticModelURI = URI
+ .createPlatformResourceURI(
+ semanticModelPath, true);
+ Resource res = new ResourceSetImpl()
+ .createResource(semanticModelURI);
+ // Add the initial model object to the contents.
+ final Project rootObject = ArduinoFactory.eINSTANCE
+ .createProject();
+
+ if (rootObject != null) {
+ res.getContents().add(rootObject);
+ final Board board = ArduinoFactory.eINSTANCE
+ .createArduinoBoard();
+ board.setName("Hardware");
+ rootObject.getBoards().add(board);
+ final Sketch sketch = ArduinoFactory.eINSTANCE
+ .createSketch();
+ sketch.setName("Sketch");
+ rootObject.setSketch(sketch);
+
+ }
+ try {
+ res.save(Maps.newHashMap());
+ } catch (IOException e) {
+ ArduinoUiActivator.log(Status.ERROR,
+ "Init semantic model failed", e);
+ }
+
+ session.addSemanticResource(semanticModelURI,
+ monitor);
+
+ // Add ardublock kit
+// final URI defaultKitModelURI = URI
+// .createPlatformPluginURI(
+// "/fr.obeo.dsl.arduino.design/resources/ArdublockKit.arduino",
+// true);
+// session.addSemanticResource(defaultKitModelURI,
+// monitor);
+
+
+ session.save(monitor);
+ }
+ });
+ }
+
+ public static void enableViewpoints(final Session session,
+ final String... viewpointsToActivate) {
+ if (session != null) {
+ session.getTransactionalEditingDomain()
+ .getCommandStack()
+ .execute(
+ new RecordingCommand(session
+ .getTransactionalEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ ViewpointSelectionCallback callback = new ViewpointSelectionCallback();
+
+ for (Viewpoint vp : ViewpointRegistry
+ .getInstance().getViewpoints()) {
+ for (String viewpoint : viewpointsToActivate) {
+ if (viewpoint.equals(vp.getName()))
+ callback.selectViewpoint(
+ vp,
+ session,
+ new NullProgressMonitor());
+ }
+ }
+ }
+ });
+ }
+ }
+
+ public static void disableViewpoints(final Session session,
+ final String... viewpointsToActivate) {
+ if (session != null) {
+ session.getTransactionalEditingDomain()
+ .getCommandStack()
+ .execute(
+ new RecordingCommand(session
+ .getTransactionalEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ ViewpointSelectionCallback callback = new ViewpointSelectionCallback();
+
+ for (Viewpoint vp : ViewpointRegistry
+ .getInstance().getViewpoints()) {
+ for (String viewpoint : viewpointsToActivate) {
+ if (viewpoint.equals(vp.getName()))
+ callback.deselectViewpoint(
+ vp,
+ session,
+ new NullProgressMonitor());
+ }
+ }
+ }
+ });
+ }
+ }
+
+ public static boolean isViewpointEnabled(final Session session,
+ final String viewpointToCheck) {
+ if (session != null) {
+ for (Viewpoint vp : session.getSelectedViewpoints(false)) {
+ if (viewpointToCheck.equals(vp.getName()))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void closeProjects(IProgressMonitor monitor) {
+ monitor.subTask("Close projects");
+
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ for (IProject project : root.getProjects()) {
+ try {
+ project.close(monitor);
+ project.delete(false, false, monitor);
+ monitor.worked(25);
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Close project failed", e);
+ }
+ }
+ }
+
+ public void closeOpenedEditors() {
+ for (IEditorReference editorRef : PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage()
+ .getEditorReferences()) {
+ IEditorPart editor = editorRef.getEditor(false);
+ editor.doSave(new NullProgressMonitor());
+ DialectUIManager.INSTANCE.closeEditor(editor, false);
+ }
+ }
+
+ public void activateHardwareKitDefinition(IProgressMonitor monitor) {
+ final Session session = service.getSession();
+ final String[] viewpointsToActivate = { HARDWARE_KIT_VP };
+ enableViewpoints(session, viewpointsToActivate);
+
+ // openHardware(session);
+ }
+
+ public void unActivateHardwareKitDefinition(IProgressMonitor monitor) {
+ final Session session = service.getSession();
+ final String[] viewpointsToActivate = { HARDWARE_KIT_VP };
+ disableViewpoints(session, viewpointsToActivate);
+
+ // openHardware(session);
+ }
+}
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/views/DashboardView.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/views/DashboardView.java
new file mode 100644
index 00000000..0517fdce
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/views/DashboardView.java
@@ -0,0 +1,376 @@
+package fr.obeo.dsl.arduino.views;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.part.ViewPart;
+
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+import fr.obeo.dsl.arduino.utils.ArduinoServices;
+import fr.obeo.dsl.arduino.wizard.ArduinoExternalProjectImportWizard;
+import fr.obeo.dsl.arduino.wizard.ArduinoProjectWizard;
+
+public class DashboardView extends ViewPart implements IPartListener2,
+ IResourceChangeListener {
+ private static final String SKETCH_MSG = "Open the sketch";
+ private static final String SKETCH_INVALID_MSG = "The sketch is invalid. You must define a loop.";
+ private static final String UPLOAD_MSG = "Upload the sketch on the arduino board";
+ private static final String HARDWARE_MSG = "Open the hardware";
+ private static final String HARDWARE_INVALID_MSG = "The hardware is invalid. You must define a platform and connect at least one module.";
+ public final static String VIEW_ID = "fr.obeo.dsl.arduino.ui.dashboard";
+ private static final String HARDWARE_IMAGE = "icons/128x128/hardware.png";
+ private static final String HARDWARE_HOVER_IMAGE = "icons/128x128/hardwareHover.png";
+ private static final String HARDWARE_INVALID_IMAGE = "icons/128x128/hardwareInvalid.png";
+ private static final String HARDWARE_INVALID_HOVER_IMAGE = "icons/128x128/hardwareInvalidHover.png";
+ private static final String SKETCH_IMAGE = "icons/128x128/sketch.png";
+ private static final String SKETCH_HOVER_IMAGE = "icons/128x128/sketchHover.png";
+ private static final String SKETCH_INVALID_IMAGE = "icons/128x128/sketchInvalid.png";
+ private static final String SKETCH_INVALID_HOVER_IMAGE = "icons/128x128/sketchInvalidHover.png";
+ private static final String UPLOAD_IMAGE = "icons/128x128/upload.png";
+ private static final String UPLOAD_HOVER_IMAGE = "icons/128x128/uploadHover.png";
+ private FormToolkit toolkit;
+ private ScrolledForm form;
+ private List images = new ArrayList();
+ private ArduinoServices service = new ArduinoServices();
+ private ImageHyperlink hardwareLink;
+ private ImageHyperlink sketchLink;
+ private ImageHyperlink uploadLink;
+
+ public DashboardView() {
+ }
+
+ Shell shell;
+
+ @Override
+ public void createPartControl(final Composite parent) {
+
+ shell = parent.getShell();
+
+ // Create the form
+ toolkit = new FormToolkit(parent.getDisplay());
+ form = toolkit.createScrolledForm(parent);
+ setFormText();
+ GridLayout formLayout = new GridLayout();
+ formLayout.numColumns = 3;
+ formLayout.horizontalSpacing = 100;
+ formLayout.verticalSpacing = 50;
+ formLayout.marginWidth = 100;
+ formLayout.marginHeight = 100;
+ form.getBody().setLayout(formLayout);
+
+ // Create all the hyperlinks
+ createNewProjectHyperLink(parent, shell);
+ createOpenProjectHyperLink(parent, shell);
+ createPreferencesHyperLink(shell);
+ createHardwareHyperLink(parent, shell);
+ createSketchHyperLink(parent, shell);
+ createUploadHyperLink(parent, shell);
+
+ this.getSite().getPage().addPartListener(this);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+ }
+
+ private void setFormText() {
+ String text = "Arduino Designer - ";
+ if (!service.isProjectOpened()) {
+ text += "Select or create a project!";
+ } else {
+ text += "You are working on the project : "
+ + service.getWorkspaceProject().getName() + "!";
+ }
+ form.setText(text);
+ }
+
+ private void createUploadHyperLink(final Composite parent, final Shell shell) {
+ uploadLink = createImageHyperlink(form.getBody(), UPLOAD_IMAGE,
+ UPLOAD_HOVER_IMAGE, UPLOAD_MSG);
+ setUploadLinkEnablement();
+ uploadLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ upload(shell);
+ }
+ });
+ }
+
+ private void setUploadLinkEnablement() {
+ if (service.isValidSketch()) {
+ uploadLink.setEnabled(true);
+ uploadLink.setToolTipText(UPLOAD_MSG);
+ } else {
+ uploadLink.setEnabled(false);
+ }
+ }
+
+ private void createSketchHyperLink(final Composite parent, final Shell shell) {
+ sketchLink = createImageHyperlink(form.getBody(), SKETCH_IMAGE,
+ SKETCH_HOVER_IMAGE, SKETCH_MSG);
+ setSketchLinkEnablement();
+ sketchLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ Session session = service.getSession();
+ DialectUIManager.INSTANCE.openEditor(session,
+ service.getDiagram(session, "Sketch"),
+ new NullProgressMonitor());
+ }
+ });
+ }
+
+ private void setSketchLinkEnablement() {
+ if (service.isValidHardware()) {
+ sketchLink.setEnabled(true);
+ if (service.isValidSketch()) {
+ sketchLink.setToolTipText(SKETCH_MSG);
+ sketchLink.setImage(getImage(SKETCH_IMAGE));
+ sketchLink.setHoverImage(getImage(SKETCH_HOVER_IMAGE));
+ } else {
+ sketchLink.setToolTipText(SKETCH_INVALID_MSG);
+ sketchLink.setImage(getImage(SKETCH_INVALID_IMAGE));
+ sketchLink.setHoverImage(getImage(SKETCH_INVALID_HOVER_IMAGE));
+ }
+ } else {
+ sketchLink.setEnabled(false);
+ }
+ }
+
+ private void createHardwareHyperLink(final Composite parent,
+ final Shell shell) {
+ hardwareLink = createImageHyperlink(form.getBody(), HARDWARE_IMAGE,
+ HARDWARE_HOVER_IMAGE, HARDWARE_MSG);
+ setHardwareLinkEnablement();
+ hardwareLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ Session session = service.getSession();
+ DialectUIManager.INSTANCE.openEditor(session,
+ service.getDiagram(session, "Hardware"),
+ new NullProgressMonitor());
+ }
+ });
+ }
+
+ private void setHardwareLinkEnablement() {
+ if (service.isProjectOpened()) {
+ hardwareLink.setEnabled(true);
+ if (service.isValidHardware()) {
+ hardwareLink.setToolTipText(HARDWARE_MSG);
+ hardwareLink.setImage(getImage(HARDWARE_IMAGE));
+ hardwareLink.setHoverImage(getImage(HARDWARE_HOVER_IMAGE));
+ } else {
+ hardwareLink.setImage(getImage(HARDWARE_INVALID_IMAGE));
+ hardwareLink
+ .setHoverImage(getImage(HARDWARE_INVALID_HOVER_IMAGE));
+ hardwareLink.setToolTipText(HARDWARE_INVALID_MSG);
+ }
+ } else {
+ hardwareLink.setEnabled(false);
+ }
+ }
+
+ private void createPreferencesHyperLink(final Shell shell) {
+ ImageHyperlink preferencesLink = createImageHyperlink(form.getBody(),
+ "icons/128x128/preferences.png", "icons/128x128/preferencesHover.png",
+ "Set the preferences (arduino SDK ,serial port...)");
+ preferencesLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ preferencesDialog(shell);
+ }
+ });
+ }
+
+ private void createOpenProjectHyperLink(final Composite parent,
+ final Shell shell) {
+ ImageHyperlink openProjectLink = createImageHyperlink(form.getBody(),
+ "icons/128x128/openProject.png", "icons/128x128/openProjectHover.png",
+ "Open an existing project");
+ openProjectLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ openProjectDialog(shell);
+ }
+ });
+ }
+
+ private void createNewProjectHyperLink(final Composite parent,
+ final Shell shell) {
+ ImageHyperlink newProjectLink = createImageHyperlink(form.getBody(),
+ "icons/128x128/newProject.png", "icons/128x128/newProjectHover.png",
+ "Create a new project");
+ newProjectLink.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ newProjectDialog(shell);
+ }
+ });
+ }
+
+ private void upload(Shell shell) {
+ Project project = service.getArduinoProject();
+ if (project != null) {
+ service.upload(project.getSketch());
+ }
+ }
+
+ private void refreshForm() {
+ Display.getDefault().syncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ setFormText();
+ setHardwareLinkEnablement();
+ setSketchLinkEnablement();
+ setUploadLinkEnablement();
+ form.getParent().update();
+
+ }
+ });
+
+ }
+
+ private ImageHyperlink createImageHyperlink(Composite parent,
+ String imagePath, String hoverImagePath, String toolTipText) {
+ ImageHyperlink imageLink = toolkit.createImageHyperlink(parent,
+ SWT.WRAP);
+ Image image = getImage(imagePath);
+ imageLink.setImage(image);
+ Image hoverImage = getImage(hoverImagePath);
+ imageLink.setHoverImage(hoverImage);
+ imageLink.setToolTipText(toolTipText);
+ return imageLink;
+ }
+
+ private Image getImage(String relativePath) {
+ return ArduinoUiActivator.getImageDescriptor(relativePath)
+ .createImage();
+ }
+
+ private void openProjectDialog(Shell shell) {
+ WizardDialog wizard = new WizardDialog(shell,
+ new ArduinoExternalProjectImportWizard(IDEWorkbenchPlugin
+ .getPluginWorkspace().getRoot().getLocation()
+ .toOSString()));
+ wizard.open();
+ }
+
+ private void preferencesDialog(final Composite parent) {
+ Shell shell = parent.getShell();
+ PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(
+ shell, "fr.obeo.dsl.arduino.preferences.ArduinoPreferencePage",
+ new String[] {}, null);
+ if (dialog != null) {
+ dialog.open();
+ }
+ }
+
+ private void newProjectDialog(final Shell shell) {
+ WizardDialog wizard = new WizardDialog(shell,
+ new ArduinoProjectWizard());
+ wizard.open();
+ }
+
+ @Override
+ public void setFocus() {
+ form.setFocus();
+ }
+
+ /**
+ * Disposes the toolkit
+ */
+ public void dispose() {
+ toolkit.dispose();
+ for (Image image : images) {
+ image.dispose();
+ }
+ getSite().getPage().removePartListener(this);
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+ super.dispose();
+ }
+
+ @Override
+ public void partActivated(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void partBroughtToTop(IWorkbenchPartReference partRef) {
+ refreshForm();
+ }
+
+ @Override
+ public void partClosed(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void partDeactivated(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void partOpened(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void partHidden(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void partVisible(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void partInputChanged(IWorkbenchPartReference partRef) {
+
+ }
+
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ if (event == null || event.getDelta() == null)
+ return;
+ try {
+ event.getDelta().accept(new IResourceDeltaVisitor() {
+ public boolean visit(IResourceDelta delta) throws CoreException {
+ if (delta.getKind() == IResourceDelta.OPEN) {
+ final IResource resource = delta.getResource();
+ if (!(resource instanceof IProject)) {
+ return false;
+ }
+ }
+ refreshForm();
+ return true;
+ }
+ });
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Refresh dashboard failed", e);
+ }
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoExternalProjectImportWizard.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoExternalProjectImportWizard.java
new file mode 100644
index 00000000..d8ff50b3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoExternalProjectImportWizard.java
@@ -0,0 +1,81 @@
+package fr.obeo.dsl.arduino.wizard;
+
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+
+public class ArduinoExternalProjectImportWizard extends Wizard implements
+ IImportWizard {
+ private static final String EXTERNAL_PROJECT_SECTION = "ExternalProjectImportWizard";//$NON-NLS-1$
+ private ArduinoWizardProjectsImportPage mainPage;
+ private IStructuredSelection currentSelection = null;
+ private String initialPath = null;
+
+ /**
+ * Constructor for ExternalProjectImportWizard.
+ */
+ public ArduinoExternalProjectImportWizard() {
+ this(null);
+ }
+
+ /**
+ * Constructor for ExternalProjectImportWizard.
+ *
+ * @param initialPath
+ * Default path for wizard to import
+ * @since 3.5
+ */
+ public ArduinoExternalProjectImportWizard(String initialPath) {
+ super();
+ this.initialPath = initialPath;
+ setNeedsProgressMonitor(true);
+ IDialogSettings workbenchSettings = IDEWorkbenchPlugin.getDefault()
+ .getDialogSettings();
+
+ IDialogSettings wizardSettings = workbenchSettings
+ .getSection(EXTERNAL_PROJECT_SECTION);
+ if (wizardSettings == null) {
+ wizardSettings = workbenchSettings
+ .addNewSection(EXTERNAL_PROJECT_SECTION);
+ }
+ setDialogSettings(wizardSettings);
+ }
+
+ /*
+ * (non-Javadoc) Method declared on IWizard.
+ */
+ public void addPages() {
+ super.addPages();
+ mainPage = new ArduinoWizardProjectsImportPage(
+ "wizardExternalProjectsPage", initialPath, currentSelection); //$NON-NLS-1$
+ addPage(mainPage);
+ }
+
+ /*
+ * (non-Javadoc) Method declared on IWorkbenchWizard.
+ */
+ public void init(IWorkbench workbench, IStructuredSelection currentSelection) {
+ setWindowTitle("Open");
+ setDefaultPageImageDescriptor(IDEWorkbenchPlugin
+ .getIDEImageDescriptor("wizban/importproj_wiz.png")); //$NON-NLS-1$
+ this.currentSelection = currentSelection;
+ }
+
+ /*
+ * (non-Javadoc) Method declared on IWizard.
+ */
+ public boolean performCancel() {
+ mainPage.performCancel();
+ return true;
+ }
+
+ /*
+ * (non-Javadoc) Method declared on IWizard.
+ */
+ public boolean performFinish() {
+ return mainPage.createProjects();
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoModelingProjectCreationOperation.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoModelingProjectCreationOperation.java
new file mode 100644
index 00000000..d15c3cf0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoModelingProjectCreationOperation.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.wizard;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+import fr.obeo.dsl.arduino.utils.ProjectServices;
+
+public class ArduinoModelingProjectCreationOperation extends
+ WorkspaceModifyOperation {
+
+ private IProject project;
+
+ public ArduinoModelingProjectCreationOperation(IProject project) {
+ this.project = project;
+ }
+
+ @Override
+ protected void execute(IProgressMonitor monitor) throws CoreException,
+ InvocationTargetException, InterruptedException {
+ try {
+ final ProjectServices service = new ProjectServices();
+
+ monitor.beginTask("Load project", 100);
+ monitor.subTask("Close project");
+ service.closeProjects(monitor);
+ monitor.worked(50);
+ monitor.subTask("Create project");
+ service.createProject(monitor, project);
+ monitor.worked(50);
+ } finally {
+ monitor.done();
+ }
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoProjectWizard.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoProjectWizard.java
new file mode 100644
index 00000000..5ccbc240
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoProjectWizard.java
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.wizard;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.sirius.common.tools.api.util.ReflectionHelper;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
+import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
+
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+
+public class ArduinoProjectWizard extends BasicNewProjectResourceWizard {
+ private WizardNewProjectCreationPage wizardNewProjectCreationPage;
+ protected IWorkbench workbench;
+
+ public ArduinoProjectWizard() {
+ super();
+ }
+
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ super.init(workbench, selection);
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle("New Arduino Project"); //$NON-NLS-1$
+ setNeedsProgressMonitor(true);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void addPages() {
+ wizardNewProjectCreationPage = new WizardNewProjectCreationPage(
+ "Create a new Arduino project") {
+
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+
+ Composite control = (Composite) getControl();
+ GridLayout layout = new GridLayout();
+ control.setLayout(layout);
+ Dialog.applyDialogFont(control);
+ }
+ };
+
+ wizardNewProjectCreationPage.setInitialProjectName("NewArduinoProject");//$NON-NLS-1$
+ wizardNewProjectCreationPage.setTitle("Create a new Arduino project"); //$NON-NLS-1$
+ wizardNewProjectCreationPage.setDescription("Enter a project name"); //$NON-NLS-1$
+
+ // Fix for VP-3711 to avoid a NPE on 3.8
+ ReflectionHelper.setFieldValueWithoutException(this,
+ "newProjectCreationPage", wizardNewProjectCreationPage);
+
+ addPage(wizardNewProjectCreationPage);
+ }
+
+ @Override
+ public boolean performFinish() {
+ final ArduinoModelingProjectCreationOperation arduinoModelingProjectCreationOperation = new ArduinoModelingProjectCreationOperation(
+ wizardNewProjectCreationPage.getProjectHandle());
+
+ try {
+ getContainer().run(true, false,
+ arduinoModelingProjectCreationOperation);
+ } catch (InvocationTargetException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Create project failed", e);
+ } catch (InterruptedException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Create project failed", e);
+ }
+ return true;
+ }
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoWizardProjectsImportPage.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoWizardProjectsImportPage.java
new file mode 100644
index 00000000..26dd5cb6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/ArduinoWizardProjectsImportPage.java
@@ -0,0 +1,1056 @@
+package fr.obeo.dsl.arduino.wizard;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.gef.EditPartViewer;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.layout.PixelConverter;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.sirius.ui.business.api.dialect.DialectEditor;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+import org.eclipse.sirius.ui.business.api.session.IEditingSession;
+import org.eclipse.sirius.ui.business.api.session.SessionUIManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardDataTransferPage;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.internal.ide.StatusUtil;
+import org.eclipse.ui.internal.wizards.datatransfer.ILeveledImportStructureProvider;
+import org.eclipse.ui.statushandlers.StatusManager;
+
+import fr.obeo.dsl.arduino.menus.ArduinoUiActivator;
+
+/**
+ * The WizardProjectsImportPage is the page that allows the user to import
+ * projects from a particular location.
+ */
+public class ArduinoWizardProjectsImportPage extends WizardDataTransferPage {
+
+ /**
+ * The name of the folder containing metadata information for the workspace.
+ */
+ public static final String METADATA_FOLDER = ".metadata"; //$NON-NLS-1$
+
+ /**
+ * The import structure provider.
+ *
+ * @since 3.4
+ */
+ private ILeveledImportStructureProvider structureProvider;
+
+ /**
+ * @since 3.5
+ *
+ */
+ private final class ProjectLabelProvider extends LabelProvider implements
+ IColorProvider {
+
+ public String getText(Object element) {
+ return ((ProjectRecord) element).getProjectLabel();
+ }
+
+ public Color getBackground(Object element) {
+ return null;
+ }
+
+ public Color getForeground(Object element) {
+ ProjectRecord projectRecord = (ProjectRecord) element;
+ if (projectRecord.hasConflicts)
+ return getShell().getDisplay().getSystemColor(SWT.COLOR_GRAY);
+ return null;
+ }
+ }
+
+ /**
+ * Class declared public only for test suite.
+ *
+ */
+ public class ProjectRecord {
+ File projectSystemFile;
+
+ String projectName;
+
+ Object parent;
+
+ int level;
+
+ boolean hasConflicts;
+
+ IProjectDescription description;
+
+ /**
+ * Create a record for a project based on the info in the file.
+ *
+ * @param file
+ */
+ ProjectRecord(File file) {
+ projectSystemFile = file;
+ setProjectName();
+ }
+
+ /**
+ * @param file
+ * The Object representing the .project file
+ * @param parent
+ * The parent folder of the .project file
+ * @param level
+ * The number of levels deep in the provider the file is
+ */
+ ProjectRecord(Object file, Object parent, int level) {
+ this.parent = parent;
+ this.level = level;
+ setProjectName();
+ }
+
+ /**
+ * Set the name of the project based on the projectFile.
+ */
+ private void setProjectName() {
+ try {
+
+ // If we don't have the project name try again
+ if (projectName == null) {
+ IPath path = new Path(projectSystemFile.getPath());
+ // if the file is in the default location, use the directory
+ // name as the project name
+ if (isDefaultLocation(path)) {
+ projectName = path.segment(path.segmentCount() - 2);
+ description = IDEWorkbenchPlugin.getPluginWorkspace()
+ .newProjectDescription(projectName);
+ } else {
+ description = IDEWorkbenchPlugin.getPluginWorkspace()
+ .loadProjectDescription(path);
+ projectName = description.getName();
+ }
+
+ }
+ } catch (CoreException e) {
+ // no good couldn't get the name
+ }
+ }
+
+ /**
+ * Returns whether the given project description file path is in the
+ * default location for a project
+ *
+ * @param path
+ * The path to examine
+ * @return Whether the given path is the default location for a project
+ */
+ private boolean isDefaultLocation(IPath path) {
+ // The project description file must at least be within the project,
+ // which is within the workspace location
+ if (path.segmentCount() < 2)
+ return false;
+ return path.removeLastSegments(2).toFile()
+ .equals(Platform.getLocation().toFile());
+ }
+
+ /**
+ * Get the name of the project
+ *
+ * @return String
+ */
+ public String getProjectName() {
+ return projectName;
+ }
+
+ /**
+ * Gets the label to be used when rendering this project record in the
+ * UI.
+ *
+ * @return String the label
+ * @since 3.4
+ */
+ public String getProjectLabel() {
+ return projectName;
+ }
+
+ /**
+ * @return Returns the hasConflicts.
+ */
+ public boolean hasConflicts() {
+ return hasConflicts;
+ }
+ }
+
+ // dialog store id constants
+ private final static String STORE_DIRECTORIES = "WizardProjectsImportPage.STORE_DIRECTORIES";//$NON-NLS-1$
+
+ private Combo directoryPathField;
+
+ private TreeViewer projectsList;
+ private ProjectRecord selectedProject = null;
+
+ private ProjectRecord[] selectedProjects = new ProjectRecord[0];
+
+ // Keep track of the directory that we browsed to last time
+ // the wizard was invoked.
+ private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$
+
+ private Label projectFromDirectoryRadio;
+
+ private Button browseDirectoriesButton;
+
+ private IProject[] wsProjects;
+
+ // The initial path to set
+ private String initialPath;
+
+ // The last selected path to minimize searches
+ private String lastPath;
+ // The last time that the file or folder at the selected path was modified
+ // to mimize searches
+ private long lastModified;
+
+ /**
+ * Creates a new project creation wizard page.
+ *
+ */
+ public ArduinoWizardProjectsImportPage() {
+ this("wizardExternalProjectsPage", null, null); //$NON-NLS-1$
+ }
+
+ /**
+ * Create a new instance of the receiver.
+ *
+ * @param pageName
+ */
+ public ArduinoWizardProjectsImportPage(String pageName) {
+ this(pageName, null, null);
+ }
+
+ /**
+ * More (many more) parameters.
+ *
+ * @param pageName
+ * @param initialPath
+ * @param currentSelection
+ * @since 3.5
+ */
+ public ArduinoWizardProjectsImportPage(String pageName, String initialPath,
+ IStructuredSelection currentSelection) {
+ super(pageName);
+ this.initialPath = initialPath;
+ setPageComplete(false);
+ setTitle("Open project");
+ setDescription("Open an existing project.");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
+ * .Composite)
+ */
+ public void createControl(Composite parent) {
+
+ initializeDialogUnits(parent);
+
+ Composite workArea = new Composite(parent, SWT.NONE);
+ setControl(workArea);
+
+ workArea.setLayout(new GridLayout());
+ workArea.setLayoutData(new GridData(GridData.FILL_BOTH
+ | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
+
+ createProjectsRoot(workArea);
+ createProjectsList(workArea);
+ restoreWidgetValues();
+ Dialog.applyDialogFont(workArea);
+
+ }
+
+ /**
+ * Create the checkbox list for the found projects.
+ *
+ * @param workArea
+ */
+ private void createProjectsList(Composite workArea) {
+
+ Label title = new Label(workArea, SWT.NONE);
+ title.setText("Projects:");
+
+ Composite listComposite = new Composite(workArea, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ layout.marginWidth = 0;
+ layout.makeColumnsEqualWidth = false;
+ listComposite.setLayout(layout);
+
+ listComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
+ | GridData.GRAB_VERTICAL | GridData.FILL_BOTH));
+
+ projectsList = new TreeViewer(listComposite, SWT.BORDER);
+ projectsList.getTree().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ selectedProject = (ProjectRecord) e.item.getData();
+ if (selectedProject != null) {
+ setPageComplete(true);
+ }
+ }
+ });
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.widthHint = new PixelConverter(projectsList.getControl())
+ .convertWidthInCharsToPixels(25);
+ gridData.heightHint = new PixelConverter(projectsList.getControl())
+ .convertHeightInCharsToPixels(10);
+ projectsList.getControl().setLayoutData(gridData);
+ projectsList.setContentProvider(new ITreeContentProvider() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java
+ * .lang.Object)
+ */
+ public Object[] getChildren(Object parentElement) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.IStructuredContentProvider#getElements
+ * (java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ return getProjectRecords();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java
+ * .lang.Object)
+ */
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.ITreeContentProvider#getParent(java
+ * .lang.Object)
+ */
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse
+ * .jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput,
+ Object newInput) {
+ }
+
+ });
+
+ projectsList.setLabelProvider(new ProjectLabelProvider());
+
+ projectsList.setInput(this);
+ projectsList.setComparator(new ViewerComparator());
+ }
+
+ /**
+ * Create the area where you select the root directory for the projects.
+ *
+ * @param workArea
+ * Composite
+ */
+ private void createProjectsRoot(Composite workArea) {
+
+ // project specification group
+ Composite projectGroup = new Composite(workArea, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 3;
+ layout.makeColumnsEqualWidth = false;
+ layout.marginWidth = 0;
+ projectGroup.setLayout(layout);
+ projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ // new project from directory radio button
+ projectFromDirectoryRadio = new Label(projectGroup, SWT.NORMAL);
+ projectFromDirectoryRadio.setText("Select directory:");
+
+ // project location entry combo
+ this.directoryPathField = new Combo(projectGroup, SWT.BORDER);
+
+ GridData directoryPathData = new GridData(
+ GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
+ directoryPathData.widthHint = new PixelConverter(directoryPathField)
+ .convertWidthInCharsToPixels(25);
+ directoryPathField.setLayoutData(directoryPathData);
+
+ // browse button
+ browseDirectoriesButton = new Button(projectGroup, SWT.PUSH);
+ browseDirectoriesButton.setText("Browse...");
+ setButtonLayoutData(browseDirectoriesButton);
+
+ browseDirectoriesButton.addSelectionListener(new SelectionAdapter() {
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetS
+ * elected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ handleLocationDirectoryButtonPressed();
+ }
+
+ });
+
+ directoryPathField.addTraverseListener(new TraverseListener() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.swt.events.TraverseListener#keyTraversed(org.eclipse
+ * .swt.events.TraverseEvent)
+ */
+ public void keyTraversed(TraverseEvent e) {
+ if (e.detail == SWT.TRAVERSE_RETURN) {
+ e.doit = false;
+ updateProjectsList(directoryPathField.getText().trim());
+ }
+ }
+
+ });
+
+ directoryPathField.addFocusListener(new FocusAdapter() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt
+ * .events.FocusEvent)
+ */
+ public void focusLost(org.eclipse.swt.events.FocusEvent e) {
+ updateProjectsList(directoryPathField.getText().trim());
+ }
+
+ });
+
+ directoryPathField.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ updateProjectsList(directoryPathField.getText().trim());
+ }
+ });
+ }
+
+ private void directoryRadioSelected() {
+ directoryPathField.setEnabled(true);
+ browseDirectoriesButton.setEnabled(true);
+ updateProjectsList(directoryPathField.getText());
+ directoryPathField.setFocus();
+ }
+
+ /*
+ * (non-Javadoc) Method declared on IDialogPage. Set the focus on path
+ * fields when page becomes visible.
+ */
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ if (visible) {
+ this.directoryPathField.setFocus();
+ }
+ }
+
+ /**
+ * Update the list of projects based on path. Method declared public only
+ * for test suite.
+ *
+ * @param path
+ */
+ public void updateProjectsList(final String path) {
+ // on an empty path empty selectedProjects
+ if (path == null || path.length() == 0) {
+ setMessage("Select a directory to search for existing Arduino Designer projects.");
+ selectedProjects = new ProjectRecord[0];
+ projectsList.refresh(true);
+ setPageComplete(selectedProject != null);
+ lastPath = path;
+ return;
+ }
+
+ final File directory = new File(path);
+ long modified = directory.lastModified();
+ if (path.equals(lastPath) && lastModified == modified) {
+ // since the file/folder was not modified and the path did not
+ // change, no refreshing is required
+ return;
+ }
+
+ lastPath = path;
+ lastModified = modified;
+
+ // We can't access the radio button from the inner class so get the
+ // status beforehand
+ try {
+ getContainer().run(true, true, new IRunnableWithProgress() {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.operation.IRunnableWithProgress#run(org
+ * .eclipse.core.runtime.IProgressMonitor)
+ */
+ public void run(IProgressMonitor monitor) {
+
+ monitor.beginTask("Searching for projects", 100);
+ selectedProjects = new ProjectRecord[0];
+ Collection files = new ArrayList();
+ monitor.worked(10);
+ if (directory.isDirectory()) {
+
+ if (!collectProjectFilesFromDirectory(files, directory,
+ null, monitor)) {
+ return;
+ }
+ Iterator filesIterator = files.iterator();
+ selectedProjects = new ProjectRecord[files.size()];
+ int index = 0;
+ monitor.worked(50);
+ monitor.subTask("Pocessing results");
+ while (filesIterator.hasNext()) {
+ File file = (File) filesIterator.next();
+ selectedProjects[index] = new ProjectRecord(file);
+ index++;
+ }
+ } else {
+ monitor.worked(60);
+ }
+ monitor.done();
+ }
+
+ });
+ } catch (InvocationTargetException e) {
+ IDEWorkbenchPlugin.log(e.getMessage(), e);
+ } catch (InterruptedException e) {
+ // Nothing to do if the user interrupts.
+ }
+
+ projectsList.refresh(true);
+ ProjectRecord[] projects = getProjectRecords();
+ boolean displayWarning = false;
+ for (int i = 0; i < projects.length; i++) {
+ if (projects[i].hasConflicts) {
+ displayWarning = true;
+ }
+ }
+
+ if (displayWarning) {
+ setMessage(
+ "Some projects cannot be imported because they already exist in the workspace",
+ WARNING);
+ } else {
+ setMessage("Select a directory to search for existing Arduino Designer projects.");
+ }
+ setPageComplete(selectedProject != null);
+ if (selectedProjects.length == 0) {
+ setMessage("No projects are found, select another directory",
+ WARNING);
+ }
+ }
+
+ /**
+ * Collect the list of .project files that are under directory into files.
+ *
+ * @param files
+ * @param directory
+ * @param directoriesVisited
+ * Set of canonical paths of directories, used as recursion guard
+ * @param monitor
+ * The monitor to report to
+ * @return boolean true
if the operation was completed.
+ */
+ private boolean collectProjectFilesFromDirectory(Collection files,
+ File directory, Set directoriesVisited, IProgressMonitor monitor) {
+
+ if (monitor.isCanceled()) {
+ return false;
+ }
+ monitor.subTask("Checking:" + directory.getPath());
+ File[] contents = directory.listFiles();
+ if (contents == null)
+ return false;
+
+ // Initialize recursion guard for recursive symbolic links
+ if (directoriesVisited == null) {
+ directoriesVisited = new HashSet();
+ try {
+ directoriesVisited.add(directory.getCanonicalPath());
+ } catch (IOException exception) {
+ StatusManager.getManager().handle(
+ StatusUtil.newStatus(IStatus.ERROR,
+ exception.getLocalizedMessage(), exception));
+ }
+ }
+
+ // first look for project description files
+ final String dotProject = IProjectDescription.DESCRIPTION_FILE_NAME;
+ for (int i = 0; i < contents.length; i++) {
+ File file = contents[i];
+ if (file.isFile() && file.getName().equals(dotProject)) {
+ files.add(file);
+ }
+ }
+ // no project description found or search for nested projects enabled,
+ // so recurse into sub-directories
+ for (int i = 0; i < contents.length; i++) {
+ if (contents[i].isDirectory()) {
+ if (!contents[i].getName().equals(METADATA_FOLDER)) {
+ try {
+ String canonicalPath = contents[i].getCanonicalPath();
+ if (!directoriesVisited.add(canonicalPath)) {
+ // already been here --> do not recurse
+ continue;
+ }
+ } catch (IOException exception) {
+ StatusManager.getManager().handle(
+ StatusUtil.newStatus(IStatus.ERROR,
+ exception.getLocalizedMessage(),
+ exception));
+
+ }
+ collectProjectFilesFromDirectory(files, contents[i],
+ directoriesVisited, monitor);
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * The browse button has been selected. Select the location.
+ */
+ protected void handleLocationDirectoryButtonPressed() {
+
+ DirectoryDialog dialog = new DirectoryDialog(
+ directoryPathField.getShell(), SWT.SHEET);
+ dialog.setMessage("Select directory of the project to open");
+
+ String dirName = directoryPathField.getText().trim();
+ if (dirName.length() == 0) {
+ dirName = previouslyBrowsedDirectory;
+ }
+
+ if (dirName.length() == 0) {
+ dialog.setFilterPath(IDEWorkbenchPlugin.getPluginWorkspace()
+ .getRoot().getLocation().toOSString());
+ } else {
+ File path = new File(dirName);
+ if (path.exists()) {
+ dialog.setFilterPath(new Path(dirName).toOSString());
+ }
+ }
+
+ String selectedDirectory = dialog.open();
+ if (selectedDirectory != null) {
+ previouslyBrowsedDirectory = selectedDirectory;
+ directoryPathField.setText(previouslyBrowsedDirectory);
+ updateProjectsList(selectedDirectory);
+ }
+ }
+
+ /**
+ * Create the selected projects
+ *
+ * @return boolean true
if all project creations were
+ * successful.
+ */
+ public boolean createProjects() {
+ saveWidgetValues();
+
+ final Object selected = selectedProject;
+ createdProjects = new ArrayList();
+ WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+ protected void execute(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ try {
+ monitor.beginTask("", 1); //$NON-NLS-1$
+ if (monitor.isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ if (selectedProject != null)
+ createExistingProject((ProjectRecord) selectedProject,
+ new SubProgressMonitor(monitor, 1));
+ } finally {
+ monitor.done();
+ }
+ }
+ };
+ // run the new project creation operation
+ try {
+ getContainer().run(true, true, op);
+ } catch (InterruptedException e) {
+ return false;
+ } catch (InvocationTargetException e) {
+ // one of the steps resulted in a core exception
+ Throwable t = e.getTargetException();
+ String message = "Creation Problems";
+ IStatus status;
+ if (t instanceof CoreException) {
+ status = ((CoreException) t).getStatus();
+ } else {
+ status = new Status(IStatus.ERROR,
+ IDEWorkbenchPlugin.IDE_WORKBENCH, 1, message, t);
+ }
+ ErrorDialog.openError(getShell(), message, null, status);
+ return false;
+ }
+
+ return true;
+ }
+
+ List createdProjects;
+
+ /**
+ * Performs clean-up if the user cancels the wizard without doing anything
+ */
+ public void performCancel() {
+ }
+
+ /**
+ * Create the project described in record. If it is successful return true.
+ *
+ * @param record
+ * @return boolean true
if successful
+ * @throws InterruptedException
+ */
+ private boolean createExistingProject(final ProjectRecord record,
+ final IProgressMonitor monitor) throws InvocationTargetException,
+ InterruptedException {
+ final String projectName = record.getProjectName();
+ final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ final IProject project = workspace.getRoot().getProject(projectName);
+
+ for (IEditingSession uiSession : SessionUIManager.INSTANCE
+ .getUISessions()) {
+ for (DialectEditor editor : uiSession.getEditors()) {
+ if (editor instanceof DiagramEditor) {
+ final EditPartViewer graphicalViewer = ((DiagramEditor) editor)
+ .getDiagramGraphicalViewer();
+
+ if (graphicalViewer != null) {
+ graphicalViewer.setSelection(new StructuredSelection());
+ Display.getDefault().syncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ graphicalViewer.flush();
+
+ }
+ });
+ /*
+ * We need to spin the ui thread so that the editor has
+ * the change to update its action enablement before we
+ * close and unload everything.
+ *
+ * We just hope to be lucky and to be scheduled after
+ * the runnables launched by the arrange action in
+ * particular.
+ */
+ SWTThreadingUtils.waitForAsyncExecsToFinish(Display
+ .getDefault());
+ }
+ } else {
+ DialectUIManager.INSTANCE.setSelection(editor,
+ Collections.EMPTY_LIST);
+ }
+ }
+ SWTThreadingUtils.waitForAsyncExecsToFinish(Display.getDefault());
+ }
+
+ SWTThreadingUtils.waitForAsyncExecsToFinish(Display.getDefault());
+
+ // for (Session openedSession : SessionManager.INSTANCE.getSessions()) {
+ // openedSession.save(monitor);
+ // openedSession.close(monitor);
+ // }
+
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ for (IProject projectToClose : root.getProjects()) {
+ try {
+ if (projectToClose.isOpen()) {
+ System.out.println("Closing : " + projectToClose.getName());
+ projectToClose.close(monitor);
+ projectToClose.delete(false, false, monitor);
+ }
+ monitor.worked(25);
+ } catch (CoreException e) {
+ ArduinoUiActivator.log(Status.ERROR, "Close project failed", e);
+ }
+ }
+
+ createdProjects.add(project);
+ if (record.description == null) {
+ // error case
+ record.description = workspace.newProjectDescription(projectName);
+ IPath locationPath = new Path(
+ record.projectSystemFile.getAbsolutePath());
+
+ // If it is under the root use the default location
+ if (Platform.getLocation().isPrefixOf(locationPath)) {
+ record.description.setLocation(null);
+ } else {
+ record.description.setLocation(locationPath);
+ }
+ } else {
+ record.description.setName(projectName);
+ }
+
+ // import from file system
+ try {
+ monitor.beginTask("Creating Projects", 100);
+ project.create(record.description, new SubProgressMonitor(monitor,
+ 30));
+ project.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(
+ monitor, 70));
+ } catch (CoreException e) {
+ } finally {
+ monitor.done();
+ }
+
+ return true;
+ }
+
+ /**
+ * Method used for test suite.
+ *
+ * @return TreeViewer the viewer containing all the projects found
+ */
+ public TreeViewer getProjectsList() {
+ return projectsList;
+ }
+
+ /**
+ * Retrieve all the projects in the current workspace.
+ *
+ * @return IProject[] array of IProject in the current workspace
+ */
+ private IProject[] getProjectsInWorkspace() {
+ if (wsProjects == null) {
+ wsProjects = IDEWorkbenchPlugin.getPluginWorkspace().getRoot()
+ .getProjects();
+ }
+ return wsProjects;
+ }
+
+ /**
+ * Get the array of project records that can be imported from the source
+ * workspace or archive, selected by the user. If a project with the same
+ * name exists in both the source workspace and the current workspace, then
+ * the hasConflicts flag would be set on that project record.
+ *
+ * Method declared public for test suite.
+ *
+ * @return ProjectRecord[] array of projects that can be imported into the
+ * workspace
+ */
+ public ProjectRecord[] getProjectRecords() {
+ List projectRecords = new ArrayList();
+ for (int i = 0; i < selectedProjects.length; i++) {
+ if (isProjectInWorkspace(selectedProjects[i].getProjectName())) {
+ selectedProjects[i].hasConflicts = true;
+ }
+ projectRecords.add(selectedProjects[i]);
+ }
+ return (ProjectRecord[]) projectRecords
+ .toArray(new ProjectRecord[projectRecords.size()]);
+ }
+
+ /**
+ * Determine if there is a directory with the project name in the workspace
+ * path.
+ *
+ * @param projectName
+ * the name of the project
+ * @return true if there is a directory with the same name of the imported
+ * project
+ */
+ private boolean isProjectInWorkspacePath(String projectName) {
+ final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IPath wsPath = workspace.getRoot().getLocation();
+ IPath localProjectPath = wsPath.append(projectName);
+ return localProjectPath.toFile().exists();
+ }
+
+ /**
+ * Determine if the project with the given name is in the current workspace.
+ *
+ * @param projectName
+ * String the project name to check
+ * @return boolean true if the project with the given name is in this
+ * workspace
+ */
+ private boolean isProjectInWorkspace(String projectName) {
+ if (projectName == null) {
+ return false;
+ }
+ IProject[] workspaceProjects = getProjectsInWorkspace();
+ for (int i = 0; i < workspaceProjects.length; i++) {
+ if (projectName.equals(workspaceProjects[i].getName())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Use the dialog store to restore widget values to the values that they
+ * held last time this wizard was used to completion, or alternatively, if
+ * an initial path is specified, use it to select values.
+ *
+ * Method declared public only for use of tests.
+ */
+ public void restoreWidgetValues() {
+
+ // First, check to see if we have resore settings, and
+ // take care of the checkbox
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ restoreFromHistory(settings, STORE_DIRECTORIES, directoryPathField);
+ }
+
+ // Second, check to see if we don't have an initial path,
+ // and if we do have restore settings. If so, set the
+ // radio selection properly to restore settings
+
+ if (initialPath == null && settings != null) {
+ directoryRadioSelected();
+ }
+ // Third, if we do have an initial path, set the proper
+ // path and radio buttons to the initial value. Move
+ // cursor to the end of the path so user can see the
+ // most relevant part (directory / archive name)
+ else if (initialPath != null) {
+ boolean dir = new File(initialPath).isDirectory();
+
+ if (dir) {
+ directoryPathField.setText(initialPath);
+ directoryPathField.setSelection(new Point(initialPath.length(),
+ initialPath.length()));
+ directoryRadioSelected();
+ }
+ }
+ }
+
+ private void restoreFromHistory(IDialogSettings settings, String key,
+ Combo combo) {
+ String[] sourceNames = settings.getArray(key);
+ if (sourceNames == null) {
+ return; // ie.- no values stored, so stop
+ }
+
+ for (int i = 0; i < sourceNames.length; i++) {
+ combo.add(sourceNames[i]);
+ }
+ }
+
+ /**
+ * Since Finish was pressed, write widget values to the dialog store so that
+ * they will persist into the next invocation of this wizard page.
+ *
+ * Method declared public only for use of tests.
+ */
+ public void saveWidgetValues() {
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ saveInHistory(settings, STORE_DIRECTORIES,
+ directoryPathField.getText());
+ }
+ }
+
+ private void saveInHistory(IDialogSettings settings, String key,
+ String value) {
+ String[] sourceNames = settings.getArray(key);
+ if (sourceNames == null) {
+ sourceNames = new String[0];
+ }
+ sourceNames = addToHistory(sourceNames, value);
+ settings.put(key, sourceNames);
+ }
+
+ public void handleEvent(Event event) {
+ }
+
+ protected boolean allowNewContainerName() {
+ return true;
+ }
+
+}
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/SWTThreadingUtils.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/SWTThreadingUtils.java
new file mode 100644
index 00000000..53aa141c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino.ui/src/fr/obeo/dsl/arduino/wizard/SWTThreadingUtils.java
@@ -0,0 +1,44 @@
+package fr.obeo.dsl.arduino.wizard;
+
+import org.eclipse.swt.widgets.Display;
+
+public class SWTThreadingUtils
+{
+
+ public static void waitForAsyncExecsToFinish(Display display)
+ {
+ Object waitObj = new Object();
+
+ display.asyncExec(new DummyRunnable(waitObj));
+ synchronized (waitObj)
+ {
+ try {
+ waitObj.wait();
+
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+
+ private static class DummyRunnable implements Runnable
+ {
+ private Object waitObj;
+
+ public DummyRunnable(Object waitObj)
+ {
+ this.waitObj = waitObj;
+ }
+
+ @Override
+ public void run()
+ {
+ synchronized (waitObj)
+ {
+ waitObj.notify();
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.classpath b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.classpath
new file mode 100644
index 00000000..f9f04ed5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.classpath
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.gitignore b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.gitignore
new file mode 100644
index 00000000..5e56e040
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.gitignore
@@ -0,0 +1 @@
+/bin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.project b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.project
new file mode 100644
index 00000000..11ccea89
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/.project
@@ -0,0 +1,29 @@
+
+
+ fr.obeo.dsl.arduino
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ fr.obeo.dsl.viewpoint.nature.modelingproject
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..04804ce6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: fr.obeo.dsl.arduino;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: fr.obeo.dsl.arduino,
+ fr.obeo.dsl.arduino.impl,
+ fr.obeo.dsl.arduino.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/build.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/build.properties
new file mode 100644
index 00000000..7f0c2ffc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src-gen/,\
+ src/
+output.. = bin/
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino class diagram.png b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino class diagram.png
new file mode 100644
index 00000000..c08a4263
Binary files /dev/null and b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino class diagram.png differ
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.aird b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.aird
new file mode 100644
index 00000000..4f553dbf
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.aird
@@ -0,0 +1,11331 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+ KEEP_LOCATION
+ KEEP_SIZE
+ KEEP_RATIO
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ routingStyle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.ecore b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.ecore
new file mode 100644
index 00000000..0a619840
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.ecore
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.genmodel b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.genmodel
new file mode 100644
index 00000000..a800983b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/model/arduino.genmodel
@@ -0,0 +1,376 @@
+
+
+ arduino.ecore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/plugin.properties b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/plugin.properties
new file mode 100644
index 00000000..5aa1087d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Arduino Model
+providerName = www.example.org
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/plugin.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/plugin.xml
new file mode 100644
index 00000000..d9cba2eb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/plugin.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/pom.xml b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/pom.xml
new file mode 100644
index 00000000..85d293f4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ 4.0.0
+
+
+ fr.obeo.dsl.arduino
+ parent
+ 1.0.0-SNAPSHOT
+ ../../releng/fr.obeo.dsl.arduino.parent
+
+
+ fr.obeo.dsl.arduino
+ eclipse-plugin
+
+ Arduino Language
+
+
+
+
+ org.eclipse.tycho
+ tycho-source-plugin
+
+
+ org.apache.maven.plugins
+ maven-pmd-plugin
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/refactoring.txt b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/refactoring.txt
new file mode 100644
index 00000000..f4141e2a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/refactoring.txt
@@ -0,0 +1,21 @@
+Here are the changes I did to the metamodel and associated tooling
+
+
+renamed:
+ + MathOperator -> MathExpression
+ + NumericalOperator -> NumericalExpression
+ + BooleanOperator -> BooleanExpression
+ + Status -> ModuleSet
+ + Sensor -> ModuleGet
+ + InputModule -> Sensor
+ + OutputModule -> Actuator
+
+added:
+ + make Constant abstract and add two specializations: IntegerConstant and BooleanConstant
+
+removed:
+ + Function, Parameter and co have been removed since it was strangely done and named and not very useful. Could be re-introduced if needed (after cleaning).
+ + Level -> I understood that Level was a specific IntegerSetter while Status was a boolean Setter or something like that. I removed them to create a ModuleSet instruction
+modified:
+ + ModuleSet (ex Status) is now pointing to an expression for the value to set and the link to sensor is removed. All this stuff between Status and Sensor was so strange In prefered to remove all.
+ + ModuleGet is now an Expression pointing to a module
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AbstractInstructionBlock.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AbstractInstructionBlock.java
new file mode 100644
index 00000000..2ed18749
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AbstractInstructionBlock.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Abstract Instruction Block '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getAbstractInstructionBlock()
+ * @model
+ * @generated
+ */
+public interface AbstractInstructionBlock extends NamedElement {
+} // AbstractInstructionBlock
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AmbientLightSensor.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AmbientLightSensor.java
new file mode 100644
index 00000000..d02de1db
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AmbientLightSensor.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Ambient Light Sensor '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getAmbientLightSensor()
+ * @model
+ * @generated
+ */
+public interface AmbientLightSensor extends ArduinoAnalogModule {
+} // AmbientLightSensor
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AnalogPin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AnalogPin.java
new file mode 100644
index 00000000..cc8fa7a8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/AnalogPin.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Analog Pin '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.AnalogPin#getModule Module }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getAnalogPin()
+ * @model
+ * @generated
+ */
+public interface AnalogPin extends Pin {
+ /**
+ * Returns the value of the 'Module ' containment reference.
+ *
+ *
+ * If the meaning of the 'Module ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Module ' containment reference.
+ * @see #setModule(ArduinoAnalogModule)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getAnalogPin_Module()
+ * @model containment="true"
+ * @generated
+ */
+ ArduinoAnalogModule getModule();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.AnalogPin#getModule Module }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Module ' containment reference.
+ * @see #getModule()
+ * @generated
+ */
+ void setModule(ArduinoAnalogModule value);
+
+} // AnalogPin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoAnalogModule.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoAnalogModule.java
new file mode 100644
index 00000000..6fa42b57
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoAnalogModule.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Analog Module '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getArduinoAnalogModule()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ArduinoAnalogModule extends ArduinoModule {
+} // ArduinoAnalogModule
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoBoard.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoBoard.java
new file mode 100644
index 00000000..c0706e5d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoBoard.java
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Board '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.ArduinoBoard#getDigitalPins Digital Pins }
+ * {@link fr.obeo.dsl.arduino.ArduinoBoard#getAnalogPins Analog Pins }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getArduinoBoard()
+ * @model
+ * @generated
+ */
+public interface ArduinoBoard extends Board {
+ /**
+ * Returns the value of the 'Digital Pins ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.DigitalPin}.
+ *
+ *
+ * If the meaning of the 'Digital Pins ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Digital Pins ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getArduinoBoard_DigitalPins()
+ * @model containment="true"
+ * @generated
+ */
+ EList getDigitalPins();
+
+ /**
+ * Returns the value of the 'Analog Pins ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.AnalogPin}.
+ *
+ *
+ * If the meaning of the 'Analog Pins ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Analog Pins ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getArduinoBoard_AnalogPins()
+ * @model containment="true"
+ * @generated
+ */
+ EList getAnalogPins();
+
+} // ArduinoBoard
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoDigitalModule.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoDigitalModule.java
new file mode 100644
index 00000000..cf838bd9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoDigitalModule.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Digital Module '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getArduinoDigitalModule()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ArduinoDigitalModule extends ArduinoModule {
+} // ArduinoDigitalModule
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoFactory.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoFactory.java
new file mode 100644
index 00000000..cea9954a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoFactory.java
@@ -0,0 +1,383 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ *
+ * The Factory for the model.
+ * It provides a create method for each non-abstract class of the model.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage
+ * @generated
+ */
+public interface ArduinoFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ *
+ *
+ * @generated
+ */
+ ArduinoFactory eINSTANCE = fr.obeo.dsl.arduino.impl.ArduinoFactoryImpl.init();
+
+ /**
+ * Returns a new object of class 'Digital Pin '.
+ *
+ *
+ * @return a new object of class 'Digital Pin '.
+ * @generated
+ */
+ DigitalPin createDigitalPin();
+
+ /**
+ * Returns a new object of class 'Analog Pin '.
+ *
+ *
+ * @return a new object of class 'Analog Pin '.
+ * @generated
+ */
+ AnalogPin createAnalogPin();
+
+ /**
+ * Returns a new object of class 'Sketch '.
+ *
+ *
+ * @return a new object of class 'Sketch '.
+ * @generated
+ */
+ Sketch createSketch();
+
+ /**
+ * Returns a new object of class 'Project '.
+ *
+ *
+ * @return a new object of class 'Project '.
+ * @generated
+ */
+ Project createProject();
+
+ /**
+ * Returns a new object of class 'Module Assignment '.
+ *
+ *
+ * @return a new object of class 'Module Assignment '.
+ * @generated
+ */
+ ModuleAssignment createModuleAssignment();
+
+ /**
+ * Returns a new object of class 'Delay '.
+ *
+ *
+ * @return a new object of class 'Delay '.
+ * @generated
+ */
+ Delay createDelay();
+
+ /**
+ * Returns a new object of class 'Repeat '.
+ *
+ *
+ * @return a new object of class 'Repeat '.
+ * @generated
+ */
+ Repeat createRepeat();
+
+ /**
+ * Returns a new object of class 'While '.
+ *
+ *
+ * @return a new object of class 'While '.
+ * @generated
+ */
+ While createWhile();
+
+ /**
+ * Returns a new object of class 'Variable Assignment '.
+ *
+ *
+ * @return a new object of class 'Variable Assignment '.
+ * @generated
+ */
+ VariableAssignment createVariableAssignment();
+
+ /**
+ * Returns a new object of class 'Binary Integer Expression '.
+ *
+ *
+ * @return a new object of class 'Binary Integer Expression '.
+ * @generated
+ */
+ BinaryIntegerExpression createBinaryIntegerExpression();
+
+ /**
+ * Returns a new object of class 'Binary Boolean Expression '.
+ *
+ *
+ * @return a new object of class 'Binary Boolean Expression '.
+ * @generated
+ */
+ BinaryBooleanExpression createBinaryBooleanExpression();
+
+ /**
+ * Returns a new object of class 'If '.
+ *
+ *
+ * @return a new object of class 'If '.
+ * @generated
+ */
+ If createIf();
+
+ /**
+ * Returns a new object of class 'Integer Constant '.
+ *
+ *
+ * @return a new object of class 'Integer Constant '.
+ * @generated
+ */
+ IntegerConstant createIntegerConstant();
+
+ /**
+ * Returns a new object of class 'Boolean Constant '.
+ *
+ *
+ * @return a new object of class 'Boolean Constant '.
+ * @generated
+ */
+ BooleanConstant createBooleanConstant();
+
+ /**
+ * Returns a new object of class 'Integer Variable '.
+ *
+ *
+ * @return a new object of class 'Integer Variable '.
+ * @generated
+ */
+ IntegerVariable createIntegerVariable();
+
+ /**
+ * Returns a new object of class 'Boolean Variable '.
+ *
+ *
+ * @return a new object of class 'Boolean Variable '.
+ * @generated
+ */
+ BooleanVariable createBooleanVariable();
+
+ /**
+ * Returns a new object of class 'Boolean Module Get '.
+ *
+ *
+ * @return a new object of class 'Boolean Module Get '.
+ * @generated
+ */
+ BooleanModuleGet createBooleanModuleGet();
+
+ /**
+ * Returns a new object of class 'Integer Module Get '.
+ *
+ *
+ * @return a new object of class 'Integer Module Get '.
+ * @generated
+ */
+ IntegerModuleGet createIntegerModuleGet();
+
+ /**
+ * Returns a new object of class 'Unary Boolean Expression '.
+ *
+ *
+ * @return a new object of class 'Unary Boolean Expression '.
+ * @generated
+ */
+ UnaryBooleanExpression createUnaryBooleanExpression();
+
+ /**
+ * Returns a new object of class 'Unary Integer Expression '.
+ *
+ *
+ * @return a new object of class 'Unary Integer Expression '.
+ * @generated
+ */
+ UnaryIntegerExpression createUnaryIntegerExpression();
+
+ /**
+ * Returns a new object of class 'Variable Declaration '.
+ *
+ *
+ * @return a new object of class 'Variable Declaration '.
+ * @generated
+ */
+ VariableDeclaration createVariableDeclaration();
+
+ /**
+ * Returns a new object of class 'Variable Ref '.
+ *
+ *
+ * @return a new object of class 'Variable Ref '.
+ * @generated
+ */
+ VariableRef createVariableRef();
+
+ /**
+ * Returns a new object of class 'LED '.
+ *
+ *
+ * @return a new object of class 'LED '.
+ * @generated
+ */
+ LED createLED();
+
+ /**
+ * Returns a new object of class 'Push Button '.
+ *
+ *
+ * @return a new object of class 'Push Button '.
+ * @generated
+ */
+ PushButton createPushButton();
+
+ /**
+ * Returns a new object of class 'Buzzer '.
+ *
+ *
+ * @return a new object of class 'Buzzer '.
+ * @generated
+ */
+ Buzzer createBuzzer();
+
+ /**
+ * Returns a new object of class 'Rotation Sensor '.
+ *
+ *
+ * @return a new object of class 'Rotation Sensor '.
+ * @generated
+ */
+ RotationSensor createRotationSensor();
+
+ /**
+ * Returns a new object of class 'Micro Servo '.
+ *
+ *
+ * @return a new object of class 'Micro Servo '.
+ * @generated
+ */
+ MicroServo createMicroServo();
+
+ /**
+ * Returns a new object of class 'Infra Red Sensor '.
+ *
+ *
+ * @return a new object of class 'Infra Red Sensor '.
+ * @generated
+ */
+ InfraRedSensor createInfraRedSensor();
+
+ /**
+ * Returns a new object of class 'Ambient Light Sensor '.
+ *
+ *
+ * @return a new object of class 'Ambient Light Sensor '.
+ * @generated
+ */
+ AmbientLightSensor createAmbientLightSensor();
+
+ /**
+ * Returns a new object of class 'Sound Sensor '.
+ *
+ *
+ * @return a new object of class 'Sound Sensor '.
+ * @generated
+ */
+ SoundSensor createSoundSensor();
+
+ /**
+ * Returns a new object of class 'Fan '.
+ *
+ *
+ * @return a new object of class 'Fan '.
+ * @generated
+ */
+ Fan createFan();
+
+ /**
+ * Returns a new object of class 'Music Player '.
+ *
+ *
+ * @return a new object of class 'Music Player '.
+ * @generated
+ */
+ MusicPlayer createMusicPlayer();
+
+ /**
+ * Returns a new object of class 'Board '.
+ *
+ *
+ * @return a new object of class 'Board '.
+ * @generated
+ */
+ ArduinoBoard createArduinoBoard();
+
+ /**
+ * Returns a new object of class 'Thread '.
+ *
+ *
+ * @return a new object of class 'Thread '.
+ * @generated
+ */
+ Thread createThread();
+
+ /**
+ * Returns a new object of class 'Channel '.
+ *
+ *
+ * @return a new object of class 'Channel '.
+ * @generated
+ */
+ Channel createChannel();
+
+ /**
+ * Returns a new object of class 'Link '.
+ *
+ *
+ * @return a new object of class 'Link '.
+ * @generated
+ */
+ Link createLink();
+
+ /**
+ * Returns a new object of class 'Synchronization Block '.
+ *
+ *
+ * @return a new object of class 'Synchronization Block '.
+ * @generated
+ */
+ SynchronizationBlock createSynchronizationBlock();
+
+ /**
+ * Returns a new object of class 'Instruction Block '.
+ *
+ *
+ * @return a new object of class 'Instruction Block '.
+ * @generated
+ */
+ InstructionBlock createInstructionBlock();
+
+ /**
+ * Returns the package supported by this factory.
+ *
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ArduinoPackage getArduinoPackage();
+
+} //ArduinoFactory
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoModule.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoModule.java
new file mode 100644
index 00000000..c6b4f641
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoModule.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Module '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getArduinoModule()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ArduinoModule extends Module {
+} // ArduinoModule
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoPackage.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoPackage.java
new file mode 100644
index 00000000..2c0d0ea5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ArduinoPackage.java
@@ -0,0 +1,5034 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ *
+ * The Package for the model.
+ * It contains accessors for the meta objects to represent
+ *
+ * each class,
+ * each feature of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ArduinoPackage extends EPackage {
+ /**
+ * The package name.
+ *
+ *
+ * @generated
+ */
+ String eNAME = "arduino";
+
+ /**
+ * The package namespace URI.
+ *
+ *
+ * @generated
+ */
+ String eNS_URI = "http://www.obeo.fr/arduino";
+
+ /**
+ * The package namespace name.
+ *
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "arduino";
+
+ /**
+ * The singleton instance of the package.
+ *
+ *
+ * @generated
+ */
+ ArduinoPackage eINSTANCE = fr.obeo.dsl.arduino.impl.ArduinoPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.NamedElementImpl Named Element }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.NamedElementImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getNamedElement()
+ * @generated
+ */
+ int NAMED_ELEMENT = 13;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int NAMED_ELEMENT__NAME = 0;
+
+ /**
+ * The number of structural features of the 'Named Element ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int NAMED_ELEMENT_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BoardImpl Board }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BoardImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBoard()
+ * @generated
+ */
+ int BOARD = 0;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOARD__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Project ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOARD__PROJECT = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Threads ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOARD__THREADS = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Board ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOARD_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.Module Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.Module
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModule()
+ * @generated
+ */
+ int MODULE = 1;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE__LEVEL = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Module ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.PinImpl Pin }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.PinImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getPin()
+ * @generated
+ */
+ int PIN = 3;
+
+ /**
+ * The feature id for the 'Id ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN__ID = 0;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN__LEVEL = 1;
+
+ /**
+ * The number of structural features of the 'Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN_FEATURE_COUNT = 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.DigitalPinImpl Digital Pin }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.DigitalPinImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getDigitalPin()
+ * @generated
+ */
+ int DIGITAL_PIN = 2;
+
+ /**
+ * The feature id for the 'Id ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DIGITAL_PIN__ID = PIN__ID;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DIGITAL_PIN__LEVEL = PIN__LEVEL;
+
+ /**
+ * The feature id for the 'Module ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DIGITAL_PIN__MODULE = PIN_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Digital Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DIGITAL_PIN_FEATURE_COUNT = PIN_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.AnalogPinImpl Analog Pin }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.AnalogPinImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getAnalogPin()
+ * @generated
+ */
+ int ANALOG_PIN = 4;
+
+ /**
+ * The feature id for the 'Id ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ANALOG_PIN__ID = PIN__ID;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ANALOG_PIN__LEVEL = PIN__LEVEL;
+
+ /**
+ * The feature id for the 'Module ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ANALOG_PIN__MODULE = PIN_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Analog Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ANALOG_PIN_FEATURE_COUNT = PIN_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.SketchImpl Sketch }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.SketchImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getSketch()
+ * @generated
+ */
+ int SKETCH = 5;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SKETCH__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Project ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SKETCH__PROJECT = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Threads ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SKETCH__THREADS = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Channels ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SKETCH__CHANNELS = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the 'Sketch ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SKETCH_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ProjectImpl Project }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ProjectImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getProject()
+ * @generated
+ */
+ int PROJECT = 6;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Boards ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT__BOARDS = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Sketch ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT__SKETCH = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Links ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT__LINKS = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the 'Project ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.InstructionImpl Instruction }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.InstructionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getInstruction()
+ * @generated
+ */
+ int INSTRUCTION = 7;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION__OWNED_BLOCK = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Instruction ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ModuleInstructionImpl Module Instruction }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ModuleInstructionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModuleInstruction()
+ * @generated
+ */
+ int MODULE_INSTRUCTION = 9;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_INSTRUCTION__NAME = INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_INSTRUCTION__OWNED_BLOCK = INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_INSTRUCTION__MODULE = INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Module Instruction ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_INSTRUCTION_FEATURE_COUNT = INSTRUCTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ModuleAssignmentImpl Module Assignment }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ModuleAssignmentImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModuleAssignment()
+ * @generated
+ */
+ int MODULE_ASSIGNMENT = 8;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_ASSIGNMENT__NAME = MODULE_INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_ASSIGNMENT__OWNED_BLOCK = MODULE_INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_ASSIGNMENT__MODULE = MODULE_INSTRUCTION__MODULE;
+
+ /**
+ * The feature id for the 'Operand ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_ASSIGNMENT__OPERAND = MODULE_INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Module Assignment ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_ASSIGNMENT_FEATURE_COUNT = MODULE_INSTRUCTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ControlImpl Control }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ControlImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getControl()
+ * @generated
+ */
+ int CONTROL = 10;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CONTROL__NAME = INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CONTROL__OWNED_BLOCK = INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Block ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CONTROL__BLOCK = INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Control ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CONTROL_FEATURE_COUNT = INSTRUCTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.UtilitiesImpl Utilities }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UtilitiesImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUtilities()
+ * @generated
+ */
+ int UTILITIES = 11;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UTILITIES__NAME = INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UTILITIES__OWNED_BLOCK = INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The number of structural features of the 'Utilities ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UTILITIES_FEATURE_COUNT = INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.DelayImpl Delay }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.DelayImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getDelay()
+ * @generated
+ */
+ int DELAY = 12;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DELAY__NAME = UTILITIES__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DELAY__OWNED_BLOCK = UTILITIES__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Unit ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DELAY__UNIT = UTILITIES_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DELAY__VALUE = UTILITIES_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Delay ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int DELAY_FEATURE_COUNT = UTILITIES_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.RepeatImpl Repeat }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.RepeatImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getRepeat()
+ * @generated
+ */
+ int REPEAT = 14;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int REPEAT__NAME = CONTROL__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int REPEAT__OWNED_BLOCK = CONTROL__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Block ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int REPEAT__BLOCK = CONTROL__BLOCK;
+
+ /**
+ * The feature id for the 'Iteration ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int REPEAT__ITERATION = CONTROL_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Repeat ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int REPEAT_FEATURE_COUNT = CONTROL_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ExpressionImpl Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getExpression()
+ * @generated
+ */
+ int EXPRESSION = 22;
+
+ /**
+ * The number of structural features of the 'Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int EXPRESSION_FEATURE_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ModuleGetImpl Module Get }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ModuleGetImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModuleGet()
+ * @generated
+ */
+ int MODULE_GET = 15;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_GET__MODULE = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Module Get ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MODULE_GET_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.WhileImpl While }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.WhileImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getWhile()
+ * @generated
+ */
+ int WHILE = 16;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int WHILE__NAME = CONTROL__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int WHILE__OWNED_BLOCK = CONTROL__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Block ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int WHILE__BLOCK = CONTROL__BLOCK;
+
+ /**
+ * The feature id for the 'Condition ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int WHILE__CONDITION = CONTROL_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'While ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int WHILE_FEATURE_COUNT = CONTROL_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BinaryExpressionImpl Binary Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BinaryExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryExpression()
+ * @generated
+ */
+ int BINARY_EXPRESSION = 17;
+
+ /**
+ * The feature id for the 'Left ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_EXPRESSION__LEFT = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Right ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_EXPRESSION__RIGHT = EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Binary Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.VariableImpl Variable }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariable()
+ * @generated
+ */
+ int VARIABLE = 18;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE__NAME = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.VariableAssignmentImpl Variable Assignment }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableAssignmentImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariableAssignment()
+ * @generated
+ */
+ int VARIABLE_ASSIGNMENT = 19;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_ASSIGNMENT__NAME = INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_ASSIGNMENT__OWNED_BLOCK = INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Operand ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_ASSIGNMENT__OPERAND = INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Variable ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_ASSIGNMENT__VARIABLE = INSTRUCTION_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Variable Assignment ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_ASSIGNMENT_FEATURE_COUNT = INSTRUCTION_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BinaryIntegerExpressionImpl Binary Integer Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BinaryIntegerExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryIntegerExpression()
+ * @generated
+ */
+ int BINARY_INTEGER_EXPRESSION = 20;
+
+ /**
+ * The feature id for the 'Left ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_INTEGER_EXPRESSION__LEFT = BINARY_EXPRESSION__LEFT;
+
+ /**
+ * The feature id for the 'Right ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_INTEGER_EXPRESSION__RIGHT = BINARY_EXPRESSION__RIGHT;
+
+ /**
+ * The feature id for the 'Operator ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_INTEGER_EXPRESSION__OPERATOR = BINARY_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Binary Integer Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_INTEGER_EXPRESSION_FEATURE_COUNT = BINARY_EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BinaryBooleanExpressionImpl Binary Boolean Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BinaryBooleanExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryBooleanExpression()
+ * @generated
+ */
+ int BINARY_BOOLEAN_EXPRESSION = 21;
+
+ /**
+ * The feature id for the 'Left ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_BOOLEAN_EXPRESSION__LEFT = BINARY_EXPRESSION__LEFT;
+
+ /**
+ * The feature id for the 'Right ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_BOOLEAN_EXPRESSION__RIGHT = BINARY_EXPRESSION__RIGHT;
+
+ /**
+ * The feature id for the 'Operator ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_BOOLEAN_EXPRESSION__OPERATOR = BINARY_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Binary Boolean Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BINARY_BOOLEAN_EXPRESSION_FEATURE_COUNT = BINARY_EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ConstantImpl Constant }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ConstantImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getConstant()
+ * @generated
+ */
+ int CONSTANT = 23;
+
+ /**
+ * The number of structural features of the 'Constant ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CONSTANT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.IfImpl If }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IfImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIf()
+ * @generated
+ */
+ int IF = 24;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int IF__NAME = CONTROL__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int IF__OWNED_BLOCK = CONTROL__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Block ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int IF__BLOCK = CONTROL__BLOCK;
+
+ /**
+ * The feature id for the 'Condition ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int IF__CONDITION = CONTROL_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Else Block ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int IF__ELSE_BLOCK = CONTROL_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'If ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int IF_FEATURE_COUNT = CONTROL_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.IntegerConstantImpl Integer Constant }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerConstantImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerConstant()
+ * @generated
+ */
+ int INTEGER_CONSTANT = 25;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_CONSTANT__VALUE = CONSTANT_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Integer Constant ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_CONSTANT_FEATURE_COUNT = CONSTANT_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BooleanConstantImpl Boolean Constant }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanConstantImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanConstant()
+ * @generated
+ */
+ int BOOLEAN_CONSTANT = 26;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_CONSTANT__VALUE = CONSTANT_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Boolean Constant ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_CONSTANT_FEATURE_COUNT = CONSTANT_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BooleanExpressionImpl Boolean Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanExpression()
+ * @generated
+ */
+ int BOOLEAN_EXPRESSION = 27;
+
+ /**
+ * The number of structural features of the 'Boolean Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.IntegerExpressionImpl Integer Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerExpression()
+ * @generated
+ */
+ int INTEGER_EXPRESSION = 28;
+
+ /**
+ * The number of structural features of the 'Integer Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.AssignmentImpl Assignment }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.AssignmentImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getAssignment()
+ * @generated
+ */
+ int ASSIGNMENT = 29;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ASSIGNMENT__NAME = INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ASSIGNMENT__OWNED_BLOCK = INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Operand ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ASSIGNMENT__OPERAND = INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Assignment ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ASSIGNMENT_FEATURE_COUNT = INSTRUCTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.IntegerVariableImpl Integer Variable }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerVariableImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerVariable()
+ * @generated
+ */
+ int INTEGER_VARIABLE = 30;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE__NAME = VARIABLE__NAME;
+
+ /**
+ * The feature id for the 'Initial Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE__INITIAL_VALUE = VARIABLE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE__VALUE = VARIABLE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Integer Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE_FEATURE_COUNT = VARIABLE_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BooleanVariableImpl Boolean Variable }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanVariableImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanVariable()
+ * @generated
+ */
+ int BOOLEAN_VARIABLE = 31;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE__NAME = VARIABLE__NAME;
+
+ /**
+ * The feature id for the 'Initial Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE__INITIAL_VALUE = VARIABLE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE__VALUE = VARIABLE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Boolean Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE_FEATURE_COUNT = VARIABLE_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BooleanModuleGetImpl Boolean Module Get }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanModuleGetImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanModuleGet()
+ * @generated
+ */
+ int BOOLEAN_MODULE_GET = 32;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_MODULE_GET__MODULE = MODULE_GET__MODULE;
+
+ /**
+ * The number of structural features of the 'Boolean Module Get ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_MODULE_GET_FEATURE_COUNT = MODULE_GET_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.IntegerModuleGetImpl Integer Module Get }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerModuleGetImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerModuleGet()
+ * @generated
+ */
+ int INTEGER_MODULE_GET = 33;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_MODULE_GET__MODULE = MODULE_GET__MODULE;
+
+ /**
+ * The number of structural features of the 'Integer Module Get ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_MODULE_GET_FEATURE_COUNT = MODULE_GET_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.UnaryExpressionImpl Unary Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UnaryExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryExpression()
+ * @generated
+ */
+ int UNARY_EXPRESSION = 34;
+
+ /**
+ * The feature id for the 'Operand ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_EXPRESSION__OPERAND = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Unary Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_EXPRESSION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.UnaryBooleanExpressionImpl Unary Boolean Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UnaryBooleanExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryBooleanExpression()
+ * @generated
+ */
+ int UNARY_BOOLEAN_EXPRESSION = 35;
+
+ /**
+ * The feature id for the 'Operand ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_BOOLEAN_EXPRESSION__OPERAND = UNARY_EXPRESSION__OPERAND;
+
+ /**
+ * The feature id for the 'Operator ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_BOOLEAN_EXPRESSION__OPERATOR = UNARY_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Unary Boolean Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_BOOLEAN_EXPRESSION_FEATURE_COUNT = UNARY_EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.UnaryIntegerExpressionImpl Unary Integer Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UnaryIntegerExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryIntegerExpression()
+ * @generated
+ */
+ int UNARY_INTEGER_EXPRESSION = 36;
+
+ /**
+ * The feature id for the 'Operand ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_INTEGER_EXPRESSION__OPERAND = UNARY_EXPRESSION__OPERAND;
+
+ /**
+ * The feature id for the 'Operator ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_INTEGER_EXPRESSION__OPERATOR = UNARY_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Unary Integer Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int UNARY_INTEGER_EXPRESSION_FEATURE_COUNT = UNARY_EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.VariableDeclarationImpl Variable Declaration }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableDeclarationImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariableDeclaration()
+ * @generated
+ */
+ int VARIABLE_DECLARATION = 37;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_DECLARATION__NAME = INSTRUCTION__NAME;
+
+ /**
+ * The feature id for the 'Owned Block ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_DECLARATION__OWNED_BLOCK = INSTRUCTION__OWNED_BLOCK;
+
+ /**
+ * The feature id for the 'Variable ' containment reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_DECLARATION__VARIABLE = INSTRUCTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Variable Declaration ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_DECLARATION_FEATURE_COUNT = INSTRUCTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.VariableRefImpl Variable Ref }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableRefImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariableRef()
+ * @generated
+ */
+ int VARIABLE_REF = 38;
+
+ /**
+ * The feature id for the 'Variable ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_REF__VARIABLE = EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Variable Ref ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_REF_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ArduinoModuleImpl Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoModuleImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoModule()
+ * @generated
+ */
+ int ARDUINO_MODULE = 49;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE__NAME = MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE__LEVEL = MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Module ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_FEATURE_COUNT = MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ArduinoDigitalModuleImpl Digital Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoDigitalModuleImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoDigitalModule()
+ * @generated
+ */
+ int ARDUINO_DIGITAL_MODULE = 51;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DIGITAL_MODULE__NAME = ARDUINO_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DIGITAL_MODULE__LEVEL = ARDUINO_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Digital Module ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DIGITAL_MODULE_FEATURE_COUNT = ARDUINO_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.LEDImpl LED }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.LEDImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getLED()
+ * @generated
+ */
+ int LED = 39;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LED__NAME = ARDUINO_DIGITAL_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LED__LEVEL = ARDUINO_DIGITAL_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'LED ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LED_FEATURE_COUNT = ARDUINO_DIGITAL_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.PushButtonImpl Push Button }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.PushButtonImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getPushButton()
+ * @generated
+ */
+ int PUSH_BUTTON = 40;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PUSH_BUTTON__NAME = ARDUINO_DIGITAL_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PUSH_BUTTON__LEVEL = ARDUINO_DIGITAL_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Push Button ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PUSH_BUTTON_FEATURE_COUNT = ARDUINO_DIGITAL_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.BuzzerImpl Buzzer }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BuzzerImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBuzzer()
+ * @generated
+ */
+ int BUZZER = 41;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BUZZER__NAME = ARDUINO_DIGITAL_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BUZZER__LEVEL = ARDUINO_DIGITAL_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Buzzer ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BUZZER_FEATURE_COUNT = ARDUINO_DIGITAL_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ArduinoAnalogModuleImpl Analog Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoAnalogModuleImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoAnalogModule()
+ * @generated
+ */
+ int ARDUINO_ANALOG_MODULE = 52;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_ANALOG_MODULE__NAME = ARDUINO_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_ANALOG_MODULE__LEVEL = ARDUINO_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Analog Module ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_ANALOG_MODULE_FEATURE_COUNT = ARDUINO_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.RotationSensorImpl Rotation Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.RotationSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getRotationSensor()
+ * @generated
+ */
+ int ROTATION_SENSOR = 42;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROTATION_SENSOR__NAME = ARDUINO_ANALOG_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROTATION_SENSOR__LEVEL = ARDUINO_ANALOG_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Rotation Sensor ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROTATION_SENSOR_FEATURE_COUNT = ARDUINO_ANALOG_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.MicroServoImpl Micro Servo }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.MicroServoImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getMicroServo()
+ * @generated
+ */
+ int MICRO_SERVO = 43;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MICRO_SERVO__NAME = ARDUINO_DIGITAL_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MICRO_SERVO__LEVEL = ARDUINO_DIGITAL_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Micro Servo ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MICRO_SERVO_FEATURE_COUNT = ARDUINO_DIGITAL_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.InfraRedSensorImpl Infra Red Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.InfraRedSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getInfraRedSensor()
+ * @generated
+ */
+ int INFRA_RED_SENSOR = 44;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INFRA_RED_SENSOR__NAME = ARDUINO_DIGITAL_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INFRA_RED_SENSOR__LEVEL = ARDUINO_DIGITAL_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Infra Red Sensor ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INFRA_RED_SENSOR_FEATURE_COUNT = ARDUINO_DIGITAL_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.AmbientLightSensorImpl Ambient Light Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.AmbientLightSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getAmbientLightSensor()
+ * @generated
+ */
+ int AMBIENT_LIGHT_SENSOR = 45;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int AMBIENT_LIGHT_SENSOR__NAME = ARDUINO_ANALOG_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int AMBIENT_LIGHT_SENSOR__LEVEL = ARDUINO_ANALOG_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Ambient Light Sensor ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int AMBIENT_LIGHT_SENSOR_FEATURE_COUNT = ARDUINO_ANALOG_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.SoundSensorImpl Sound Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.SoundSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getSoundSensor()
+ * @generated
+ */
+ int SOUND_SENSOR = 46;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SOUND_SENSOR__NAME = ARDUINO_ANALOG_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SOUND_SENSOR__LEVEL = ARDUINO_ANALOG_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Sound Sensor ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SOUND_SENSOR_FEATURE_COUNT = ARDUINO_ANALOG_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.FanImpl Fan }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.FanImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getFan()
+ * @generated
+ */
+ int FAN = 47;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int FAN__NAME = ARDUINO_DIGITAL_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int FAN__LEVEL = ARDUINO_DIGITAL_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Fan ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int FAN_FEATURE_COUNT = ARDUINO_DIGITAL_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.MusicPlayerImpl Music Player }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.MusicPlayerImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getMusicPlayer()
+ * @generated
+ */
+ int MUSIC_PLAYER = 48;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MUSIC_PLAYER__NAME = ARDUINO_ANALOG_MODULE__NAME;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MUSIC_PLAYER__LEVEL = ARDUINO_ANALOG_MODULE__LEVEL;
+
+ /**
+ * The number of structural features of the 'Music Player ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int MUSIC_PLAYER_FEATURE_COUNT = ARDUINO_ANALOG_MODULE_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ArduinoBoardImpl Board }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoBoardImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoBoard()
+ * @generated
+ */
+ int ARDUINO_BOARD = 50;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_BOARD__NAME = BOARD__NAME;
+
+ /**
+ * The feature id for the 'Project ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_BOARD__PROJECT = BOARD__PROJECT;
+
+ /**
+ * The feature id for the 'Threads ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_BOARD__THREADS = BOARD__THREADS;
+
+ /**
+ * The feature id for the 'Digital Pins ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_BOARD__DIGITAL_PINS = BOARD_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Analog Pins ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_BOARD__ANALOG_PINS = BOARD_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Board ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_BOARD_FEATURE_COUNT = BOARD_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ThreadImpl Thread }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ThreadImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getThread()
+ * @generated
+ */
+ int THREAD = 53;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Blocks ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__BLOCKS = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Channels ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__CHANNELS = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Current Instruction ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__CURRENT_INSTRUCTION = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'First ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__FIRST = NAMED_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Last ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__LAST = NAMED_ELEMENT_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Nb Cycle ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD__NB_CYCLE = NAMED_ELEMENT_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Thread ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 6;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ChannelImpl Channel }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ChannelImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getChannel()
+ * @generated
+ */
+ int CHANNEL = 54;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Source ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__SOURCE = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Target ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__TARGET = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'In Rate ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__IN_RATE = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Out Rate ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__OUT_RATE = NAMED_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Capacity ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__CAPACITY = NAMED_ELEMENT_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Current Size ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL__CURRENT_SIZE = NAMED_ELEMENT_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Channel ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int CHANNEL_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 6;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.LinkImpl Link }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.LinkImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getLink()
+ * @generated
+ */
+ int LINK = 55;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LINK__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'In Board ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LINK__IN_BOARD = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Out Board ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LINK__OUT_BOARD = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Channels ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LINK__CHANNELS = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the 'Link ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int LINK_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 3;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.ThreadInstructionBlockImpl Thread Instruction Block }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ThreadInstructionBlockImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getThreadInstructionBlock()
+ * @generated
+ */
+ int THREAD_INSTRUCTION_BLOCK = 58;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD_INSTRUCTION_BLOCK__NAME = NAMED_ELEMENT__NAME;
+
+ /**
+ * The feature id for the 'Thread ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD_INSTRUCTION_BLOCK__THREAD = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Next ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD_INSTRUCTION_BLOCK__NEXT = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Thread Instruction Block ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int THREAD_INSTRUCTION_BLOCK_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.SynchronizationBlockImpl Synchronization Block }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.SynchronizationBlockImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getSynchronizationBlock()
+ * @generated
+ */
+ int SYNCHRONIZATION_BLOCK = 56;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SYNCHRONIZATION_BLOCK__NAME = THREAD_INSTRUCTION_BLOCK__NAME;
+
+ /**
+ * The feature id for the 'Thread ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SYNCHRONIZATION_BLOCK__THREAD = THREAD_INSTRUCTION_BLOCK__THREAD;
+
+ /**
+ * The feature id for the 'Next ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SYNCHRONIZATION_BLOCK__NEXT = THREAD_INSTRUCTION_BLOCK__NEXT;
+
+ /**
+ * The number of structural features of the 'Synchronization Block ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SYNCHRONIZATION_BLOCK_FEATURE_COUNT = THREAD_INSTRUCTION_BLOCK_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.impl.InstructionBlockImpl Instruction Block }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.InstructionBlockImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getInstructionBlock()
+ * @generated
+ */
+ int INSTRUCTION_BLOCK = 57;
+
+ /**
+ * The feature id for the 'Name ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION_BLOCK__NAME = THREAD_INSTRUCTION_BLOCK__NAME;
+
+ /**
+ * The feature id for the 'Thread ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION_BLOCK__THREAD = THREAD_INSTRUCTION_BLOCK__THREAD;
+
+ /**
+ * The feature id for the 'Next ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION_BLOCK__NEXT = THREAD_INSTRUCTION_BLOCK__NEXT;
+
+ /**
+ * The feature id for the 'Instructions ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION_BLOCK__INSTRUCTIONS = THREAD_INSTRUCTION_BLOCK_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the 'Instruction Block ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INSTRUCTION_BLOCK_FEATURE_COUNT = THREAD_INSTRUCTION_BLOCK_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.Time Time }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.Time
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getTime()
+ * @generated
+ */
+ int TIME = 59;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.BinaryIntegerOperatorKind Binary Integer Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.BinaryIntegerOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryIntegerOperatorKind()
+ * @generated
+ */
+ int BINARY_INTEGER_OPERATOR_KIND = 60;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.BinaryBooleanOperatorKind Binary Boolean Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.BinaryBooleanOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryBooleanOperatorKind()
+ * @generated
+ */
+ int BINARY_BOOLEAN_OPERATOR_KIND = 61;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.UnaryIntegerOperatorKind Unary Integer Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.UnaryIntegerOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryIntegerOperatorKind()
+ * @generated
+ */
+ int UNARY_INTEGER_OPERATOR_KIND = 62;
+
+ /**
+ * The meta object id for the '{@link fr.obeo.dsl.arduino.UnaryBooleanOperatorKind Unary Boolean Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.UnaryBooleanOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryBooleanOperatorKind()
+ * @generated
+ */
+ int UNARY_BOOLEAN_OPERATOR_KIND = 63;
+
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Board Board }'.
+ *
+ *
+ * @return the meta object for class 'Board '.
+ * @see fr.obeo.dsl.arduino.Board
+ * @generated
+ */
+ EClass getBoard();
+
+ /**
+ * Returns the meta object for the container reference '{@link fr.obeo.dsl.arduino.Board#getProject Project }'.
+ *
+ *
+ * @return the meta object for the container reference 'Project '.
+ * @see fr.obeo.dsl.arduino.Board#getProject()
+ * @see #getBoard()
+ * @generated
+ */
+ EReference getBoard_Project();
+
+ /**
+ * Returns the meta object for the reference list '{@link fr.obeo.dsl.arduino.Board#getThreads Threads }'.
+ *
+ *
+ * @return the meta object for the reference list 'Threads '.
+ * @see fr.obeo.dsl.arduino.Board#getThreads()
+ * @see #getBoard()
+ * @generated
+ */
+ EReference getBoard_Threads();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Module Module }'.
+ *
+ *
+ * @return the meta object for class 'Module '.
+ * @see fr.obeo.dsl.arduino.Module
+ * @generated
+ */
+ EClass getModule();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Module#isLevel Level }'.
+ *
+ *
+ * @return the meta object for the attribute 'Level '.
+ * @see fr.obeo.dsl.arduino.Module#isLevel()
+ * @see #getModule()
+ * @generated
+ */
+ EAttribute getModule_Level();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.DigitalPin Digital Pin }'.
+ *
+ *
+ * @return the meta object for class 'Digital Pin '.
+ * @see fr.obeo.dsl.arduino.DigitalPin
+ * @generated
+ */
+ EClass getDigitalPin();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.DigitalPin#getModule Module }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Module '.
+ * @see fr.obeo.dsl.arduino.DigitalPin#getModule()
+ * @see #getDigitalPin()
+ * @generated
+ */
+ EReference getDigitalPin_Module();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Pin Pin }'.
+ *
+ *
+ * @return the meta object for class 'Pin '.
+ * @see fr.obeo.dsl.arduino.Pin
+ * @generated
+ */
+ EClass getPin();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Pin#getId Id }'.
+ *
+ *
+ * @return the meta object for the attribute 'Id '.
+ * @see fr.obeo.dsl.arduino.Pin#getId()
+ * @see #getPin()
+ * @generated
+ */
+ EAttribute getPin_Id();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Pin#getLevel Level }'.
+ *
+ *
+ * @return the meta object for the attribute 'Level '.
+ * @see fr.obeo.dsl.arduino.Pin#getLevel()
+ * @see #getPin()
+ * @generated
+ */
+ EAttribute getPin_Level();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.AnalogPin Analog Pin }'.
+ *
+ *
+ * @return the meta object for class 'Analog Pin '.
+ * @see fr.obeo.dsl.arduino.AnalogPin
+ * @generated
+ */
+ EClass getAnalogPin();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.AnalogPin#getModule Module }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Module '.
+ * @see fr.obeo.dsl.arduino.AnalogPin#getModule()
+ * @see #getAnalogPin()
+ * @generated
+ */
+ EReference getAnalogPin_Module();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Sketch Sketch }'.
+ *
+ *
+ * @return the meta object for class 'Sketch '.
+ * @see fr.obeo.dsl.arduino.Sketch
+ * @generated
+ */
+ EClass getSketch();
+
+ /**
+ * Returns the meta object for the container reference '{@link fr.obeo.dsl.arduino.Sketch#getProject Project }'.
+ *
+ *
+ * @return the meta object for the container reference 'Project '.
+ * @see fr.obeo.dsl.arduino.Sketch#getProject()
+ * @see #getSketch()
+ * @generated
+ */
+ EReference getSketch_Project();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.Sketch#getThreads Threads }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Threads '.
+ * @see fr.obeo.dsl.arduino.Sketch#getThreads()
+ * @see #getSketch()
+ * @generated
+ */
+ EReference getSketch_Threads();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.Sketch#getChannels Channels }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Channels '.
+ * @see fr.obeo.dsl.arduino.Sketch#getChannels()
+ * @see #getSketch()
+ * @generated
+ */
+ EReference getSketch_Channels();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Project Project }'.
+ *
+ *
+ * @return the meta object for class 'Project '.
+ * @see fr.obeo.dsl.arduino.Project
+ * @generated
+ */
+ EClass getProject();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.Project#getBoards Boards }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Boards '.
+ * @see fr.obeo.dsl.arduino.Project#getBoards()
+ * @see #getProject()
+ * @generated
+ */
+ EReference getProject_Boards();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.Project#getSketch Sketch }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Sketch '.
+ * @see fr.obeo.dsl.arduino.Project#getSketch()
+ * @see #getProject()
+ * @generated
+ */
+ EReference getProject_Sketch();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.Project#getLinks Links }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Links '.
+ * @see fr.obeo.dsl.arduino.Project#getLinks()
+ * @see #getProject()
+ * @generated
+ */
+ EReference getProject_Links();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Instruction Instruction }'.
+ *
+ *
+ * @return the meta object for class 'Instruction '.
+ * @see fr.obeo.dsl.arduino.Instruction
+ * @generated
+ */
+ EClass getInstruction();
+
+ /**
+ * Returns the meta object for the container reference '{@link fr.obeo.dsl.arduino.Instruction#getOwnedBlock Owned Block }'.
+ *
+ *
+ * @return the meta object for the container reference 'Owned Block '.
+ * @see fr.obeo.dsl.arduino.Instruction#getOwnedBlock()
+ * @see #getInstruction()
+ * @generated
+ */
+ EReference getInstruction_OwnedBlock();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ModuleAssignment Module Assignment }'.
+ *
+ *
+ * @return the meta object for class 'Module Assignment '.
+ * @see fr.obeo.dsl.arduino.ModuleAssignment
+ * @generated
+ */
+ EClass getModuleAssignment();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ModuleInstruction Module Instruction }'.
+ *
+ *
+ * @return the meta object for class 'Module Instruction '.
+ * @see fr.obeo.dsl.arduino.ModuleInstruction
+ * @generated
+ */
+ EClass getModuleInstruction();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.ModuleInstruction#getModule Module }'.
+ *
+ *
+ * @return the meta object for the reference 'Module '.
+ * @see fr.obeo.dsl.arduino.ModuleInstruction#getModule()
+ * @see #getModuleInstruction()
+ * @generated
+ */
+ EReference getModuleInstruction_Module();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Control Control }'.
+ *
+ *
+ * @return the meta object for class 'Control '.
+ * @see fr.obeo.dsl.arduino.Control
+ * @generated
+ */
+ EClass getControl();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.Control#getBlock Block }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Block '.
+ * @see fr.obeo.dsl.arduino.Control#getBlock()
+ * @see #getControl()
+ * @generated
+ */
+ EReference getControl_Block();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Utilities Utilities }'.
+ *
+ *
+ * @return the meta object for class 'Utilities '.
+ * @see fr.obeo.dsl.arduino.Utilities
+ * @generated
+ */
+ EClass getUtilities();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Delay Delay }'.
+ *
+ *
+ * @return the meta object for class 'Delay '.
+ * @see fr.obeo.dsl.arduino.Delay
+ * @generated
+ */
+ EClass getDelay();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Delay#getUnit Unit }'.
+ *
+ *
+ * @return the meta object for the attribute 'Unit '.
+ * @see fr.obeo.dsl.arduino.Delay#getUnit()
+ * @see #getDelay()
+ * @generated
+ */
+ EAttribute getDelay_Unit();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Delay#getValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see fr.obeo.dsl.arduino.Delay#getValue()
+ * @see #getDelay()
+ * @generated
+ */
+ EAttribute getDelay_Value();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.NamedElement Named Element }'.
+ *
+ *
+ * @return the meta object for class 'Named Element '.
+ * @see fr.obeo.dsl.arduino.NamedElement
+ * @generated
+ */
+ EClass getNamedElement();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.NamedElement#getName Name }'.
+ *
+ *
+ * @return the meta object for the attribute 'Name '.
+ * @see fr.obeo.dsl.arduino.NamedElement#getName()
+ * @see #getNamedElement()
+ * @generated
+ */
+ EAttribute getNamedElement_Name();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Repeat Repeat }'.
+ *
+ *
+ * @return the meta object for class 'Repeat '.
+ * @see fr.obeo.dsl.arduino.Repeat
+ * @generated
+ */
+ EClass getRepeat();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Repeat#getIteration Iteration }'.
+ *
+ *
+ * @return the meta object for the attribute 'Iteration '.
+ * @see fr.obeo.dsl.arduino.Repeat#getIteration()
+ * @see #getRepeat()
+ * @generated
+ */
+ EAttribute getRepeat_Iteration();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ModuleGet Module Get }'.
+ *
+ *
+ * @return the meta object for class 'Module Get '.
+ * @see fr.obeo.dsl.arduino.ModuleGet
+ * @generated
+ */
+ EClass getModuleGet();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.ModuleGet#getModule Module }'.
+ *
+ *
+ * @return the meta object for the reference 'Module '.
+ * @see fr.obeo.dsl.arduino.ModuleGet#getModule()
+ * @see #getModuleGet()
+ * @generated
+ */
+ EReference getModuleGet_Module();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.While While }'.
+ *
+ *
+ * @return the meta object for class 'While '.
+ * @see fr.obeo.dsl.arduino.While
+ * @generated
+ */
+ EClass getWhile();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.While#getCondition Condition }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Condition '.
+ * @see fr.obeo.dsl.arduino.While#getCondition()
+ * @see #getWhile()
+ * @generated
+ */
+ EReference getWhile_Condition();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BinaryExpression Binary Expression }'.
+ *
+ *
+ * @return the meta object for class 'Binary Expression '.
+ * @see fr.obeo.dsl.arduino.BinaryExpression
+ * @generated
+ */
+ EClass getBinaryExpression();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.BinaryExpression#getLeft Left }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Left '.
+ * @see fr.obeo.dsl.arduino.BinaryExpression#getLeft()
+ * @see #getBinaryExpression()
+ * @generated
+ */
+ EReference getBinaryExpression_Left();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.BinaryExpression#getRight Right }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Right '.
+ * @see fr.obeo.dsl.arduino.BinaryExpression#getRight()
+ * @see #getBinaryExpression()
+ * @generated
+ */
+ EReference getBinaryExpression_Right();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Variable Variable }'.
+ *
+ *
+ * @return the meta object for class 'Variable '.
+ * @see fr.obeo.dsl.arduino.Variable
+ * @generated
+ */
+ EClass getVariable();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.VariableAssignment Variable Assignment }'.
+ *
+ *
+ * @return the meta object for class 'Variable Assignment '.
+ * @see fr.obeo.dsl.arduino.VariableAssignment
+ * @generated
+ */
+ EClass getVariableAssignment();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.VariableAssignment#getVariable Variable }'.
+ *
+ *
+ * @return the meta object for the reference 'Variable '.
+ * @see fr.obeo.dsl.arduino.VariableAssignment#getVariable()
+ * @see #getVariableAssignment()
+ * @generated
+ */
+ EReference getVariableAssignment_Variable();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BinaryIntegerExpression Binary Integer Expression }'.
+ *
+ *
+ * @return the meta object for class 'Binary Integer Expression '.
+ * @see fr.obeo.dsl.arduino.BinaryIntegerExpression
+ * @generated
+ */
+ EClass getBinaryIntegerExpression();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.BinaryIntegerExpression#getOperator Operator }'.
+ *
+ *
+ * @return the meta object for the attribute 'Operator '.
+ * @see fr.obeo.dsl.arduino.BinaryIntegerExpression#getOperator()
+ * @see #getBinaryIntegerExpression()
+ * @generated
+ */
+ EAttribute getBinaryIntegerExpression_Operator();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BinaryBooleanExpression Binary Boolean Expression }'.
+ *
+ *
+ * @return the meta object for class 'Binary Boolean Expression '.
+ * @see fr.obeo.dsl.arduino.BinaryBooleanExpression
+ * @generated
+ */
+ EClass getBinaryBooleanExpression();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.BinaryBooleanExpression#getOperator Operator }'.
+ *
+ *
+ * @return the meta object for the attribute 'Operator '.
+ * @see fr.obeo.dsl.arduino.BinaryBooleanExpression#getOperator()
+ * @see #getBinaryBooleanExpression()
+ * @generated
+ */
+ EAttribute getBinaryBooleanExpression_Operator();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Expression Expression }'.
+ *
+ *
+ * @return the meta object for class 'Expression '.
+ * @see fr.obeo.dsl.arduino.Expression
+ * @generated
+ */
+ EClass getExpression();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Constant Constant }'.
+ *
+ *
+ * @return the meta object for class 'Constant '.
+ * @see fr.obeo.dsl.arduino.Constant
+ * @generated
+ */
+ EClass getConstant();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.If If }'.
+ *
+ *
+ * @return the meta object for class 'If '.
+ * @see fr.obeo.dsl.arduino.If
+ * @generated
+ */
+ EClass getIf();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.If#getCondition Condition }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Condition '.
+ * @see fr.obeo.dsl.arduino.If#getCondition()
+ * @see #getIf()
+ * @generated
+ */
+ EReference getIf_Condition();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.If#getElseBlock Else Block }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Else Block '.
+ * @see fr.obeo.dsl.arduino.If#getElseBlock()
+ * @see #getIf()
+ * @generated
+ */
+ EReference getIf_ElseBlock();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.IntegerConstant Integer Constant }'.
+ *
+ *
+ * @return the meta object for class 'Integer Constant '.
+ * @see fr.obeo.dsl.arduino.IntegerConstant
+ * @generated
+ */
+ EClass getIntegerConstant();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.IntegerConstant#getValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see fr.obeo.dsl.arduino.IntegerConstant#getValue()
+ * @see #getIntegerConstant()
+ * @generated
+ */
+ EAttribute getIntegerConstant_Value();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BooleanConstant Boolean Constant }'.
+ *
+ *
+ * @return the meta object for class 'Boolean Constant '.
+ * @see fr.obeo.dsl.arduino.BooleanConstant
+ * @generated
+ */
+ EClass getBooleanConstant();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.BooleanConstant#isValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see fr.obeo.dsl.arduino.BooleanConstant#isValue()
+ * @see #getBooleanConstant()
+ * @generated
+ */
+ EAttribute getBooleanConstant_Value();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BooleanExpression Boolean Expression }'.
+ *
+ *
+ * @return the meta object for class 'Boolean Expression '.
+ * @see fr.obeo.dsl.arduino.BooleanExpression
+ * @generated
+ */
+ EClass getBooleanExpression();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.IntegerExpression Integer Expression }'.
+ *
+ *
+ * @return the meta object for class 'Integer Expression '.
+ * @see fr.obeo.dsl.arduino.IntegerExpression
+ * @generated
+ */
+ EClass getIntegerExpression();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Assignment Assignment }'.
+ *
+ *
+ * @return the meta object for class 'Assignment '.
+ * @see fr.obeo.dsl.arduino.Assignment
+ * @generated
+ */
+ EClass getAssignment();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.Assignment#getOperand Operand }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Operand '.
+ * @see fr.obeo.dsl.arduino.Assignment#getOperand()
+ * @see #getAssignment()
+ * @generated
+ */
+ EReference getAssignment_Operand();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.IntegerVariable Integer Variable }'.
+ *
+ *
+ * @return the meta object for class 'Integer Variable '.
+ * @see fr.obeo.dsl.arduino.IntegerVariable
+ * @generated
+ */
+ EClass getIntegerVariable();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.IntegerVariable#getInitialValue Initial Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Initial Value '.
+ * @see fr.obeo.dsl.arduino.IntegerVariable#getInitialValue()
+ * @see #getIntegerVariable()
+ * @generated
+ */
+ EAttribute getIntegerVariable_InitialValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.IntegerVariable#getValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see fr.obeo.dsl.arduino.IntegerVariable#getValue()
+ * @see #getIntegerVariable()
+ * @generated
+ */
+ EAttribute getIntegerVariable_Value();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BooleanVariable Boolean Variable }'.
+ *
+ *
+ * @return the meta object for class 'Boolean Variable '.
+ * @see fr.obeo.dsl.arduino.BooleanVariable
+ * @generated
+ */
+ EClass getBooleanVariable();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.BooleanVariable#isInitialValue Initial Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Initial Value '.
+ * @see fr.obeo.dsl.arduino.BooleanVariable#isInitialValue()
+ * @see #getBooleanVariable()
+ * @generated
+ */
+ EAttribute getBooleanVariable_InitialValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.BooleanVariable#getValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see fr.obeo.dsl.arduino.BooleanVariable#getValue()
+ * @see #getBooleanVariable()
+ * @generated
+ */
+ EAttribute getBooleanVariable_Value();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.BooleanModuleGet Boolean Module Get }'.
+ *
+ *
+ * @return the meta object for class 'Boolean Module Get '.
+ * @see fr.obeo.dsl.arduino.BooleanModuleGet
+ * @generated
+ */
+ EClass getBooleanModuleGet();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.IntegerModuleGet Integer Module Get }'.
+ *
+ *
+ * @return the meta object for class 'Integer Module Get '.
+ * @see fr.obeo.dsl.arduino.IntegerModuleGet
+ * @generated
+ */
+ EClass getIntegerModuleGet();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.UnaryExpression Unary Expression }'.
+ *
+ *
+ * @return the meta object for class 'Unary Expression '.
+ * @see fr.obeo.dsl.arduino.UnaryExpression
+ * @generated
+ */
+ EClass getUnaryExpression();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.UnaryExpression#getOperand Operand }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Operand '.
+ * @see fr.obeo.dsl.arduino.UnaryExpression#getOperand()
+ * @see #getUnaryExpression()
+ * @generated
+ */
+ EReference getUnaryExpression_Operand();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.UnaryBooleanExpression Unary Boolean Expression }'.
+ *
+ *
+ * @return the meta object for class 'Unary Boolean Expression '.
+ * @see fr.obeo.dsl.arduino.UnaryBooleanExpression
+ * @generated
+ */
+ EClass getUnaryBooleanExpression();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.UnaryBooleanExpression#getOperator Operator }'.
+ *
+ *
+ * @return the meta object for the attribute 'Operator '.
+ * @see fr.obeo.dsl.arduino.UnaryBooleanExpression#getOperator()
+ * @see #getUnaryBooleanExpression()
+ * @generated
+ */
+ EAttribute getUnaryBooleanExpression_Operator();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.UnaryIntegerExpression Unary Integer Expression }'.
+ *
+ *
+ * @return the meta object for class 'Unary Integer Expression '.
+ * @see fr.obeo.dsl.arduino.UnaryIntegerExpression
+ * @generated
+ */
+ EClass getUnaryIntegerExpression();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.UnaryIntegerExpression#getOperator Operator }'.
+ *
+ *
+ * @return the meta object for the attribute 'Operator '.
+ * @see fr.obeo.dsl.arduino.UnaryIntegerExpression#getOperator()
+ * @see #getUnaryIntegerExpression()
+ * @generated
+ */
+ EAttribute getUnaryIntegerExpression_Operator();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.VariableDeclaration Variable Declaration }'.
+ *
+ *
+ * @return the meta object for class 'Variable Declaration '.
+ * @see fr.obeo.dsl.arduino.VariableDeclaration
+ * @generated
+ */
+ EClass getVariableDeclaration();
+
+ /**
+ * Returns the meta object for the containment reference '{@link fr.obeo.dsl.arduino.VariableDeclaration#getVariable Variable }'.
+ *
+ *
+ * @return the meta object for the containment reference 'Variable '.
+ * @see fr.obeo.dsl.arduino.VariableDeclaration#getVariable()
+ * @see #getVariableDeclaration()
+ * @generated
+ */
+ EReference getVariableDeclaration_Variable();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.VariableRef Variable Ref }'.
+ *
+ *
+ * @return the meta object for class 'Variable Ref '.
+ * @see fr.obeo.dsl.arduino.VariableRef
+ * @generated
+ */
+ EClass getVariableRef();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.VariableRef#getVariable Variable }'.
+ *
+ *
+ * @return the meta object for the reference 'Variable '.
+ * @see fr.obeo.dsl.arduino.VariableRef#getVariable()
+ * @see #getVariableRef()
+ * @generated
+ */
+ EReference getVariableRef_Variable();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.LED LED }'.
+ *
+ *
+ * @return the meta object for class 'LED '.
+ * @see fr.obeo.dsl.arduino.LED
+ * @generated
+ */
+ EClass getLED();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.PushButton Push Button }'.
+ *
+ *
+ * @return the meta object for class 'Push Button '.
+ * @see fr.obeo.dsl.arduino.PushButton
+ * @generated
+ */
+ EClass getPushButton();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Buzzer Buzzer }'.
+ *
+ *
+ * @return the meta object for class 'Buzzer '.
+ * @see fr.obeo.dsl.arduino.Buzzer
+ * @generated
+ */
+ EClass getBuzzer();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.RotationSensor Rotation Sensor }'.
+ *
+ *
+ * @return the meta object for class 'Rotation Sensor '.
+ * @see fr.obeo.dsl.arduino.RotationSensor
+ * @generated
+ */
+ EClass getRotationSensor();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.MicroServo Micro Servo }'.
+ *
+ *
+ * @return the meta object for class 'Micro Servo '.
+ * @see fr.obeo.dsl.arduino.MicroServo
+ * @generated
+ */
+ EClass getMicroServo();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.InfraRedSensor Infra Red Sensor }'.
+ *
+ *
+ * @return the meta object for class 'Infra Red Sensor '.
+ * @see fr.obeo.dsl.arduino.InfraRedSensor
+ * @generated
+ */
+ EClass getInfraRedSensor();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.AmbientLightSensor Ambient Light Sensor }'.
+ *
+ *
+ * @return the meta object for class 'Ambient Light Sensor '.
+ * @see fr.obeo.dsl.arduino.AmbientLightSensor
+ * @generated
+ */
+ EClass getAmbientLightSensor();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.SoundSensor Sound Sensor }'.
+ *
+ *
+ * @return the meta object for class 'Sound Sensor '.
+ * @see fr.obeo.dsl.arduino.SoundSensor
+ * @generated
+ */
+ EClass getSoundSensor();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Fan Fan }'.
+ *
+ *
+ * @return the meta object for class 'Fan '.
+ * @see fr.obeo.dsl.arduino.Fan
+ * @generated
+ */
+ EClass getFan();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.MusicPlayer Music Player }'.
+ *
+ *
+ * @return the meta object for class 'Music Player '.
+ * @see fr.obeo.dsl.arduino.MusicPlayer
+ * @generated
+ */
+ EClass getMusicPlayer();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ArduinoModule Module }'.
+ *
+ *
+ * @return the meta object for class 'Module '.
+ * @see fr.obeo.dsl.arduino.ArduinoModule
+ * @generated
+ */
+ EClass getArduinoModule();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ArduinoBoard Board }'.
+ *
+ *
+ * @return the meta object for class 'Board '.
+ * @see fr.obeo.dsl.arduino.ArduinoBoard
+ * @generated
+ */
+ EClass getArduinoBoard();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.ArduinoBoard#getDigitalPins Digital Pins }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Digital Pins '.
+ * @see fr.obeo.dsl.arduino.ArduinoBoard#getDigitalPins()
+ * @see #getArduinoBoard()
+ * @generated
+ */
+ EReference getArduinoBoard_DigitalPins();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.ArduinoBoard#getAnalogPins Analog Pins }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Analog Pins '.
+ * @see fr.obeo.dsl.arduino.ArduinoBoard#getAnalogPins()
+ * @see #getArduinoBoard()
+ * @generated
+ */
+ EReference getArduinoBoard_AnalogPins();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ArduinoDigitalModule Digital Module }'.
+ *
+ *
+ * @return the meta object for class 'Digital Module '.
+ * @see fr.obeo.dsl.arduino.ArduinoDigitalModule
+ * @generated
+ */
+ EClass getArduinoDigitalModule();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ArduinoAnalogModule Analog Module }'.
+ *
+ *
+ * @return the meta object for class 'Analog Module '.
+ * @see fr.obeo.dsl.arduino.ArduinoAnalogModule
+ * @generated
+ */
+ EClass getArduinoAnalogModule();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Thread Thread }'.
+ *
+ *
+ * @return the meta object for class 'Thread '.
+ * @see fr.obeo.dsl.arduino.Thread
+ * @generated
+ */
+ EClass getThread();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.Thread#getBlocks Blocks }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Blocks '.
+ * @see fr.obeo.dsl.arduino.Thread#getBlocks()
+ * @see #getThread()
+ * @generated
+ */
+ EReference getThread_Blocks();
+
+ /**
+ * Returns the meta object for the reference list '{@link fr.obeo.dsl.arduino.Thread#getChannels Channels }'.
+ *
+ *
+ * @return the meta object for the reference list 'Channels '.
+ * @see fr.obeo.dsl.arduino.Thread#getChannels()
+ * @see #getThread()
+ * @generated
+ */
+ EReference getThread_Channels();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Thread#getCurrentInstruction Current Instruction }'.
+ *
+ *
+ * @return the meta object for the reference 'Current Instruction '.
+ * @see fr.obeo.dsl.arduino.Thread#getCurrentInstruction()
+ * @see #getThread()
+ * @generated
+ */
+ EReference getThread_CurrentInstruction();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Thread#getFirst First }'.
+ *
+ *
+ * @return the meta object for the reference 'First '.
+ * @see fr.obeo.dsl.arduino.Thread#getFirst()
+ * @see #getThread()
+ * @generated
+ */
+ EReference getThread_First();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Thread#getLast Last }'.
+ *
+ *
+ * @return the meta object for the reference 'Last '.
+ * @see fr.obeo.dsl.arduino.Thread#getLast()
+ * @see #getThread()
+ * @generated
+ */
+ EReference getThread_Last();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Thread#getNbCycle Nb Cycle }'.
+ *
+ *
+ * @return the meta object for the attribute 'Nb Cycle '.
+ * @see fr.obeo.dsl.arduino.Thread#getNbCycle()
+ * @see #getThread()
+ * @generated
+ */
+ EAttribute getThread_NbCycle();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Channel Channel }'.
+ *
+ *
+ * @return the meta object for class 'Channel '.
+ * @see fr.obeo.dsl.arduino.Channel
+ * @generated
+ */
+ EClass getChannel();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Channel#getSource Source }'.
+ *
+ *
+ * @return the meta object for the reference 'Source '.
+ * @see fr.obeo.dsl.arduino.Channel#getSource()
+ * @see #getChannel()
+ * @generated
+ */
+ EReference getChannel_Source();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Channel#getTarget Target }'.
+ *
+ *
+ * @return the meta object for the reference 'Target '.
+ * @see fr.obeo.dsl.arduino.Channel#getTarget()
+ * @see #getChannel()
+ * @generated
+ */
+ EReference getChannel_Target();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Channel#getInRate In Rate }'.
+ *
+ *
+ * @return the meta object for the attribute 'In Rate '.
+ * @see fr.obeo.dsl.arduino.Channel#getInRate()
+ * @see #getChannel()
+ * @generated
+ */
+ EAttribute getChannel_InRate();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Channel#getOutRate Out Rate }'.
+ *
+ *
+ * @return the meta object for the attribute 'Out Rate '.
+ * @see fr.obeo.dsl.arduino.Channel#getOutRate()
+ * @see #getChannel()
+ * @generated
+ */
+ EAttribute getChannel_OutRate();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Channel#getCapacity Capacity }'.
+ *
+ *
+ * @return the meta object for the attribute 'Capacity '.
+ * @see fr.obeo.dsl.arduino.Channel#getCapacity()
+ * @see #getChannel()
+ * @generated
+ */
+ EAttribute getChannel_Capacity();
+
+ /**
+ * Returns the meta object for the attribute '{@link fr.obeo.dsl.arduino.Channel#getCurrentSize Current Size }'.
+ *
+ *
+ * @return the meta object for the attribute 'Current Size '.
+ * @see fr.obeo.dsl.arduino.Channel#getCurrentSize()
+ * @see #getChannel()
+ * @generated
+ */
+ EAttribute getChannel_CurrentSize();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.Link Link }'.
+ *
+ *
+ * @return the meta object for class 'Link '.
+ * @see fr.obeo.dsl.arduino.Link
+ * @generated
+ */
+ EClass getLink();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Link#getInBoard In Board }'.
+ *
+ *
+ * @return the meta object for the reference 'In Board '.
+ * @see fr.obeo.dsl.arduino.Link#getInBoard()
+ * @see #getLink()
+ * @generated
+ */
+ EReference getLink_InBoard();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.Link#getOutBoard Out Board }'.
+ *
+ *
+ * @return the meta object for the reference 'Out Board '.
+ * @see fr.obeo.dsl.arduino.Link#getOutBoard()
+ * @see #getLink()
+ * @generated
+ */
+ EReference getLink_OutBoard();
+
+ /**
+ * Returns the meta object for the reference list '{@link fr.obeo.dsl.arduino.Link#getChannels Channels }'.
+ *
+ *
+ * @return the meta object for the reference list 'Channels '.
+ * @see fr.obeo.dsl.arduino.Link#getChannels()
+ * @see #getLink()
+ * @generated
+ */
+ EReference getLink_Channels();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.SynchronizationBlock Synchronization Block }'.
+ *
+ *
+ * @return the meta object for class 'Synchronization Block '.
+ * @see fr.obeo.dsl.arduino.SynchronizationBlock
+ * @generated
+ */
+ EClass getSynchronizationBlock();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.InstructionBlock Instruction Block }'.
+ *
+ *
+ * @return the meta object for class 'Instruction Block '.
+ * @see fr.obeo.dsl.arduino.InstructionBlock
+ * @generated
+ */
+ EClass getInstructionBlock();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link fr.obeo.dsl.arduino.InstructionBlock#getInstructions Instructions }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Instructions '.
+ * @see fr.obeo.dsl.arduino.InstructionBlock#getInstructions()
+ * @see #getInstructionBlock()
+ * @generated
+ */
+ EReference getInstructionBlock_Instructions();
+
+ /**
+ * Returns the meta object for class '{@link fr.obeo.dsl.arduino.ThreadInstructionBlock Thread Instruction Block }'.
+ *
+ *
+ * @return the meta object for class 'Thread Instruction Block '.
+ * @see fr.obeo.dsl.arduino.ThreadInstructionBlock
+ * @generated
+ */
+ EClass getThreadInstructionBlock();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.ThreadInstructionBlock#getThread Thread }'.
+ *
+ *
+ * @return the meta object for the reference 'Thread '.
+ * @see fr.obeo.dsl.arduino.ThreadInstructionBlock#getThread()
+ * @see #getThreadInstructionBlock()
+ * @generated
+ */
+ EReference getThreadInstructionBlock_Thread();
+
+ /**
+ * Returns the meta object for the reference '{@link fr.obeo.dsl.arduino.ThreadInstructionBlock#getNext Next }'.
+ *
+ *
+ * @return the meta object for the reference 'Next '.
+ * @see fr.obeo.dsl.arduino.ThreadInstructionBlock#getNext()
+ * @see #getThreadInstructionBlock()
+ * @generated
+ */
+ EReference getThreadInstructionBlock_Next();
+
+ /**
+ * Returns the meta object for enum '{@link fr.obeo.dsl.arduino.Time Time }'.
+ *
+ *
+ * @return the meta object for enum 'Time '.
+ * @see fr.obeo.dsl.arduino.Time
+ * @generated
+ */
+ EEnum getTime();
+
+ /**
+ * Returns the meta object for enum '{@link fr.obeo.dsl.arduino.BinaryIntegerOperatorKind Binary Integer Operator Kind }'.
+ *
+ *
+ * @return the meta object for enum 'Binary Integer Operator Kind '.
+ * @see fr.obeo.dsl.arduino.BinaryIntegerOperatorKind
+ * @generated
+ */
+ EEnum getBinaryIntegerOperatorKind();
+
+ /**
+ * Returns the meta object for enum '{@link fr.obeo.dsl.arduino.BinaryBooleanOperatorKind Binary Boolean Operator Kind }'.
+ *
+ *
+ * @return the meta object for enum 'Binary Boolean Operator Kind '.
+ * @see fr.obeo.dsl.arduino.BinaryBooleanOperatorKind
+ * @generated
+ */
+ EEnum getBinaryBooleanOperatorKind();
+
+ /**
+ * Returns the meta object for enum '{@link fr.obeo.dsl.arduino.UnaryIntegerOperatorKind Unary Integer Operator Kind }'.
+ *
+ *
+ * @return the meta object for enum 'Unary Integer Operator Kind '.
+ * @see fr.obeo.dsl.arduino.UnaryIntegerOperatorKind
+ * @generated
+ */
+ EEnum getUnaryIntegerOperatorKind();
+
+ /**
+ * Returns the meta object for enum '{@link fr.obeo.dsl.arduino.UnaryBooleanOperatorKind Unary Boolean Operator Kind }'.
+ *
+ *
+ * @return the meta object for enum 'Unary Boolean Operator Kind '.
+ * @see fr.obeo.dsl.arduino.UnaryBooleanOperatorKind
+ * @generated
+ */
+ EEnum getUnaryBooleanOperatorKind();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ *
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ ArduinoFactory getArduinoFactory();
+
+ /**
+ *
+ * Defines literals for the meta objects that represent
+ *
+ * each class,
+ * each feature of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BoardImpl Board }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BoardImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBoard()
+ * @generated
+ */
+ EClass BOARD = eINSTANCE.getBoard();
+
+ /**
+ * The meta object literal for the 'Project ' container reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference BOARD__PROJECT = eINSTANCE.getBoard_Project();
+
+ /**
+ * The meta object literal for the 'Threads ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference BOARD__THREADS = eINSTANCE.getBoard_Threads();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.Module Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.Module
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModule()
+ * @generated
+ */
+ EClass MODULE = eINSTANCE.getModule();
+
+ /**
+ * The meta object literal for the 'Level ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute MODULE__LEVEL = eINSTANCE.getModule_Level();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.DigitalPinImpl Digital Pin }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.DigitalPinImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getDigitalPin()
+ * @generated
+ */
+ EClass DIGITAL_PIN = eINSTANCE.getDigitalPin();
+
+ /**
+ * The meta object literal for the 'Module ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference DIGITAL_PIN__MODULE = eINSTANCE.getDigitalPin_Module();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.PinImpl Pin }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.PinImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getPin()
+ * @generated
+ */
+ EClass PIN = eINSTANCE.getPin();
+
+ /**
+ * The meta object literal for the 'Id ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute PIN__ID = eINSTANCE.getPin_Id();
+
+ /**
+ * The meta object literal for the 'Level ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute PIN__LEVEL = eINSTANCE.getPin_Level();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.AnalogPinImpl Analog Pin }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.AnalogPinImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getAnalogPin()
+ * @generated
+ */
+ EClass ANALOG_PIN = eINSTANCE.getAnalogPin();
+
+ /**
+ * The meta object literal for the 'Module ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference ANALOG_PIN__MODULE = eINSTANCE.getAnalogPin_Module();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.SketchImpl Sketch }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.SketchImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getSketch()
+ * @generated
+ */
+ EClass SKETCH = eINSTANCE.getSketch();
+
+ /**
+ * The meta object literal for the 'Project ' container reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference SKETCH__PROJECT = eINSTANCE.getSketch_Project();
+
+ /**
+ * The meta object literal for the 'Threads ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference SKETCH__THREADS = eINSTANCE.getSketch_Threads();
+
+ /**
+ * The meta object literal for the 'Channels ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference SKETCH__CHANNELS = eINSTANCE.getSketch_Channels();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ProjectImpl Project }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ProjectImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getProject()
+ * @generated
+ */
+ EClass PROJECT = eINSTANCE.getProject();
+
+ /**
+ * The meta object literal for the 'Boards ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference PROJECT__BOARDS = eINSTANCE.getProject_Boards();
+
+ /**
+ * The meta object literal for the 'Sketch ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference PROJECT__SKETCH = eINSTANCE.getProject_Sketch();
+
+ /**
+ * The meta object literal for the 'Links ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference PROJECT__LINKS = eINSTANCE.getProject_Links();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.InstructionImpl Instruction }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.InstructionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getInstruction()
+ * @generated
+ */
+ EClass INSTRUCTION = eINSTANCE.getInstruction();
+
+ /**
+ * The meta object literal for the 'Owned Block ' container reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference INSTRUCTION__OWNED_BLOCK = eINSTANCE.getInstruction_OwnedBlock();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ModuleAssignmentImpl Module Assignment }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ModuleAssignmentImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModuleAssignment()
+ * @generated
+ */
+ EClass MODULE_ASSIGNMENT = eINSTANCE.getModuleAssignment();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ModuleInstructionImpl Module Instruction }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ModuleInstructionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModuleInstruction()
+ * @generated
+ */
+ EClass MODULE_INSTRUCTION = eINSTANCE.getModuleInstruction();
+
+ /**
+ * The meta object literal for the 'Module ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference MODULE_INSTRUCTION__MODULE = eINSTANCE.getModuleInstruction_Module();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ControlImpl Control }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ControlImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getControl()
+ * @generated
+ */
+ EClass CONTROL = eINSTANCE.getControl();
+
+ /**
+ * The meta object literal for the 'Block ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference CONTROL__BLOCK = eINSTANCE.getControl_Block();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.UtilitiesImpl Utilities }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UtilitiesImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUtilities()
+ * @generated
+ */
+ EClass UTILITIES = eINSTANCE.getUtilities();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.DelayImpl Delay }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.DelayImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getDelay()
+ * @generated
+ */
+ EClass DELAY = eINSTANCE.getDelay();
+
+ /**
+ * The meta object literal for the 'Unit ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute DELAY__UNIT = eINSTANCE.getDelay_Unit();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute DELAY__VALUE = eINSTANCE.getDelay_Value();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.NamedElementImpl Named Element }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.NamedElementImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getNamedElement()
+ * @generated
+ */
+ EClass NAMED_ELEMENT = eINSTANCE.getNamedElement();
+
+ /**
+ * The meta object literal for the 'Name ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute NAMED_ELEMENT__NAME = eINSTANCE.getNamedElement_Name();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.RepeatImpl Repeat }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.RepeatImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getRepeat()
+ * @generated
+ */
+ EClass REPEAT = eINSTANCE.getRepeat();
+
+ /**
+ * The meta object literal for the 'Iteration ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute REPEAT__ITERATION = eINSTANCE.getRepeat_Iteration();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ModuleGetImpl Module Get }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ModuleGetImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getModuleGet()
+ * @generated
+ */
+ EClass MODULE_GET = eINSTANCE.getModuleGet();
+
+ /**
+ * The meta object literal for the 'Module ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference MODULE_GET__MODULE = eINSTANCE.getModuleGet_Module();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.WhileImpl While }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.WhileImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getWhile()
+ * @generated
+ */
+ EClass WHILE = eINSTANCE.getWhile();
+
+ /**
+ * The meta object literal for the 'Condition ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference WHILE__CONDITION = eINSTANCE.getWhile_Condition();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BinaryExpressionImpl Binary Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BinaryExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryExpression()
+ * @generated
+ */
+ EClass BINARY_EXPRESSION = eINSTANCE.getBinaryExpression();
+
+ /**
+ * The meta object literal for the 'Left ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference BINARY_EXPRESSION__LEFT = eINSTANCE.getBinaryExpression_Left();
+
+ /**
+ * The meta object literal for the 'Right ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference BINARY_EXPRESSION__RIGHT = eINSTANCE.getBinaryExpression_Right();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.VariableImpl Variable }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariable()
+ * @generated
+ */
+ EClass VARIABLE = eINSTANCE.getVariable();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.VariableAssignmentImpl Variable Assignment }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableAssignmentImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariableAssignment()
+ * @generated
+ */
+ EClass VARIABLE_ASSIGNMENT = eINSTANCE.getVariableAssignment();
+
+ /**
+ * The meta object literal for the 'Variable ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference VARIABLE_ASSIGNMENT__VARIABLE = eINSTANCE.getVariableAssignment_Variable();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BinaryIntegerExpressionImpl Binary Integer Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BinaryIntegerExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryIntegerExpression()
+ * @generated
+ */
+ EClass BINARY_INTEGER_EXPRESSION = eINSTANCE.getBinaryIntegerExpression();
+
+ /**
+ * The meta object literal for the 'Operator ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute BINARY_INTEGER_EXPRESSION__OPERATOR = eINSTANCE.getBinaryIntegerExpression_Operator();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BinaryBooleanExpressionImpl Binary Boolean Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BinaryBooleanExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryBooleanExpression()
+ * @generated
+ */
+ EClass BINARY_BOOLEAN_EXPRESSION = eINSTANCE.getBinaryBooleanExpression();
+
+ /**
+ * The meta object literal for the 'Operator ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute BINARY_BOOLEAN_EXPRESSION__OPERATOR = eINSTANCE.getBinaryBooleanExpression_Operator();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ExpressionImpl Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getExpression()
+ * @generated
+ */
+ EClass EXPRESSION = eINSTANCE.getExpression();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ConstantImpl Constant }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ConstantImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getConstant()
+ * @generated
+ */
+ EClass CONSTANT = eINSTANCE.getConstant();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.IfImpl If }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IfImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIf()
+ * @generated
+ */
+ EClass IF = eINSTANCE.getIf();
+
+ /**
+ * The meta object literal for the 'Condition ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference IF__CONDITION = eINSTANCE.getIf_Condition();
+
+ /**
+ * The meta object literal for the 'Else Block ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference IF__ELSE_BLOCK = eINSTANCE.getIf_ElseBlock();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.IntegerConstantImpl Integer Constant }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerConstantImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerConstant()
+ * @generated
+ */
+ EClass INTEGER_CONSTANT = eINSTANCE.getIntegerConstant();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute INTEGER_CONSTANT__VALUE = eINSTANCE.getIntegerConstant_Value();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BooleanConstantImpl Boolean Constant }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanConstantImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanConstant()
+ * @generated
+ */
+ EClass BOOLEAN_CONSTANT = eINSTANCE.getBooleanConstant();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute BOOLEAN_CONSTANT__VALUE = eINSTANCE.getBooleanConstant_Value();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BooleanExpressionImpl Boolean Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanExpression()
+ * @generated
+ */
+ EClass BOOLEAN_EXPRESSION = eINSTANCE.getBooleanExpression();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.IntegerExpressionImpl Integer Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerExpression()
+ * @generated
+ */
+ EClass INTEGER_EXPRESSION = eINSTANCE.getIntegerExpression();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.AssignmentImpl Assignment }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.AssignmentImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getAssignment()
+ * @generated
+ */
+ EClass ASSIGNMENT = eINSTANCE.getAssignment();
+
+ /**
+ * The meta object literal for the 'Operand ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference ASSIGNMENT__OPERAND = eINSTANCE.getAssignment_Operand();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.IntegerVariableImpl Integer Variable }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerVariableImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerVariable()
+ * @generated
+ */
+ EClass INTEGER_VARIABLE = eINSTANCE.getIntegerVariable();
+
+ /**
+ * The meta object literal for the 'Initial Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute INTEGER_VARIABLE__INITIAL_VALUE = eINSTANCE.getIntegerVariable_InitialValue();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute INTEGER_VARIABLE__VALUE = eINSTANCE.getIntegerVariable_Value();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BooleanVariableImpl Boolean Variable }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanVariableImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanVariable()
+ * @generated
+ */
+ EClass BOOLEAN_VARIABLE = eINSTANCE.getBooleanVariable();
+
+ /**
+ * The meta object literal for the 'Initial Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute BOOLEAN_VARIABLE__INITIAL_VALUE = eINSTANCE.getBooleanVariable_InitialValue();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute BOOLEAN_VARIABLE__VALUE = eINSTANCE.getBooleanVariable_Value();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BooleanModuleGetImpl Boolean Module Get }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BooleanModuleGetImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBooleanModuleGet()
+ * @generated
+ */
+ EClass BOOLEAN_MODULE_GET = eINSTANCE.getBooleanModuleGet();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.IntegerModuleGetImpl Integer Module Get }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.IntegerModuleGetImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getIntegerModuleGet()
+ * @generated
+ */
+ EClass INTEGER_MODULE_GET = eINSTANCE.getIntegerModuleGet();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.UnaryExpressionImpl Unary Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UnaryExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryExpression()
+ * @generated
+ */
+ EClass UNARY_EXPRESSION = eINSTANCE.getUnaryExpression();
+
+ /**
+ * The meta object literal for the 'Operand ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference UNARY_EXPRESSION__OPERAND = eINSTANCE.getUnaryExpression_Operand();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.UnaryBooleanExpressionImpl Unary Boolean Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UnaryBooleanExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryBooleanExpression()
+ * @generated
+ */
+ EClass UNARY_BOOLEAN_EXPRESSION = eINSTANCE.getUnaryBooleanExpression();
+
+ /**
+ * The meta object literal for the 'Operator ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute UNARY_BOOLEAN_EXPRESSION__OPERATOR = eINSTANCE.getUnaryBooleanExpression_Operator();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.UnaryIntegerExpressionImpl Unary Integer Expression }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.UnaryIntegerExpressionImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryIntegerExpression()
+ * @generated
+ */
+ EClass UNARY_INTEGER_EXPRESSION = eINSTANCE.getUnaryIntegerExpression();
+
+ /**
+ * The meta object literal for the 'Operator ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute UNARY_INTEGER_EXPRESSION__OPERATOR = eINSTANCE.getUnaryIntegerExpression_Operator();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.VariableDeclarationImpl Variable Declaration }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableDeclarationImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariableDeclaration()
+ * @generated
+ */
+ EClass VARIABLE_DECLARATION = eINSTANCE.getVariableDeclaration();
+
+ /**
+ * The meta object literal for the 'Variable ' containment reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference VARIABLE_DECLARATION__VARIABLE = eINSTANCE.getVariableDeclaration_Variable();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.VariableRefImpl Variable Ref }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.VariableRefImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getVariableRef()
+ * @generated
+ */
+ EClass VARIABLE_REF = eINSTANCE.getVariableRef();
+
+ /**
+ * The meta object literal for the 'Variable ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference VARIABLE_REF__VARIABLE = eINSTANCE.getVariableRef_Variable();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.LEDImpl LED }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.LEDImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getLED()
+ * @generated
+ */
+ EClass LED = eINSTANCE.getLED();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.PushButtonImpl Push Button }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.PushButtonImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getPushButton()
+ * @generated
+ */
+ EClass PUSH_BUTTON = eINSTANCE.getPushButton();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.BuzzerImpl Buzzer }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.BuzzerImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBuzzer()
+ * @generated
+ */
+ EClass BUZZER = eINSTANCE.getBuzzer();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.RotationSensorImpl Rotation Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.RotationSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getRotationSensor()
+ * @generated
+ */
+ EClass ROTATION_SENSOR = eINSTANCE.getRotationSensor();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.MicroServoImpl Micro Servo }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.MicroServoImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getMicroServo()
+ * @generated
+ */
+ EClass MICRO_SERVO = eINSTANCE.getMicroServo();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.InfraRedSensorImpl Infra Red Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.InfraRedSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getInfraRedSensor()
+ * @generated
+ */
+ EClass INFRA_RED_SENSOR = eINSTANCE.getInfraRedSensor();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.AmbientLightSensorImpl Ambient Light Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.AmbientLightSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getAmbientLightSensor()
+ * @generated
+ */
+ EClass AMBIENT_LIGHT_SENSOR = eINSTANCE.getAmbientLightSensor();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.SoundSensorImpl Sound Sensor }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.SoundSensorImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getSoundSensor()
+ * @generated
+ */
+ EClass SOUND_SENSOR = eINSTANCE.getSoundSensor();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.FanImpl Fan }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.FanImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getFan()
+ * @generated
+ */
+ EClass FAN = eINSTANCE.getFan();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.MusicPlayerImpl Music Player }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.MusicPlayerImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getMusicPlayer()
+ * @generated
+ */
+ EClass MUSIC_PLAYER = eINSTANCE.getMusicPlayer();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ArduinoModuleImpl Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoModuleImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoModule()
+ * @generated
+ */
+ EClass ARDUINO_MODULE = eINSTANCE.getArduinoModule();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ArduinoBoardImpl Board }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoBoardImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoBoard()
+ * @generated
+ */
+ EClass ARDUINO_BOARD = eINSTANCE.getArduinoBoard();
+
+ /**
+ * The meta object literal for the 'Digital Pins ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_BOARD__DIGITAL_PINS = eINSTANCE.getArduinoBoard_DigitalPins();
+
+ /**
+ * The meta object literal for the 'Analog Pins ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_BOARD__ANALOG_PINS = eINSTANCE.getArduinoBoard_AnalogPins();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ArduinoDigitalModuleImpl Digital Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoDigitalModuleImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoDigitalModule()
+ * @generated
+ */
+ EClass ARDUINO_DIGITAL_MODULE = eINSTANCE.getArduinoDigitalModule();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ArduinoAnalogModuleImpl Analog Module }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ArduinoAnalogModuleImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getArduinoAnalogModule()
+ * @generated
+ */
+ EClass ARDUINO_ANALOG_MODULE = eINSTANCE.getArduinoAnalogModule();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ThreadImpl Thread }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ThreadImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getThread()
+ * @generated
+ */
+ EClass THREAD = eINSTANCE.getThread();
+
+ /**
+ * The meta object literal for the 'Blocks ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD__BLOCKS = eINSTANCE.getThread_Blocks();
+
+ /**
+ * The meta object literal for the 'Channels ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD__CHANNELS = eINSTANCE.getThread_Channels();
+
+ /**
+ * The meta object literal for the 'Current Instruction ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD__CURRENT_INSTRUCTION = eINSTANCE.getThread_CurrentInstruction();
+
+ /**
+ * The meta object literal for the 'First ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD__FIRST = eINSTANCE.getThread_First();
+
+ /**
+ * The meta object literal for the 'Last ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD__LAST = eINSTANCE.getThread_Last();
+
+ /**
+ * The meta object literal for the 'Nb Cycle ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute THREAD__NB_CYCLE = eINSTANCE.getThread_NbCycle();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ChannelImpl Channel }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ChannelImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getChannel()
+ * @generated
+ */
+ EClass CHANNEL = eINSTANCE.getChannel();
+
+ /**
+ * The meta object literal for the 'Source ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference CHANNEL__SOURCE = eINSTANCE.getChannel_Source();
+
+ /**
+ * The meta object literal for the 'Target ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference CHANNEL__TARGET = eINSTANCE.getChannel_Target();
+
+ /**
+ * The meta object literal for the 'In Rate ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute CHANNEL__IN_RATE = eINSTANCE.getChannel_InRate();
+
+ /**
+ * The meta object literal for the 'Out Rate ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute CHANNEL__OUT_RATE = eINSTANCE.getChannel_OutRate();
+
+ /**
+ * The meta object literal for the 'Capacity ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute CHANNEL__CAPACITY = eINSTANCE.getChannel_Capacity();
+
+ /**
+ * The meta object literal for the 'Current Size ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute CHANNEL__CURRENT_SIZE = eINSTANCE.getChannel_CurrentSize();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.LinkImpl Link }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.LinkImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getLink()
+ * @generated
+ */
+ EClass LINK = eINSTANCE.getLink();
+
+ /**
+ * The meta object literal for the 'In Board ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference LINK__IN_BOARD = eINSTANCE.getLink_InBoard();
+
+ /**
+ * The meta object literal for the 'Out Board ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference LINK__OUT_BOARD = eINSTANCE.getLink_OutBoard();
+
+ /**
+ * The meta object literal for the 'Channels ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference LINK__CHANNELS = eINSTANCE.getLink_Channels();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.SynchronizationBlockImpl Synchronization Block }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.SynchronizationBlockImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getSynchronizationBlock()
+ * @generated
+ */
+ EClass SYNCHRONIZATION_BLOCK = eINSTANCE.getSynchronizationBlock();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.InstructionBlockImpl Instruction Block }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.InstructionBlockImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getInstructionBlock()
+ * @generated
+ */
+ EClass INSTRUCTION_BLOCK = eINSTANCE.getInstructionBlock();
+
+ /**
+ * The meta object literal for the 'Instructions ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference INSTRUCTION_BLOCK__INSTRUCTIONS = eINSTANCE.getInstructionBlock_Instructions();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.impl.ThreadInstructionBlockImpl Thread Instruction Block }' class.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.impl.ThreadInstructionBlockImpl
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getThreadInstructionBlock()
+ * @generated
+ */
+ EClass THREAD_INSTRUCTION_BLOCK = eINSTANCE.getThreadInstructionBlock();
+
+ /**
+ * The meta object literal for the 'Thread ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD_INSTRUCTION_BLOCK__THREAD = eINSTANCE.getThreadInstructionBlock_Thread();
+
+ /**
+ * The meta object literal for the 'Next ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference THREAD_INSTRUCTION_BLOCK__NEXT = eINSTANCE.getThreadInstructionBlock_Next();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.Time Time }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.Time
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getTime()
+ * @generated
+ */
+ EEnum TIME = eINSTANCE.getTime();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.BinaryIntegerOperatorKind Binary Integer Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.BinaryIntegerOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryIntegerOperatorKind()
+ * @generated
+ */
+ EEnum BINARY_INTEGER_OPERATOR_KIND = eINSTANCE.getBinaryIntegerOperatorKind();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.BinaryBooleanOperatorKind Binary Boolean Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.BinaryBooleanOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getBinaryBooleanOperatorKind()
+ * @generated
+ */
+ EEnum BINARY_BOOLEAN_OPERATOR_KIND = eINSTANCE.getBinaryBooleanOperatorKind();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.UnaryIntegerOperatorKind Unary Integer Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.UnaryIntegerOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryIntegerOperatorKind()
+ * @generated
+ */
+ EEnum UNARY_INTEGER_OPERATOR_KIND = eINSTANCE.getUnaryIntegerOperatorKind();
+
+ /**
+ * The meta object literal for the '{@link fr.obeo.dsl.arduino.UnaryBooleanOperatorKind Unary Boolean Operator Kind }' enum.
+ *
+ *
+ * @see fr.obeo.dsl.arduino.UnaryBooleanOperatorKind
+ * @see fr.obeo.dsl.arduino.impl.ArduinoPackageImpl#getUnaryBooleanOperatorKind()
+ * @generated
+ */
+ EEnum UNARY_BOOLEAN_OPERATOR_KIND = eINSTANCE.getUnaryBooleanOperatorKind();
+
+ }
+
+} //ArduinoPackage
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Assignment.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Assignment.java
new file mode 100644
index 00000000..a8fca7a1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Assignment.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Assignment '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Assignment#getOperand Operand }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getAssignment()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Assignment extends Instruction {
+ /**
+ * Returns the value of the 'Operand ' containment reference.
+ *
+ *
+ * If the meaning of the 'Operand ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Operand ' containment reference.
+ * @see #setOperand(Expression)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getAssignment_Operand()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ Expression getOperand();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Assignment#getOperand Operand }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Operand ' containment reference.
+ * @see #getOperand()
+ * @generated
+ */
+ void setOperand(Expression value);
+
+} // Assignment
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryBooleanExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryBooleanExpression.java
new file mode 100644
index 00000000..d2e4eff6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryBooleanExpression.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Binary Boolean Expression '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.BinaryBooleanExpression#getOperator Operator }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryBooleanExpression()
+ * @model
+ * @generated
+ */
+public interface BinaryBooleanExpression extends BinaryExpression, BooleanExpression {
+ /**
+ * Returns the value of the 'Operator ' attribute.
+ * The literals are from the enumeration {@link fr.obeo.dsl.arduino.BinaryBooleanOperatorKind}.
+ *
+ *
+ * If the meaning of the 'Operator ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.BinaryBooleanOperatorKind
+ * @see #setOperator(BinaryBooleanOperatorKind)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryBooleanExpression_Operator()
+ * @model
+ * @generated
+ */
+ BinaryBooleanOperatorKind getOperator();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BinaryBooleanExpression#getOperator Operator }' attribute.
+ *
+ *
+ * @param value the new value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.BinaryBooleanOperatorKind
+ * @see #getOperator()
+ * @generated
+ */
+ void setOperator(BinaryBooleanOperatorKind value);
+
+} // BinaryBooleanExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryBooleanOperatorKind.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryBooleanOperatorKind.java
new file mode 100644
index 00000000..363dabb2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryBooleanOperatorKind.java
@@ -0,0 +1,378 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ *
+ * A representation of the literals of the enumeration 'Binary Boolean Operator Kind ',
+ * and utility methods for working with them.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryBooleanOperatorKind()
+ * @model
+ * @generated
+ */
+public enum BinaryBooleanOperatorKind implements Enumerator {
+ /**
+ * The 'Inf ' literal object.
+ *
+ *
+ * @see #INF_VALUE
+ * @generated
+ * @ordered
+ */
+ INF(0, "inf", "inf"),
+
+ /**
+ * The 'Sup ' literal object.
+ *
+ *
+ * @see #SUP_VALUE
+ * @generated
+ * @ordered
+ */
+ SUP(1, "sup", "sup"),
+
+ /**
+ * The 'Inf Or Equal ' literal object.
+ *
+ *
+ * @see #INF_OR_EQUAL_VALUE
+ * @generated
+ * @ordered
+ */
+ INF_OR_EQUAL(2, "infOrEqual", "infOrEqual"),
+
+ /**
+ * The 'Sup Or Equal ' literal object.
+ *
+ *
+ * @see #SUP_OR_EQUAL_VALUE
+ * @generated
+ * @ordered
+ */
+ SUP_OR_EQUAL(3, "supOrEqual", "supOrEqual"),
+
+ /**
+ * The 'Equal ' literal object.
+ *
+ *
+ * @see #EQUAL_VALUE
+ * @generated
+ * @ordered
+ */
+ EQUAL(4, "equal", "equal"),
+
+ /**
+ * The 'And ' literal object.
+ *
+ *
+ * @see #AND_VALUE
+ * @generated
+ * @ordered
+ */
+ AND(5, "and", "and"),
+
+ /**
+ * The 'Or ' literal object.
+ *
+ *
+ * @see #OR_VALUE
+ * @generated
+ * @ordered
+ */
+ OR(6, "or", "or"),
+
+ /**
+ * The 'Different ' literal object.
+ *
+ *
+ * @see #DIFFERENT_VALUE
+ * @generated
+ * @ordered
+ */
+ DIFFERENT(7, "Different", "Different");
+
+ /**
+ * The 'Inf ' literal value.
+ *
+ *
+ * If the meaning of 'Inf ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #INF
+ * @model name="inf"
+ * @generated
+ * @ordered
+ */
+ public static final int INF_VALUE = 0;
+
+ /**
+ * The 'Sup ' literal value.
+ *
+ *
+ * If the meaning of 'Sup ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #SUP
+ * @model name="sup"
+ * @generated
+ * @ordered
+ */
+ public static final int SUP_VALUE = 1;
+
+ /**
+ * The 'Inf Or Equal ' literal value.
+ *
+ *
+ * If the meaning of 'Inf Or Equal ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #INF_OR_EQUAL
+ * @model name="infOrEqual"
+ * @generated
+ * @ordered
+ */
+ public static final int INF_OR_EQUAL_VALUE = 2;
+
+ /**
+ * The 'Sup Or Equal ' literal value.
+ *
+ *
+ * If the meaning of 'Sup Or Equal ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #SUP_OR_EQUAL
+ * @model name="supOrEqual"
+ * @generated
+ * @ordered
+ */
+ public static final int SUP_OR_EQUAL_VALUE = 3;
+
+ /**
+ * The 'Equal ' literal value.
+ *
+ *
+ * If the meaning of 'Equal ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #EQUAL
+ * @model name="equal"
+ * @generated
+ * @ordered
+ */
+ public static final int EQUAL_VALUE = 4;
+
+ /**
+ * The 'And ' literal value.
+ *
+ *
+ * If the meaning of 'And ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #AND
+ * @model name="and"
+ * @generated
+ * @ordered
+ */
+ public static final int AND_VALUE = 5;
+
+ /**
+ * The 'Or ' literal value.
+ *
+ *
+ * If the meaning of 'Or ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #OR
+ * @model name="or"
+ * @generated
+ * @ordered
+ */
+ public static final int OR_VALUE = 6;
+
+ /**
+ * The 'Different ' literal value.
+ *
+ *
+ * If the meaning of 'Different ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #DIFFERENT
+ * @model name="Different"
+ * @generated
+ * @ordered
+ */
+ public static final int DIFFERENT_VALUE = 7;
+
+ /**
+ * An array of all the 'Binary Boolean Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ private static final BinaryBooleanOperatorKind[] VALUES_ARRAY =
+ new BinaryBooleanOperatorKind[] {
+ INF,
+ SUP,
+ INF_OR_EQUAL,
+ SUP_OR_EQUAL,
+ EQUAL,
+ AND,
+ OR,
+ DIFFERENT,
+ };
+
+ /**
+ * A public read-only list of all the 'Binary Boolean Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the 'Binary Boolean Operator Kind ' literal with the specified literal value.
+ *
+ *
+ * @generated
+ */
+ public static BinaryBooleanOperatorKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ BinaryBooleanOperatorKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Binary Boolean Operator Kind ' literal with the specified name.
+ *
+ *
+ * @generated
+ */
+ public static BinaryBooleanOperatorKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ BinaryBooleanOperatorKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Binary Boolean Operator Kind ' literal with the specified integer value.
+ *
+ *
+ * @generated
+ */
+ public static BinaryBooleanOperatorKind get(int value) {
+ switch (value) {
+ case INF_VALUE: return INF;
+ case SUP_VALUE: return SUP;
+ case INF_OR_EQUAL_VALUE: return INF_OR_EQUAL;
+ case SUP_OR_EQUAL_VALUE: return SUP_OR_EQUAL;
+ case EQUAL_VALUE: return EQUAL;
+ case AND_VALUE: return AND;
+ case OR_VALUE: return OR;
+ case DIFFERENT_VALUE: return DIFFERENT;
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final int value;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String name;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ *
+ *
+ * @generated
+ */
+ private BinaryBooleanOperatorKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} //BinaryBooleanOperatorKind
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryExpression.java
new file mode 100644
index 00000000..3a72c0a8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryExpression.java
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Binary Expression '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.BinaryExpression#getLeft Left }
+ * {@link fr.obeo.dsl.arduino.BinaryExpression#getRight Right }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface BinaryExpression extends Expression {
+ /**
+ * Returns the value of the 'Left ' containment reference.
+ *
+ *
+ * If the meaning of the 'Left ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Left ' containment reference.
+ * @see #setLeft(Expression)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryExpression_Left()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ Expression getLeft();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BinaryExpression#getLeft Left }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Left ' containment reference.
+ * @see #getLeft()
+ * @generated
+ */
+ void setLeft(Expression value);
+
+ /**
+ * Returns the value of the 'Right ' containment reference.
+ *
+ *
+ * If the meaning of the 'Right ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Right ' containment reference.
+ * @see #setRight(Expression)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryExpression_Right()
+ * @model containment="true"
+ * @generated
+ */
+ Expression getRight();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BinaryExpression#getRight Right }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Right ' containment reference.
+ * @see #getRight()
+ * @generated
+ */
+ void setRight(Expression value);
+
+} // BinaryExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryIntegerExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryIntegerExpression.java
new file mode 100644
index 00000000..84d0b6f5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryIntegerExpression.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Binary Integer Expression '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.BinaryIntegerExpression#getOperator Operator }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryIntegerExpression()
+ * @model
+ * @generated
+ */
+public interface BinaryIntegerExpression extends BinaryExpression, IntegerExpression {
+ /**
+ * Returns the value of the 'Operator ' attribute.
+ * The literals are from the enumeration {@link fr.obeo.dsl.arduino.BinaryIntegerOperatorKind}.
+ *
+ *
+ * If the meaning of the 'Operator ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.BinaryIntegerOperatorKind
+ * @see #setOperator(BinaryIntegerOperatorKind)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryIntegerExpression_Operator()
+ * @model
+ * @generated
+ */
+ BinaryIntegerOperatorKind getOperator();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BinaryIntegerExpression#getOperator Operator }' attribute.
+ *
+ *
+ * @param value the new value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.BinaryIntegerOperatorKind
+ * @see #getOperator()
+ * @generated
+ */
+ void setOperator(BinaryIntegerOperatorKind value);
+
+} // BinaryIntegerExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryIntegerOperatorKind.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryIntegerOperatorKind.java
new file mode 100644
index 00000000..5f142250
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BinaryIntegerOperatorKind.java
@@ -0,0 +1,351 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ *
+ * A representation of the literals of the enumeration 'Binary Integer Operator Kind ',
+ * and utility methods for working with them.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBinaryIntegerOperatorKind()
+ * @model
+ * @generated
+ */
+public enum BinaryIntegerOperatorKind implements Enumerator {
+ /**
+ * The 'Minus ' literal object.
+ *
+ *
+ * @see #MINUS_VALUE
+ * @generated
+ * @ordered
+ */
+ MINUS(0, "minus", "minus"),
+
+ /**
+ * The 'Plus ' literal object.
+ *
+ *
+ * @see #PLUS_VALUE
+ * @generated
+ * @ordered
+ */
+ PLUS(1, "plus", "plus"),
+
+ /**
+ * The 'Mul ' literal object.
+ *
+ *
+ * @see #MUL_VALUE
+ * @generated
+ * @ordered
+ */
+ MUL(2, "mul", "mul"),
+
+ /**
+ * The 'Div ' literal object.
+ *
+ *
+ * @see #DIV_VALUE
+ * @generated
+ * @ordered
+ */
+ DIV(3, "div", "div"),
+
+ /**
+ * The 'Min ' literal object.
+ *
+ *
+ * @see #MIN_VALUE
+ * @generated
+ * @ordered
+ */
+ MIN(4, "min", "min"),
+
+ /**
+ * The 'Max ' literal object.
+ *
+ *
+ * @see #MAX_VALUE
+ * @generated
+ * @ordered
+ */
+ MAX(5, "max", "max"),
+
+ /**
+ * The 'Pourcent ' literal object.
+ *
+ *
+ * @see #POURCENT_VALUE
+ * @generated
+ * @ordered
+ */
+ POURCENT(6, "pourcent", "pourcent");
+
+ /**
+ * The 'Minus ' literal value.
+ *
+ *
+ * If the meaning of 'Minus ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MINUS
+ * @model name="minus"
+ * @generated
+ * @ordered
+ */
+ public static final int MINUS_VALUE = 0;
+
+ /**
+ * The 'Plus ' literal value.
+ *
+ *
+ * If the meaning of 'Plus ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #PLUS
+ * @model name="plus"
+ * @generated
+ * @ordered
+ */
+ public static final int PLUS_VALUE = 1;
+
+ /**
+ * The 'Mul ' literal value.
+ *
+ *
+ * If the meaning of 'Mul ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MUL
+ * @model name="mul"
+ * @generated
+ * @ordered
+ */
+ public static final int MUL_VALUE = 2;
+
+ /**
+ * The 'Div ' literal value.
+ *
+ *
+ * If the meaning of 'Div ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #DIV
+ * @model name="div"
+ * @generated
+ * @ordered
+ */
+ public static final int DIV_VALUE = 3;
+
+ /**
+ * The 'Min ' literal value.
+ *
+ *
+ * If the meaning of 'Min ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MIN
+ * @model name="min"
+ * @generated
+ * @ordered
+ */
+ public static final int MIN_VALUE = 4;
+
+ /**
+ * The 'Max ' literal value.
+ *
+ *
+ * If the meaning of 'Max ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MAX
+ * @model name="max"
+ * @generated
+ * @ordered
+ */
+ public static final int MAX_VALUE = 5;
+
+ /**
+ * The 'Pourcent ' literal value.
+ *
+ *
+ * If the meaning of 'Pourcent ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #POURCENT
+ * @model name="pourcent"
+ * @generated
+ * @ordered
+ */
+ public static final int POURCENT_VALUE = 6;
+
+ /**
+ * An array of all the 'Binary Integer Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ private static final BinaryIntegerOperatorKind[] VALUES_ARRAY =
+ new BinaryIntegerOperatorKind[] {
+ MINUS,
+ PLUS,
+ MUL,
+ DIV,
+ MIN,
+ MAX,
+ POURCENT,
+ };
+
+ /**
+ * A public read-only list of all the 'Binary Integer Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the 'Binary Integer Operator Kind ' literal with the specified literal value.
+ *
+ *
+ * @generated
+ */
+ public static BinaryIntegerOperatorKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ BinaryIntegerOperatorKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Binary Integer Operator Kind ' literal with the specified name.
+ *
+ *
+ * @generated
+ */
+ public static BinaryIntegerOperatorKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ BinaryIntegerOperatorKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Binary Integer Operator Kind ' literal with the specified integer value.
+ *
+ *
+ * @generated
+ */
+ public static BinaryIntegerOperatorKind get(int value) {
+ switch (value) {
+ case MINUS_VALUE: return MINUS;
+ case PLUS_VALUE: return PLUS;
+ case MUL_VALUE: return MUL;
+ case DIV_VALUE: return DIV;
+ case MIN_VALUE: return MIN;
+ case MAX_VALUE: return MAX;
+ case POURCENT_VALUE: return POURCENT;
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final int value;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String name;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ *
+ *
+ * @generated
+ */
+ private BinaryIntegerOperatorKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} //BinaryIntegerOperatorKind
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Block.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Block.java
new file mode 100644
index 00000000..39314e34
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Block.java
@@ -0,0 +1,79 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Block '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Block#getAbstractInstructionBlocks Abstract Instruction Blocks }
+ * {@link fr.obeo.dsl.arduino.Block#getThread Thread }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBlock()
+ * @model
+ * @generated
+ */
+public interface Block extends EObject {
+ /**
+ * Returns the value of the 'Abstract Instruction Blocks ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.AbstractInstructionBlock}.
+ *
+ *
+ * If the meaning of the 'Abstract Instruction Blocks ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Abstract Instruction Blocks ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBlock_AbstractInstructionBlocks()
+ * @model containment="true"
+ * @generated
+ */
+ EList getAbstractInstructionBlocks();
+
+ /**
+ * Returns the value of the 'Thread ' container reference.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Thread#getBlock Block }'.
+ *
+ *
+ * If the meaning of the 'Thread ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Thread ' container reference.
+ * @see #setThread(fr.obeo.dsl.arduino.Thread)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBlock_Thread()
+ * @see fr.obeo.dsl.arduino.Thread#getBlock
+ * @model opposite="block" transient="false"
+ * @generated
+ */
+ fr.obeo.dsl.arduino.Thread getThread();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Block#getThread Thread }' container reference.
+ *
+ *
+ * @param value the new value of the 'Thread ' container reference.
+ * @see #getThread()
+ * @generated
+ */
+ void setThread(fr.obeo.dsl.arduino.Thread value);
+
+} // Block
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Board.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Board.java
new file mode 100644
index 00000000..72ed33c9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Board.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ *
+ * A representation of the model object 'Board '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Board#getProject Project }
+ * {@link fr.obeo.dsl.arduino.Board#getThreads Threads }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBoard()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Board extends NamedElement {
+ /**
+ * Returns the value of the 'Project ' container reference.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Project#getBoards Boards }'.
+ *
+ *
+ * If the meaning of the 'Project ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Project ' container reference.
+ * @see #setProject(Project)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBoard_Project()
+ * @see fr.obeo.dsl.arduino.Project#getBoards
+ * @model opposite="boards" required="true" transient="false"
+ * @generated
+ */
+ Project getProject();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Board#getProject Project }' container reference.
+ *
+ *
+ * @param value the new value of the 'Project ' container reference.
+ * @see #getProject()
+ * @generated
+ */
+ void setProject(Project value);
+
+ /**
+ * Returns the value of the 'Threads ' reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Thread}.
+ *
+ *
+ * If the meaning of the 'Threads ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Threads ' reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBoard_Threads()
+ * @model
+ * @generated
+ */
+ EList getThreads();
+
+} // Board
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanConstant.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanConstant.java
new file mode 100644
index 00000000..42095930
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanConstant.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Boolean Constant '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.BooleanConstant#isValue Value }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanConstant()
+ * @model
+ * @generated
+ */
+public interface BooleanConstant extends Constant, BooleanExpression {
+ /**
+ * Returns the value of the 'Value ' attribute.
+ * The default value is "false"
.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(boolean)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanConstant_Value()
+ * @model default="false"
+ * @generated
+ */
+ boolean isValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BooleanConstant#isValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #isValue()
+ * @generated
+ */
+ void setValue(boolean value);
+
+} // BooleanConstant
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanExpression.java
new file mode 100644
index 00000000..5be9ca59
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanExpression.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Boolean Expression '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface BooleanExpression extends Expression {
+} // BooleanExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanModuleGet.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanModuleGet.java
new file mode 100644
index 00000000..401e4a91
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanModuleGet.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Boolean Module Get '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanModuleGet()
+ * @model
+ * @generated
+ */
+public interface BooleanModuleGet extends ModuleGet, BooleanExpression {
+} // BooleanModuleGet
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanVariable.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanVariable.java
new file mode 100644
index 00000000..e4cb0068
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/BooleanVariable.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Boolean Variable '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.BooleanVariable#isInitialValue Initial Value }
+ * {@link fr.obeo.dsl.arduino.BooleanVariable#getValue Value }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanVariable()
+ * @model
+ * @generated
+ */
+public interface BooleanVariable extends Variable, BooleanExpression {
+ /**
+ * Returns the value of the 'Initial Value ' attribute.
+ * The default value is "false"
.
+ *
+ *
+ * If the meaning of the 'Initial Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Initial Value ' attribute.
+ * @see #setInitialValue(boolean)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanVariable_InitialValue()
+ * @model default="false"
+ * @generated
+ */
+ boolean isInitialValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BooleanVariable#isInitialValue Initial Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Initial Value ' attribute.
+ * @see #isInitialValue()
+ * @generated
+ */
+ void setInitialValue(boolean value);
+
+ /**
+ * Returns the value of the 'Value ' attribute.
+ * The default value is "false"
.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(Boolean)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBooleanVariable_Value()
+ * @model default="false"
+ * @generated
+ */
+ Boolean getValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.BooleanVariable#getValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(Boolean value);
+
+} // BooleanVariable
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Buzzer.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Buzzer.java
new file mode 100644
index 00000000..7e06c4f6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Buzzer.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Buzzer '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getBuzzer()
+ * @model
+ * @generated
+ */
+public interface Buzzer extends ArduinoDigitalModule {
+} // Buzzer
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Channel.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Channel.java
new file mode 100644
index 00000000..452ffc5c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Channel.java
@@ -0,0 +1,194 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Channel '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Channel#getSource Source }
+ * {@link fr.obeo.dsl.arduino.Channel#getTarget Target }
+ * {@link fr.obeo.dsl.arduino.Channel#getInRate In Rate }
+ * {@link fr.obeo.dsl.arduino.Channel#getOutRate Out Rate }
+ * {@link fr.obeo.dsl.arduino.Channel#getCapacity Capacity }
+ * {@link fr.obeo.dsl.arduino.Channel#getCurrentSize Current Size }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel()
+ * @model
+ * @generated
+ */
+public interface Channel extends NamedElement {
+ /**
+ * Returns the value of the 'Source ' reference.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Thread#getChannels Channels }'.
+ *
+ *
+ * If the meaning of the 'Source ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Source ' reference.
+ * @see #setSource(fr.obeo.dsl.arduino.Thread)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel_Source()
+ * @see fr.obeo.dsl.arduino.Thread#getChannels
+ * @model opposite="channels" required="true"
+ * @generated
+ */
+ fr.obeo.dsl.arduino.Thread getSource();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Channel#getSource Source }' reference.
+ *
+ *
+ * @param value the new value of the 'Source ' reference.
+ * @see #getSource()
+ * @generated
+ */
+ void setSource(fr.obeo.dsl.arduino.Thread value);
+
+ /**
+ * Returns the value of the 'Target ' reference.
+ *
+ *
+ * If the meaning of the 'Target ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Target ' reference.
+ * @see #setTarget(fr.obeo.dsl.arduino.Thread)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel_Target()
+ * @model required="true"
+ * @generated
+ */
+ fr.obeo.dsl.arduino.Thread getTarget();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Channel#getTarget Target }' reference.
+ *
+ *
+ * @param value the new value of the 'Target ' reference.
+ * @see #getTarget()
+ * @generated
+ */
+ void setTarget(fr.obeo.dsl.arduino.Thread value);
+
+ /**
+ * Returns the value of the 'In Rate ' attribute.
+ *
+ *
+ * If the meaning of the 'In Rate ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'In Rate ' attribute.
+ * @see #setInRate(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel_InRate()
+ * @model
+ * @generated
+ */
+ int getInRate();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Channel#getInRate In Rate }' attribute.
+ *
+ *
+ * @param value the new value of the 'In Rate ' attribute.
+ * @see #getInRate()
+ * @generated
+ */
+ void setInRate(int value);
+
+ /**
+ * Returns the value of the 'Out Rate ' attribute.
+ *
+ *
+ * If the meaning of the 'Out Rate ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Out Rate ' attribute.
+ * @see #setOutRate(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel_OutRate()
+ * @model
+ * @generated
+ */
+ int getOutRate();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Channel#getOutRate Out Rate }' attribute.
+ *
+ *
+ * @param value the new value of the 'Out Rate ' attribute.
+ * @see #getOutRate()
+ * @generated
+ */
+ void setOutRate(int value);
+
+ /**
+ * Returns the value of the 'Capacity ' attribute.
+ *
+ *
+ * If the meaning of the 'Capacity ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Capacity ' attribute.
+ * @see #setCapacity(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel_Capacity()
+ * @model
+ * @generated
+ */
+ int getCapacity();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Channel#getCapacity Capacity }' attribute.
+ *
+ *
+ * @param value the new value of the 'Capacity ' attribute.
+ * @see #getCapacity()
+ * @generated
+ */
+ void setCapacity(int value);
+
+ /**
+ * Returns the value of the 'Current Size ' attribute.
+ *
+ *
+ * If the meaning of the 'Current Size ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Current Size ' attribute.
+ * @see #setCurrentSize(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getChannel_CurrentSize()
+ * @model
+ * @generated
+ */
+ int getCurrentSize();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Channel#getCurrentSize Current Size }' attribute.
+ *
+ *
+ * @param value the new value of the 'Current Size ' attribute.
+ * @see #getCurrentSize()
+ * @generated
+ */
+ void setCurrentSize(int value);
+
+} // Channel
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Constant.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Constant.java
new file mode 100644
index 00000000..c3f4d7e8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Constant.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Constant '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getConstant()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Constant extends Expression {
+} // Constant
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Control.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Control.java
new file mode 100644
index 00000000..b2e2b6c9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Control.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Control '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Control#getBlock Block }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getControl()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Control extends Instruction {
+
+ /**
+ * Returns the value of the 'Block ' containment reference.
+ *
+ *
+ * If the meaning of the 'Block ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Block ' containment reference.
+ * @see #setBlock(InstructionBlock)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getControl_Block()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ InstructionBlock getBlock();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Control#getBlock Block }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Block ' containment reference.
+ * @see #getBlock()
+ * @generated
+ */
+ void setBlock(InstructionBlock value);
+} // Control
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Delay.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Delay.java
new file mode 100644
index 00000000..499b0b7f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Delay.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Delay '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Delay#getUnit Unit }
+ * {@link fr.obeo.dsl.arduino.Delay#getValue Value }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getDelay()
+ * @model
+ * @generated
+ */
+public interface Delay extends Utilities {
+ /**
+ * Returns the value of the 'Unit ' attribute.
+ * The literals are from the enumeration {@link fr.obeo.dsl.arduino.Time}.
+ *
+ *
+ * If the meaning of the 'Unit ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Unit ' attribute.
+ * @see fr.obeo.dsl.arduino.Time
+ * @see #setUnit(Time)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getDelay_Unit()
+ * @model
+ * @generated
+ */
+ Time getUnit();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Delay#getUnit Unit }' attribute.
+ *
+ *
+ * @param value the new value of the 'Unit ' attribute.
+ * @see fr.obeo.dsl.arduino.Time
+ * @see #getUnit()
+ * @generated
+ */
+ void setUnit(Time value);
+
+ /**
+ * Returns the value of the 'Value ' attribute.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getDelay_Value()
+ * @model
+ * @generated
+ */
+ int getValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Delay#getValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(int value);
+
+} // Delay
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/DigitalPin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/DigitalPin.java
new file mode 100644
index 00000000..16258aca
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/DigitalPin.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Digital Pin '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.DigitalPin#getModule Module }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getDigitalPin()
+ * @model
+ * @generated
+ */
+public interface DigitalPin extends Pin {
+ /**
+ * Returns the value of the 'Module ' containment reference.
+ *
+ *
+ * If the meaning of the 'Module ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Module ' containment reference.
+ * @see #setModule(ArduinoDigitalModule)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getDigitalPin_Module()
+ * @model containment="true"
+ * @generated
+ */
+ ArduinoDigitalModule getModule();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.DigitalPin#getModule Module }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Module ' containment reference.
+ * @see #getModule()
+ * @generated
+ */
+ void setModule(ArduinoDigitalModule value);
+
+} // DigitalPin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Expression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Expression.java
new file mode 100644
index 00000000..eb4c9738
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Expression.java
@@ -0,0 +1,26 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Expression '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Expression extends EObject {
+} // Expression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Fan.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Fan.java
new file mode 100644
index 00000000..fb7c81bd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Fan.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Fan '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getFan()
+ * @model
+ * @generated
+ */
+public interface Fan extends ArduinoDigitalModule {
+} // Fan
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/If.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/If.java
new file mode 100644
index 00000000..0a27cf52
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/If.java
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'If '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.If#getCondition Condition }
+ * {@link fr.obeo.dsl.arduino.If#getElseBlock Else Block }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIf()
+ * @model
+ * @generated
+ */
+public interface If extends Control {
+ /**
+ * Returns the value of the 'Condition ' containment reference.
+ *
+ *
+ * If the meaning of the 'Condition ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Condition ' containment reference.
+ * @see #setCondition(BooleanExpression)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIf_Condition()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ BooleanExpression getCondition();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.If#getCondition Condition }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Condition ' containment reference.
+ * @see #getCondition()
+ * @generated
+ */
+ void setCondition(BooleanExpression value);
+
+ /**
+ * Returns the value of the 'Else Block ' containment reference.
+ *
+ *
+ * If the meaning of the 'Else Block ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Else Block ' containment reference.
+ * @see #setElseBlock(InstructionBlock)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIf_ElseBlock()
+ * @model containment="true"
+ * @generated
+ */
+ InstructionBlock getElseBlock();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.If#getElseBlock Else Block }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Else Block ' containment reference.
+ * @see #getElseBlock()
+ * @generated
+ */
+ void setElseBlock(InstructionBlock value);
+
+} // If
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/InfraRedSensor.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/InfraRedSensor.java
new file mode 100644
index 00000000..0c281185
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/InfraRedSensor.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Infra Red Sensor '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getInfraRedSensor()
+ * @model
+ * @generated
+ */
+public interface InfraRedSensor extends ArduinoDigitalModule {
+} // InfraRedSensor
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Instruction.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Instruction.java
new file mode 100644
index 00000000..af402144
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Instruction.java
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Instruction '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Instruction#getOwnedBlock Owned Block }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getInstruction()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Instruction extends NamedElement {
+ /**
+ * Returns the value of the 'Owned Block ' container reference.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.InstructionBlock#getInstructions Instructions }'.
+ *
+ *
+ * If the meaning of the 'Owned Block ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Owned Block ' container reference.
+ * @see #setOwnedBlock(InstructionBlock)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getInstruction_OwnedBlock()
+ * @see fr.obeo.dsl.arduino.InstructionBlock#getInstructions
+ * @model opposite="instructions" transient="false"
+ * @generated
+ */
+ InstructionBlock getOwnedBlock();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Instruction#getOwnedBlock Owned Block }' container reference.
+ *
+ *
+ * @param value the new value of the 'Owned Block ' container reference.
+ * @see #getOwnedBlock()
+ * @generated
+ */
+ void setOwnedBlock(InstructionBlock value);
+
+ /**
+ *
+ *
+ * @model
+ * @generated
+ */
+ void execute();
+
+} // Instruction
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/InstructionBlock.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/InstructionBlock.java
new file mode 100644
index 00000000..2d5a864f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/InstructionBlock.java
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Instruction Block '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.InstructionBlock#getInstructions Instructions }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getInstructionBlock()
+ * @model
+ * @generated
+ */
+public interface InstructionBlock extends ThreadInstructionBlock {
+ /**
+ * Returns the value of the 'Instructions ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Instruction}.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Instruction#getOwnedBlock Owned Block }'.
+ *
+ *
+ * If the meaning of the 'Instructions ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Instructions ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getInstructionBlock_Instructions()
+ * @see fr.obeo.dsl.arduino.Instruction#getOwnedBlock
+ * @model opposite="ownedBlock" containment="true"
+ * @generated
+ */
+ EList getInstructions();
+
+} // InstructionBlock
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerConstant.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerConstant.java
new file mode 100644
index 00000000..389106d4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerConstant.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Integer Constant '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.IntegerConstant#getValue Value }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerConstant()
+ * @model
+ * @generated
+ */
+public interface IntegerConstant extends Constant, IntegerExpression {
+ /**
+ * Returns the value of the 'Value ' attribute.
+ * The default value is "0"
.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerConstant_Value()
+ * @model default="0"
+ * @generated
+ */
+ int getValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.IntegerConstant#getValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(int value);
+
+} // IntegerConstant
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerExpression.java
new file mode 100644
index 00000000..a205ccd0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerExpression.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Integer Expression '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface IntegerExpression extends Expression {
+} // IntegerExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerModuleGet.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerModuleGet.java
new file mode 100644
index 00000000..d7da3f85
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerModuleGet.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Integer Module Get '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerModuleGet()
+ * @model
+ * @generated
+ */
+public interface IntegerModuleGet extends ModuleGet, IntegerExpression {
+} // IntegerModuleGet
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerVariable.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerVariable.java
new file mode 100644
index 00000000..cc27101d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/IntegerVariable.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Integer Variable '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.IntegerVariable#getInitialValue Initial Value }
+ * {@link fr.obeo.dsl.arduino.IntegerVariable#getValue Value }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerVariable()
+ * @model
+ * @generated
+ */
+public interface IntegerVariable extends Variable, IntegerExpression {
+ /**
+ * Returns the value of the 'Initial Value ' attribute.
+ * The default value is "0"
.
+ *
+ *
+ * If the meaning of the 'Initial Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Initial Value ' attribute.
+ * @see #setInitialValue(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerVariable_InitialValue()
+ * @model default="0"
+ * @generated
+ */
+ int getInitialValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.IntegerVariable#getInitialValue Initial Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Initial Value ' attribute.
+ * @see #getInitialValue()
+ * @generated
+ */
+ void setInitialValue(int value);
+
+ /**
+ * Returns the value of the 'Value ' attribute.
+ * The default value is "0"
.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(Integer)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getIntegerVariable_Value()
+ * @model default="0"
+ * @generated
+ */
+ Integer getValue();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.IntegerVariable#getValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(Integer value);
+
+} // IntegerVariable
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/LED.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/LED.java
new file mode 100644
index 00000000..c8b5b235
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/LED.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'LED '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getLED()
+ * @model
+ * @generated
+ */
+public interface LED extends ArduinoDigitalModule {
+} // LED
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Link.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Link.java
new file mode 100644
index 00000000..9e3fe64d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Link.java
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+
+/**
+ *
+ * A representation of the model object 'Link '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Link#getInBoard In Board }
+ * {@link fr.obeo.dsl.arduino.Link#getOutBoard Out Board }
+ * {@link fr.obeo.dsl.arduino.Link#getChannels Channels }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getLink()
+ * @model
+ * @generated
+ */
+public interface Link extends NamedElement {
+ /**
+ * Returns the value of the 'In Board ' reference.
+ *
+ *
+ * If the meaning of the 'In Board ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'In Board ' reference.
+ * @see #setInBoard(Board)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getLink_InBoard()
+ * @model required="true"
+ * @generated
+ */
+ Board getInBoard();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Link#getInBoard In Board }' reference.
+ *
+ *
+ * @param value the new value of the 'In Board ' reference.
+ * @see #getInBoard()
+ * @generated
+ */
+ void setInBoard(Board value);
+
+ /**
+ * Returns the value of the 'Out Board ' reference.
+ *
+ *
+ * If the meaning of the 'Out Board ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Out Board ' reference.
+ * @see #setOutBoard(Board)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getLink_OutBoard()
+ * @model required="true"
+ * @generated
+ */
+ Board getOutBoard();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Link#getOutBoard Out Board }' reference.
+ *
+ *
+ * @param value the new value of the 'Out Board ' reference.
+ * @see #getOutBoard()
+ * @generated
+ */
+ void setOutBoard(Board value);
+
+ /**
+ * Returns the value of the 'Channels ' reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Channel}.
+ *
+ *
+ * If the meaning of the 'Channels ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Channels ' reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getLink_Channels()
+ * @model
+ * @generated
+ */
+ EList getChannels();
+
+} // Link
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/MicroServo.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/MicroServo.java
new file mode 100644
index 00000000..a9fe2bc0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/MicroServo.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Micro Servo '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getMicroServo()
+ * @model
+ * @generated
+ */
+public interface MicroServo extends ArduinoDigitalModule {
+} // MicroServo
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Module.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Module.java
new file mode 100644
index 00000000..f300291f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Module.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Module '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Module#isLevel Level }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModule()
+ * @model interface="true" abstract="true"
+ * @generated
+ */
+public interface Module extends NamedElement {
+ /**
+ * Returns the value of the 'Level ' attribute.
+ *
+ *
+ * If the meaning of the 'Level ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Level ' attribute.
+ * @see #setLevel(boolean)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModule_Level()
+ * @model
+ * @generated
+ */
+ boolean isLevel();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Module#isLevel Level }' attribute.
+ *
+ *
+ * @param value the new value of the 'Level ' attribute.
+ * @see #isLevel()
+ * @generated
+ */
+ void setLevel(boolean value);
+
+} // Module
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleAssignment.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleAssignment.java
new file mode 100644
index 00000000..0187daec
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleAssignment.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Module Assignment '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModuleAssignment()
+ * @model
+ * @generated
+ */
+public interface ModuleAssignment extends ModuleInstruction, Assignment {
+} // ModuleAssignment
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleGet.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleGet.java
new file mode 100644
index 00000000..6f8a2e75
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleGet.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Module Get '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.ModuleGet#getModule Module }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModuleGet()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ModuleGet extends Expression {
+ /**
+ * Returns the value of the 'Module ' reference.
+ *
+ *
+ * If the meaning of the 'Module ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Module ' reference.
+ * @see #setModule(Module)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModuleGet_Module()
+ * @model required="true"
+ * @generated
+ */
+ Module getModule();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.ModuleGet#getModule Module }' reference.
+ *
+ *
+ * @param value the new value of the 'Module ' reference.
+ * @see #getModule()
+ * @generated
+ */
+ void setModule(Module value);
+
+} // ModuleGet
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleInstruction.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleInstruction.java
new file mode 100644
index 00000000..de8eac2c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ModuleInstruction.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Module Instruction '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.ModuleInstruction#getModule Module }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModuleInstruction()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ModuleInstruction extends Instruction {
+ /**
+ * Returns the value of the 'Module ' reference.
+ *
+ *
+ * If the meaning of the 'Module ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Module ' reference.
+ * @see #setModule(Module)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getModuleInstruction_Module()
+ * @model required="true"
+ * @generated
+ */
+ Module getModule();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.ModuleInstruction#getModule Module }' reference.
+ *
+ *
+ * @param value the new value of the 'Module ' reference.
+ * @see #getModule()
+ * @generated
+ */
+ void setModule(Module value);
+
+} // ModuleInstruction
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/MusicPlayer.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/MusicPlayer.java
new file mode 100644
index 00000000..a3b13a28
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/MusicPlayer.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Music Player '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getMusicPlayer()
+ * @model
+ * @generated
+ */
+public interface MusicPlayer extends ArduinoAnalogModule {
+} // MusicPlayer
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/NamedElement.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/NamedElement.java
new file mode 100644
index 00000000..ec6e7077
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/NamedElement.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Named Element '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.NamedElement#getName Name }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getNamedElement()
+ * @model abstract="true"
+ * @generated
+ */
+public interface NamedElement extends EObject {
+ /**
+ * Returns the value of the 'Name ' attribute.
+ *
+ *
+ * If the meaning of the 'Name ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Name ' attribute.
+ * @see #setName(String)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getNamedElement_Name()
+ * @model
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.NamedElement#getName Name }' attribute.
+ *
+ *
+ * @param value the new value of the 'Name ' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+} // NamedElement
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Pin.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Pin.java
new file mode 100644
index 00000000..dba582de
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Pin.java
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Pin '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Pin#getId Id }
+ * {@link fr.obeo.dsl.arduino.Pin#getLevel Level }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getPin()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Pin extends EObject {
+ /**
+ * Returns the value of the 'Id ' attribute.
+ *
+ *
+ * If the meaning of the 'Id ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Id ' attribute.
+ * @see #setId(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getPin_Id()
+ * @model
+ * @generated
+ */
+ int getId();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Pin#getId Id }' attribute.
+ *
+ *
+ * @param value the new value of the 'Id ' attribute.
+ * @see #getId()
+ * @generated
+ */
+ void setId(int value);
+
+ /**
+ * Returns the value of the 'Level ' attribute.
+ *
+ *
+ * If the meaning of the 'Level ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Level ' attribute.
+ * @see #setLevel(Integer)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getPin_Level()
+ * @model
+ * @generated
+ */
+ Integer getLevel();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Pin#getLevel Level }' attribute.
+ *
+ *
+ * @param value the new value of the 'Level ' attribute.
+ * @see #getLevel()
+ * @generated
+ */
+ void setLevel(Integer value);
+
+} // Pin
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Project.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Project.java
new file mode 100644
index 00000000..402c122c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Project.java
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Project '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Project#getBoards Boards }
+ * {@link fr.obeo.dsl.arduino.Project#getSketch Sketch }
+ * {@link fr.obeo.dsl.arduino.Project#getLinks Links }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getProject()
+ * @model
+ * @generated
+ */
+public interface Project extends NamedElement {
+ /**
+ * Returns the value of the 'Boards ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Board}.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Board#getProject Project }'.
+ *
+ *
+ * If the meaning of the 'Boards ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Boards ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getProject_Boards()
+ * @see fr.obeo.dsl.arduino.Board#getProject
+ * @model opposite="project" containment="true"
+ * @generated
+ */
+ EList getBoards();
+
+ /**
+ * Returns the value of the 'Sketch ' containment reference.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Sketch#getProject Project }'.
+ *
+ *
+ * If the meaning of the 'Sketch ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Sketch ' containment reference.
+ * @see #setSketch(Sketch)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getProject_Sketch()
+ * @see fr.obeo.dsl.arduino.Sketch#getProject
+ * @model opposite="project" containment="true"
+ * @generated
+ */
+ Sketch getSketch();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Project#getSketch Sketch }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Sketch ' containment reference.
+ * @see #getSketch()
+ * @generated
+ */
+ void setSketch(Sketch value);
+
+ /**
+ * Returns the value of the 'Links ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Link}.
+ *
+ *
+ * If the meaning of the 'Links ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Links ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getProject_Links()
+ * @model containment="true"
+ * @generated
+ */
+ EList getLinks();
+
+} // Project
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/PushButton.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/PushButton.java
new file mode 100644
index 00000000..165ba88b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/PushButton.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Push Button '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getPushButton()
+ * @model
+ * @generated
+ */
+public interface PushButton extends ArduinoDigitalModule {
+} // PushButton
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Repeat.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Repeat.java
new file mode 100644
index 00000000..f6aed6cd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Repeat.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Repeat '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Repeat#getIteration Iteration }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getRepeat()
+ * @model
+ * @generated
+ */
+public interface Repeat extends Control {
+ /**
+ * Returns the value of the 'Iteration ' attribute.
+ * The default value is "5"
.
+ *
+ *
+ * If the meaning of the 'Iteration ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Iteration ' attribute.
+ * @see #setIteration(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getRepeat_Iteration()
+ * @model default="5"
+ * @generated
+ */
+ int getIteration();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Repeat#getIteration Iteration }' attribute.
+ *
+ *
+ * @param value the new value of the 'Iteration ' attribute.
+ * @see #getIteration()
+ * @generated
+ */
+ void setIteration(int value);
+
+} // Repeat
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/RotationSensor.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/RotationSensor.java
new file mode 100644
index 00000000..00edc3bc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/RotationSensor.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Rotation Sensor '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getRotationSensor()
+ * @model
+ * @generated
+ */
+public interface RotationSensor extends ArduinoAnalogModule {
+} // RotationSensor
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Sketch.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Sketch.java
new file mode 100644
index 00000000..21ff371f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Sketch.java
@@ -0,0 +1,94 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Sketch '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Sketch#getProject Project }
+ * {@link fr.obeo.dsl.arduino.Sketch#getThreads Threads }
+ * {@link fr.obeo.dsl.arduino.Sketch#getChannels Channels }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSketch()
+ * @model
+ * @generated
+ */
+public interface Sketch extends NamedElement {
+ /**
+ * Returns the value of the 'Project ' container reference.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Project#getSketch Sketch }'.
+ *
+ *
+ * If the meaning of the 'Project ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Project ' container reference.
+ * @see #setProject(Project)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSketch_Project()
+ * @see fr.obeo.dsl.arduino.Project#getSketch
+ * @model opposite="sketch" required="true" transient="false"
+ * @generated
+ */
+ Project getProject();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Sketch#getProject Project }' container reference.
+ *
+ *
+ * @param value the new value of the 'Project ' container reference.
+ * @see #getProject()
+ * @generated
+ */
+ void setProject(Project value);
+
+ /**
+ * Returns the value of the 'Threads ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Thread}.
+ *
+ *
+ * If the meaning of the 'Threads ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Threads ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSketch_Threads()
+ * @model containment="true"
+ * @generated
+ */
+ EList getThreads();
+
+ /**
+ * Returns the value of the 'Channels ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Channel}.
+ *
+ *
+ * If the meaning of the 'Channels ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Channels ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSketch_Channels()
+ * @model containment="true"
+ * @generated
+ */
+ EList getChannels();
+
+} // Sketch
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/SoundSensor.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/SoundSensor.java
new file mode 100644
index 00000000..f53ddbd4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/SoundSensor.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Sound Sensor '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSoundSensor()
+ * @model
+ * @generated
+ */
+public interface SoundSensor extends ArduinoAnalogModule {
+} // SoundSensor
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Synchonization.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Synchonization.java
new file mode 100644
index 00000000..f564f110
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Synchonization.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Synchonization '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSynchonization()
+ * @model
+ * @generated
+ */
+public interface Synchonization extends Instruction {
+ /**
+ *
+ *
+ * @model
+ * @generated
+ */
+ void fire();
+
+} // Synchonization
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Synchronization.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Synchronization.java
new file mode 100644
index 00000000..f1056e27
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Synchronization.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Synchronization '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSynchronization()
+ * @model
+ * @generated
+ */
+public interface Synchronization extends Instruction {
+ /**
+ *
+ *
+ * @model
+ * @generated
+ */
+ void fire();
+
+} // Synchronization
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/SynchronizationBlock.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/SynchronizationBlock.java
new file mode 100644
index 00000000..7cd3f668
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/SynchronizationBlock.java
@@ -0,0 +1,26 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Synchronization Block '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getSynchronizationBlock()
+ * @model
+ * @generated
+ */
+public interface SynchronizationBlock extends ThreadInstructionBlock {
+
+} // SynchronizationBlock
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Thread.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Thread.java
new file mode 100644
index 00000000..3d5b63a1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Thread.java
@@ -0,0 +1,175 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Thread '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.Thread#getBlocks Blocks }
+ * {@link fr.obeo.dsl.arduino.Thread#getChannels Channels }
+ * {@link fr.obeo.dsl.arduino.Thread#getCurrentInstruction Current Instruction }
+ * {@link fr.obeo.dsl.arduino.Thread#getFirst First }
+ * {@link fr.obeo.dsl.arduino.Thread#getLast Last }
+ * {@link fr.obeo.dsl.arduino.Thread#getNbCycle Nb Cycle }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread()
+ * @model
+ * @generated
+ */
+public interface Thread extends NamedElement {
+ /**
+ * Returns the value of the 'Blocks ' containment reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.ThreadInstructionBlock}.
+ *
+ *
+ * If the meaning of the 'Blocks ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Blocks ' containment reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread_Blocks()
+ * @model containment="true"
+ * @generated
+ */
+ EList getBlocks();
+
+ /**
+ * Returns the value of the 'Channels ' reference list.
+ * The list contents are of type {@link fr.obeo.dsl.arduino.Channel}.
+ * It is bidirectional and its opposite is '{@link fr.obeo.dsl.arduino.Channel#getSource Source }'.
+ *
+ *
+ * If the meaning of the 'Channels ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Channels ' reference list.
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread_Channels()
+ * @see fr.obeo.dsl.arduino.Channel#getSource
+ * @model opposite="source"
+ * @generated
+ */
+ EList getChannels();
+
+ /**
+ * Returns the value of the 'Current Instruction ' reference.
+ *
+ *
+ * If the meaning of the 'Current Instruction ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Current Instruction ' reference.
+ * @see #setCurrentInstruction(Instruction)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread_CurrentInstruction()
+ * @model
+ * @generated
+ */
+ Instruction getCurrentInstruction();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Thread#getCurrentInstruction Current Instruction }' reference.
+ *
+ *
+ * @param value the new value of the 'Current Instruction ' reference.
+ * @see #getCurrentInstruction()
+ * @generated
+ */
+ void setCurrentInstruction(Instruction value);
+
+ /**
+ * Returns the value of the 'First ' reference.
+ *
+ *
+ * If the meaning of the 'First ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'First ' reference.
+ * @see #setFirst(ThreadInstructionBlock)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread_First()
+ * @model
+ * @generated
+ */
+ ThreadInstructionBlock getFirst();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Thread#getFirst First }' reference.
+ *
+ *
+ * @param value the new value of the 'First ' reference.
+ * @see #getFirst()
+ * @generated
+ */
+ void setFirst(ThreadInstructionBlock value);
+
+ /**
+ * Returns the value of the 'Last ' reference.
+ *
+ *
+ * If the meaning of the 'Last ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Last ' reference.
+ * @see #setLast(ThreadInstructionBlock)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread_Last()
+ * @model
+ * @generated
+ */
+ ThreadInstructionBlock getLast();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Thread#getLast Last }' reference.
+ *
+ *
+ * @param value the new value of the 'Last ' reference.
+ * @see #getLast()
+ * @generated
+ */
+ void setLast(ThreadInstructionBlock value);
+
+ /**
+ * Returns the value of the 'Nb Cycle ' attribute.
+ *
+ *
+ * If the meaning of the 'Nb Cycle ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Nb Cycle ' attribute.
+ * @see #setNbCycle(int)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThread_NbCycle()
+ * @model
+ * @generated
+ */
+ int getNbCycle();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.Thread#getNbCycle Nb Cycle }' attribute.
+ *
+ *
+ * @param value the new value of the 'Nb Cycle ' attribute.
+ * @see #getNbCycle()
+ * @generated
+ */
+ void setNbCycle(int value);
+
+} // Thread
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ThreadInstructionBlock.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ThreadInstructionBlock.java
new file mode 100644
index 00000000..73516cd5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/ThreadInstructionBlock.java
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Thread Instruction Block '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.ThreadInstructionBlock#getThread Thread }
+ * {@link fr.obeo.dsl.arduino.ThreadInstructionBlock#getNext Next }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThreadInstructionBlock()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ThreadInstructionBlock extends NamedElement {
+ /**
+ * Returns the value of the 'Thread ' reference.
+ *
+ *
+ * If the meaning of the 'Thread ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Thread ' reference.
+ * @see #setThread(fr.obeo.dsl.arduino.Thread)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThreadInstructionBlock_Thread()
+ * @model
+ * @generated
+ */
+ fr.obeo.dsl.arduino.Thread getThread();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.ThreadInstructionBlock#getThread Thread }' reference.
+ *
+ *
+ * @param value the new value of the 'Thread ' reference.
+ * @see #getThread()
+ * @generated
+ */
+ void setThread(fr.obeo.dsl.arduino.Thread value);
+
+ /**
+ * Returns the value of the 'Next ' reference.
+ *
+ *
+ * If the meaning of the 'Next ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Next ' reference.
+ * @see #setNext(ThreadInstructionBlock)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getThreadInstructionBlock_Next()
+ * @model
+ * @generated
+ */
+ ThreadInstructionBlock getNext();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.ThreadInstructionBlock#getNext Next }' reference.
+ *
+ *
+ * @param value the new value of the 'Next ' reference.
+ * @see #getNext()
+ * @generated
+ */
+ void setNext(ThreadInstructionBlock value);
+
+ /**
+ *
+ *
+ * @model
+ * @generated
+ */
+ void execute();
+
+} // ThreadInstructionBlock
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Time.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Time.java
new file mode 100644
index 00000000..3ea77021
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Time.java
@@ -0,0 +1,215 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ *
+ * A representation of the literals of the enumeration 'Time ',
+ * and utility methods for working with them.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getTime()
+ * @model
+ * @generated
+ */
+public enum Time implements Enumerator {
+ /**
+ * The 'Milli Second ' literal object.
+ *
+ *
+ * @see #MILLI_SECOND_VALUE
+ * @generated
+ * @ordered
+ */
+ MILLI_SECOND(0, "MilliSecond", "MilliSecond"),
+
+ /**
+ * The 'Micro Second ' literal object.
+ *
+ *
+ * @see #MICRO_SECOND_VALUE
+ * @generated
+ * @ordered
+ */
+ MICRO_SECOND(0, "MicroSecond", "MicroSecond");
+
+ /**
+ * The 'Milli Second ' literal value.
+ *
+ *
+ * If the meaning of 'Milli Second ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MILLI_SECOND
+ * @model name="MilliSecond"
+ * @generated
+ * @ordered
+ */
+ public static final int MILLI_SECOND_VALUE = 0;
+
+ /**
+ * The 'Micro Second ' literal value.
+ *
+ *
+ * If the meaning of 'Micro Second ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MICRO_SECOND
+ * @model name="MicroSecond"
+ * @generated
+ * @ordered
+ */
+ public static final int MICRO_SECOND_VALUE = 0;
+
+ /**
+ * An array of all the 'Time ' enumerators.
+ *
+ *
+ * @generated
+ */
+ private static final Time[] VALUES_ARRAY =
+ new Time[] {
+ MILLI_SECOND,
+ MICRO_SECOND,
+ };
+
+ /**
+ * A public read-only list of all the 'Time ' enumerators.
+ *
+ *
+ * @generated
+ */
+ public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the 'Time ' literal with the specified literal value.
+ *
+ *
+ * @generated
+ */
+ public static Time get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ Time result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Time ' literal with the specified name.
+ *
+ *
+ * @generated
+ */
+ public static Time getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ Time result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Time ' literal with the specified integer value.
+ *
+ *
+ * @generated
+ */
+ public static Time get(int value) {
+ switch (value) {
+ case MILLI_SECOND_VALUE: return MILLI_SECOND;
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final int value;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String name;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ *
+ *
+ * @generated
+ */
+ private Time(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} //Time
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryBooleanExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryBooleanExpression.java
new file mode 100644
index 00000000..b3d0881c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryBooleanExpression.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Unary Boolean Expression '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.UnaryBooleanExpression#getOperator Operator }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryBooleanExpression()
+ * @model
+ * @generated
+ */
+public interface UnaryBooleanExpression extends UnaryExpression, BooleanExpression {
+ /**
+ * Returns the value of the 'Operator ' attribute.
+ * The literals are from the enumeration {@link fr.obeo.dsl.arduino.UnaryBooleanOperatorKind}.
+ *
+ *
+ * If the meaning of the 'Operator ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.UnaryBooleanOperatorKind
+ * @see #setOperator(UnaryBooleanOperatorKind)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryBooleanExpression_Operator()
+ * @model
+ * @generated
+ */
+ UnaryBooleanOperatorKind getOperator();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.UnaryBooleanExpression#getOperator Operator }' attribute.
+ *
+ *
+ * @param value the new value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.UnaryBooleanOperatorKind
+ * @see #getOperator()
+ * @generated
+ */
+ void setOperator(UnaryBooleanOperatorKind value);
+
+} // UnaryBooleanExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryBooleanOperatorKind.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryBooleanOperatorKind.java
new file mode 100644
index 00000000..b2454775
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryBooleanOperatorKind.java
@@ -0,0 +1,189 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ *
+ * A representation of the literals of the enumeration 'Unary Boolean Operator Kind ',
+ * and utility methods for working with them.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryBooleanOperatorKind()
+ * @model
+ * @generated
+ */
+public enum UnaryBooleanOperatorKind implements Enumerator {
+ /**
+ * The 'Not ' literal object.
+ *
+ *
+ * @see #NOT_VALUE
+ * @generated
+ * @ordered
+ */
+ NOT(0, "not", "not");
+
+ /**
+ * The 'Not ' literal value.
+ *
+ *
+ * If the meaning of 'Not ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #NOT
+ * @model name="not"
+ * @generated
+ * @ordered
+ */
+ public static final int NOT_VALUE = 0;
+
+ /**
+ * An array of all the 'Unary Boolean Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ private static final UnaryBooleanOperatorKind[] VALUES_ARRAY =
+ new UnaryBooleanOperatorKind[] {
+ NOT,
+ };
+
+ /**
+ * A public read-only list of all the 'Unary Boolean Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the 'Unary Boolean Operator Kind ' literal with the specified literal value.
+ *
+ *
+ * @generated
+ */
+ public static UnaryBooleanOperatorKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ UnaryBooleanOperatorKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Unary Boolean Operator Kind ' literal with the specified name.
+ *
+ *
+ * @generated
+ */
+ public static UnaryBooleanOperatorKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ UnaryBooleanOperatorKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Unary Boolean Operator Kind ' literal with the specified integer value.
+ *
+ *
+ * @generated
+ */
+ public static UnaryBooleanOperatorKind get(int value) {
+ switch (value) {
+ case NOT_VALUE: return NOT;
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final int value;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String name;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ *
+ *
+ * @generated
+ */
+ private UnaryBooleanOperatorKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} //UnaryBooleanOperatorKind
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryExpression.java
new file mode 100644
index 00000000..0e4ac8c7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryExpression.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Unary Expression '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.UnaryExpression#getOperand Operand }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface UnaryExpression extends Expression {
+ /**
+ * Returns the value of the 'Operand ' containment reference.
+ *
+ *
+ * If the meaning of the 'Operand ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Operand ' containment reference.
+ * @see #setOperand(Expression)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryExpression_Operand()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ Expression getOperand();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.UnaryExpression#getOperand Operand }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Operand ' containment reference.
+ * @see #getOperand()
+ * @generated
+ */
+ void setOperand(Expression value);
+
+} // UnaryExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryIntegerExpression.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryIntegerExpression.java
new file mode 100644
index 00000000..9611a162
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryIntegerExpression.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Unary Integer Expression '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.UnaryIntegerExpression#getOperator Operator }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryIntegerExpression()
+ * @model
+ * @generated
+ */
+public interface UnaryIntegerExpression extends UnaryExpression, IntegerExpression {
+ /**
+ * Returns the value of the 'Operator ' attribute.
+ * The literals are from the enumeration {@link fr.obeo.dsl.arduino.UnaryIntegerOperatorKind}.
+ *
+ *
+ * If the meaning of the 'Operator ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.UnaryIntegerOperatorKind
+ * @see #setOperator(UnaryIntegerOperatorKind)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryIntegerExpression_Operator()
+ * @model
+ * @generated
+ */
+ UnaryIntegerOperatorKind getOperator();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.UnaryIntegerExpression#getOperator Operator }' attribute.
+ *
+ *
+ * @param value the new value of the 'Operator ' attribute.
+ * @see fr.obeo.dsl.arduino.UnaryIntegerOperatorKind
+ * @see #getOperator()
+ * @generated
+ */
+ void setOperator(UnaryIntegerOperatorKind value);
+
+} // UnaryIntegerExpression
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryIntegerOperatorKind.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryIntegerOperatorKind.java
new file mode 100644
index 00000000..6f9934ad
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/UnaryIntegerOperatorKind.java
@@ -0,0 +1,216 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ *
+ * A representation of the literals of the enumeration 'Unary Integer Operator Kind ',
+ * and utility methods for working with them.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUnaryIntegerOperatorKind()
+ * @model
+ * @generated
+ */
+public enum UnaryIntegerOperatorKind implements Enumerator {
+ /**
+ * The 'Minus ' literal object.
+ *
+ *
+ * @see #MINUS_VALUE
+ * @generated
+ * @ordered
+ */
+ MINUS(0, "minus", "minus"),
+
+ /**
+ * The 'Square Root ' literal object.
+ *
+ *
+ * @see #SQUARE_ROOT_VALUE
+ * @generated
+ * @ordered
+ */
+ SQUARE_ROOT(1, "squareRoot", "squareRoot");
+
+ /**
+ * The 'Minus ' literal value.
+ *
+ *
+ * If the meaning of 'Minus ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #MINUS
+ * @model name="minus"
+ * @generated
+ * @ordered
+ */
+ public static final int MINUS_VALUE = 0;
+
+ /**
+ * The 'Square Root ' literal value.
+ *
+ *
+ * If the meaning of 'Square Root ' literal object isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @see #SQUARE_ROOT
+ * @model name="squareRoot"
+ * @generated
+ * @ordered
+ */
+ public static final int SQUARE_ROOT_VALUE = 1;
+
+ /**
+ * An array of all the 'Unary Integer Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ private static final UnaryIntegerOperatorKind[] VALUES_ARRAY =
+ new UnaryIntegerOperatorKind[] {
+ MINUS,
+ SQUARE_ROOT,
+ };
+
+ /**
+ * A public read-only list of all the 'Unary Integer Operator Kind ' enumerators.
+ *
+ *
+ * @generated
+ */
+ public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the 'Unary Integer Operator Kind ' literal with the specified literal value.
+ *
+ *
+ * @generated
+ */
+ public static UnaryIntegerOperatorKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ UnaryIntegerOperatorKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Unary Integer Operator Kind ' literal with the specified name.
+ *
+ *
+ * @generated
+ */
+ public static UnaryIntegerOperatorKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ UnaryIntegerOperatorKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the 'Unary Integer Operator Kind ' literal with the specified integer value.
+ *
+ *
+ * @generated
+ */
+ public static UnaryIntegerOperatorKind get(int value) {
+ switch (value) {
+ case MINUS_VALUE: return MINUS;
+ case SQUARE_ROOT_VALUE: return SQUARE_ROOT;
+ }
+ return null;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final int value;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String name;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ *
+ *
+ * @generated
+ */
+ private UnaryIntegerOperatorKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} //UnaryIntegerOperatorKind
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Utilities.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Utilities.java
new file mode 100644
index 00000000..879e40f2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Utilities.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Utilities '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getUtilities()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Utilities extends Instruction {
+} // Utilities
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Variable.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Variable.java
new file mode 100644
index 00000000..c0d259bc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/Variable.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Variable '.
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariable()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Variable extends Expression, NamedElement {
+} // Variable
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableAssignment.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableAssignment.java
new file mode 100644
index 00000000..f94ffc9f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableAssignment.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Variable Assignment '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.VariableAssignment#getVariable Variable }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariableAssignment()
+ * @model
+ * @generated
+ */
+public interface VariableAssignment extends Instruction, Assignment {
+ /**
+ * Returns the value of the 'Variable ' reference.
+ *
+ *
+ * If the meaning of the 'Variable ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Variable ' reference.
+ * @see #setVariable(Variable)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariableAssignment_Variable()
+ * @model required="true"
+ * @generated
+ */
+ Variable getVariable();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.VariableAssignment#getVariable Variable }' reference.
+ *
+ *
+ * @param value the new value of the 'Variable ' reference.
+ * @see #getVariable()
+ * @generated
+ */
+ void setVariable(Variable value);
+
+} // VariableAssignment
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableDeclaration.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableDeclaration.java
new file mode 100644
index 00000000..d30ef383
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableDeclaration.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Variable Declaration '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.VariableDeclaration#getVariable Variable }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariableDeclaration()
+ * @model
+ * @generated
+ */
+public interface VariableDeclaration extends Instruction {
+ /**
+ * Returns the value of the 'Variable ' containment reference.
+ *
+ *
+ * If the meaning of the 'Variable ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Variable ' containment reference.
+ * @see #setVariable(Variable)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariableDeclaration_Variable()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ Variable getVariable();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.VariableDeclaration#getVariable Variable }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Variable ' containment reference.
+ * @see #getVariable()
+ * @generated
+ */
+ void setVariable(Variable value);
+
+} // VariableDeclaration
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableRef.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableRef.java
new file mode 100644
index 00000000..3076cfae
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/VariableRef.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Variable Ref '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.VariableRef#getVariable Variable }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariableRef()
+ * @model
+ * @generated
+ */
+public interface VariableRef extends Expression {
+ /**
+ * Returns the value of the 'Variable ' reference.
+ *
+ *
+ * If the meaning of the 'Variable ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Variable ' reference.
+ * @see #setVariable(Variable)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getVariableRef_Variable()
+ * @model required="true"
+ * @generated
+ */
+ Variable getVariable();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.VariableRef#getVariable Variable }' reference.
+ *
+ *
+ * @param value the new value of the 'Variable ' reference.
+ * @see #getVariable()
+ * @generated
+ */
+ void setVariable(Variable value);
+
+} // VariableRef
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/While.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/While.java
new file mode 100644
index 00000000..41325bd7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/While.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'While '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link fr.obeo.dsl.arduino.While#getCondition Condition }
+ *
+ *
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getWhile()
+ * @model
+ * @generated
+ */
+public interface While extends Control {
+ /**
+ * Returns the value of the 'Condition ' containment reference.
+ *
+ *
+ * If the meaning of the 'Condition ' containment reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Condition ' containment reference.
+ * @see #setCondition(BooleanExpression)
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#getWhile_Condition()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ BooleanExpression getCondition();
+
+ /**
+ * Sets the value of the '{@link fr.obeo.dsl.arduino.While#getCondition Condition }' containment reference.
+ *
+ *
+ * @param value the new value of the 'Condition ' containment reference.
+ * @see #getCondition()
+ * @generated
+ */
+ void setCondition(BooleanExpression value);
+
+} // While
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AmbientLightSensorImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AmbientLightSensorImpl.java
new file mode 100644
index 00000000..a2342969
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AmbientLightSensorImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.AmbientLightSensor;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Ambient Light Sensor '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class AmbientLightSensorImpl extends ArduinoAnalogModuleImpl implements AmbientLightSensor {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected AmbientLightSensorImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.AMBIENT_LIGHT_SENSOR;
+ }
+
+} //AmbientLightSensorImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AnalogPinImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AnalogPinImpl.java
new file mode 100644
index 00000000..2f763a1d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AnalogPinImpl.java
@@ -0,0 +1,185 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Analog Pin '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.AnalogPinImpl#getModule Module }
+ *
+ *
+ *
+ * @generated
+ */
+public class AnalogPinImpl extends PinImpl implements AnalogPin {
+ /**
+ * The cached value of the '{@link #getModule() Module }' containment reference.
+ *
+ *
+ * @see #getModule()
+ * @generated
+ * @ordered
+ */
+ protected ArduinoAnalogModule module;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected AnalogPinImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ANALOG_PIN;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoAnalogModule getModule() {
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetModule(ArduinoAnalogModule newModule, NotificationChain msgs) {
+ ArduinoAnalogModule oldModule = module;
+ module = newModule;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.ANALOG_PIN__MODULE, oldModule, newModule);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setModule(ArduinoAnalogModule newModule) {
+ if (newModule != module) {
+ NotificationChain msgs = null;
+ if (module != null)
+ msgs = ((InternalEObject)module).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.ANALOG_PIN__MODULE, null, msgs);
+ if (newModule != null)
+ msgs = ((InternalEObject)newModule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.ANALOG_PIN__MODULE, null, msgs);
+ msgs = basicSetModule(newModule, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.ANALOG_PIN__MODULE, newModule, newModule));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.ANALOG_PIN__MODULE:
+ return basicSetModule(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.ANALOG_PIN__MODULE:
+ return getModule();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.ANALOG_PIN__MODULE:
+ setModule((ArduinoAnalogModule)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ANALOG_PIN__MODULE:
+ setModule((ArduinoAnalogModule)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ANALOG_PIN__MODULE:
+ return module != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //AnalogPinImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoAnalogModuleImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoAnalogModuleImpl.java
new file mode 100644
index 00000000..92055294
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoAnalogModuleImpl.java
@@ -0,0 +1,53 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Analog Module '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ArduinoAnalogModuleImpl extends ArduinoModuleImpl implements ArduinoAnalogModule {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ArduinoAnalogModuleImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ARDUINO_ANALOG_MODULE;
+ }
+
+} //ArduinoAnalogModuleImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoBoardImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoBoardImpl.java
new file mode 100644
index 00000000..f944ec66
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoBoardImpl.java
@@ -0,0 +1,196 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.DigitalPin;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Board '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ArduinoBoardImpl#getDigitalPins Digital Pins }
+ * {@link fr.obeo.dsl.arduino.impl.ArduinoBoardImpl#getAnalogPins Analog Pins }
+ *
+ *
+ *
+ * @generated
+ */
+public class ArduinoBoardImpl extends BoardImpl implements ArduinoBoard {
+ /**
+ * The cached value of the '{@link #getDigitalPins() Digital Pins }' containment reference list.
+ *
+ *
+ * @see #getDigitalPins()
+ * @generated
+ * @ordered
+ */
+ protected EList digitalPins;
+
+ /**
+ * The cached value of the '{@link #getAnalogPins() Analog Pins }' containment reference list.
+ *
+ *
+ * @see #getAnalogPins()
+ * @generated
+ * @ordered
+ */
+ protected EList analogPins;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ArduinoBoardImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ARDUINO_BOARD;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getDigitalPins() {
+ if (digitalPins == null) {
+ digitalPins = new EObjectContainmentEList(DigitalPin.class, this, ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS);
+ }
+ return digitalPins;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getAnalogPins() {
+ if (analogPins == null) {
+ analogPins = new EObjectContainmentEList(AnalogPin.class, this, ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS);
+ }
+ return analogPins;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS:
+ return ((InternalEList>)getDigitalPins()).basicRemove(otherEnd, msgs);
+ case ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS:
+ return ((InternalEList>)getAnalogPins()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS:
+ return getDigitalPins();
+ case ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS:
+ return getAnalogPins();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS:
+ getDigitalPins().clear();
+ getDigitalPins().addAll((Collection extends DigitalPin>)newValue);
+ return;
+ case ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS:
+ getAnalogPins().clear();
+ getAnalogPins().addAll((Collection extends AnalogPin>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS:
+ getDigitalPins().clear();
+ return;
+ case ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS:
+ getAnalogPins().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_BOARD__DIGITAL_PINS:
+ return digitalPins != null && !digitalPins.isEmpty();
+ case ArduinoPackage.ARDUINO_BOARD__ANALOG_PINS:
+ return analogPins != null && !analogPins.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //ArduinoBoardImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoDigitalModuleImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoDigitalModuleImpl.java
new file mode 100644
index 00000000..c1cbd1ab
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoDigitalModuleImpl.java
@@ -0,0 +1,53 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import fr.obeo.dsl.arduino.DigitalPin;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Digital Module '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ArduinoDigitalModuleImpl extends ArduinoModuleImpl implements ArduinoDigitalModule {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ArduinoDigitalModuleImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ARDUINO_DIGITAL_MODULE;
+ }
+
+} //ArduinoDigitalModuleImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoFactoryImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoFactoryImpl.java
new file mode 100644
index 00000000..fe725b3f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoFactoryImpl.java
@@ -0,0 +1,704 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.AbstractInstructionBlock;
+import fr.obeo.dsl.arduino.AmbientLightSensor;
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.BooleanConstant;
+import fr.obeo.dsl.arduino.BooleanModuleGet;
+import fr.obeo.dsl.arduino.BooleanVariable;
+import fr.obeo.dsl.arduino.Buzzer;
+import fr.obeo.dsl.arduino.Channel;
+import fr.obeo.dsl.arduino.Delay;
+import fr.obeo.dsl.arduino.DigitalPin;
+import fr.obeo.dsl.arduino.Fan;
+import fr.obeo.dsl.arduino.If;
+import fr.obeo.dsl.arduino.InfraRedSensor;
+import fr.obeo.dsl.arduino.InstructionBlock;
+import fr.obeo.dsl.arduino.IntegerConstant;
+import fr.obeo.dsl.arduino.IntegerModuleGet;
+import fr.obeo.dsl.arduino.IntegerVariable;
+import fr.obeo.dsl.arduino.LED;
+import fr.obeo.dsl.arduino.Link;
+import fr.obeo.dsl.arduino.MicroServo;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+import fr.obeo.dsl.arduino.MusicPlayer;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.PushButton;
+import fr.obeo.dsl.arduino.Repeat;
+import fr.obeo.dsl.arduino.RotationSensor;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.SoundSensor;
+import fr.obeo.dsl.arduino.Synchonization;
+import fr.obeo.dsl.arduino.Synchronization;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+import fr.obeo.dsl.arduino.Time;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.VariableAssignment;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+import fr.obeo.dsl.arduino.VariableRef;
+import fr.obeo.dsl.arduino.While;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ *
+ * An implementation of the model Factory .
+ *
+ * @generated
+ */
+public class ArduinoFactoryImpl extends EFactoryImpl implements ArduinoFactory {
+ /**
+ * Creates the default factory implementation.
+ *
+ *
+ * @generated
+ */
+ public static ArduinoFactory init() {
+ try {
+ ArduinoFactory theArduinoFactory = (ArduinoFactory)EPackage.Registry.INSTANCE.getEFactory(ArduinoPackage.eNS_URI);
+ if (theArduinoFactory != null) {
+ return theArduinoFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ArduinoFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ *
+ *
+ * @generated
+ */
+ public ArduinoFactoryImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ArduinoPackage.DIGITAL_PIN: return createDigitalPin();
+ case ArduinoPackage.ANALOG_PIN: return createAnalogPin();
+ case ArduinoPackage.SKETCH: return createSketch();
+ case ArduinoPackage.PROJECT: return createProject();
+ case ArduinoPackage.MODULE_ASSIGNMENT: return createModuleAssignment();
+ case ArduinoPackage.DELAY: return createDelay();
+ case ArduinoPackage.REPEAT: return createRepeat();
+ case ArduinoPackage.WHILE: return createWhile();
+ case ArduinoPackage.VARIABLE_ASSIGNMENT: return createVariableAssignment();
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION: return createBinaryIntegerExpression();
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION: return createBinaryBooleanExpression();
+ case ArduinoPackage.IF: return createIf();
+ case ArduinoPackage.INTEGER_CONSTANT: return createIntegerConstant();
+ case ArduinoPackage.BOOLEAN_CONSTANT: return createBooleanConstant();
+ case ArduinoPackage.INTEGER_VARIABLE: return createIntegerVariable();
+ case ArduinoPackage.BOOLEAN_VARIABLE: return createBooleanVariable();
+ case ArduinoPackage.BOOLEAN_MODULE_GET: return createBooleanModuleGet();
+ case ArduinoPackage.INTEGER_MODULE_GET: return createIntegerModuleGet();
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION: return createUnaryBooleanExpression();
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION: return createUnaryIntegerExpression();
+ case ArduinoPackage.VARIABLE_DECLARATION: return createVariableDeclaration();
+ case ArduinoPackage.VARIABLE_REF: return createVariableRef();
+ case ArduinoPackage.LED: return createLED();
+ case ArduinoPackage.PUSH_BUTTON: return createPushButton();
+ case ArduinoPackage.BUZZER: return createBuzzer();
+ case ArduinoPackage.ROTATION_SENSOR: return createRotationSensor();
+ case ArduinoPackage.MICRO_SERVO: return createMicroServo();
+ case ArduinoPackage.INFRA_RED_SENSOR: return createInfraRedSensor();
+ case ArduinoPackage.AMBIENT_LIGHT_SENSOR: return createAmbientLightSensor();
+ case ArduinoPackage.SOUND_SENSOR: return createSoundSensor();
+ case ArduinoPackage.FAN: return createFan();
+ case ArduinoPackage.MUSIC_PLAYER: return createMusicPlayer();
+ case ArduinoPackage.ARDUINO_BOARD: return createArduinoBoard();
+ case ArduinoPackage.THREAD: return createThread();
+ case ArduinoPackage.CHANNEL: return createChannel();
+ case ArduinoPackage.LINK: return createLink();
+ case ArduinoPackage.SYNCHRONIZATION_BLOCK: return createSynchronizationBlock();
+ case ArduinoPackage.INSTRUCTION_BLOCK: return createInstructionBlock();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object createFromString(EDataType eDataType, String initialValue) {
+ switch (eDataType.getClassifierID()) {
+ case ArduinoPackage.TIME:
+ return createTimeFromString(eDataType, initialValue);
+ case ArduinoPackage.BINARY_INTEGER_OPERATOR_KIND:
+ return createBinaryIntegerOperatorKindFromString(eDataType, initialValue);
+ case ArduinoPackage.BINARY_BOOLEAN_OPERATOR_KIND:
+ return createBinaryBooleanOperatorKindFromString(eDataType, initialValue);
+ case ArduinoPackage.UNARY_INTEGER_OPERATOR_KIND:
+ return createUnaryIntegerOperatorKindFromString(eDataType, initialValue);
+ case ArduinoPackage.UNARY_BOOLEAN_OPERATOR_KIND:
+ return createUnaryBooleanOperatorKindFromString(eDataType, initialValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String convertToString(EDataType eDataType, Object instanceValue) {
+ switch (eDataType.getClassifierID()) {
+ case ArduinoPackage.TIME:
+ return convertTimeToString(eDataType, instanceValue);
+ case ArduinoPackage.BINARY_INTEGER_OPERATOR_KIND:
+ return convertBinaryIntegerOperatorKindToString(eDataType, instanceValue);
+ case ArduinoPackage.BINARY_BOOLEAN_OPERATOR_KIND:
+ return convertBinaryBooleanOperatorKindToString(eDataType, instanceValue);
+ case ArduinoPackage.UNARY_INTEGER_OPERATOR_KIND:
+ return convertUnaryIntegerOperatorKindToString(eDataType, instanceValue);
+ case ArduinoPackage.UNARY_BOOLEAN_OPERATOR_KIND:
+ return convertUnaryBooleanOperatorKindToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public DigitalPin createDigitalPin() {
+ DigitalPinImpl digitalPin = new DigitalPinImpl();
+ return digitalPin;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public AnalogPin createAnalogPin() {
+ AnalogPinImpl analogPin = new AnalogPinImpl();
+ return analogPin;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Sketch createSketch() {
+ SketchImpl sketch = new SketchImpl();
+ return sketch;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Project createProject() {
+ ProjectImpl project = new ProjectImpl();
+ return project;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ModuleAssignment createModuleAssignment() {
+ ModuleAssignmentImpl moduleAssignment = new ModuleAssignmentImpl();
+ return moduleAssignment;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Delay createDelay() {
+ DelayImpl delay = new DelayImpl();
+ return delay;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Repeat createRepeat() {
+ RepeatImpl repeat = new RepeatImpl();
+ return repeat;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public While createWhile() {
+ WhileImpl while_ = new WhileImpl();
+ return while_;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public VariableAssignment createVariableAssignment() {
+ VariableAssignmentImpl variableAssignment = new VariableAssignmentImpl();
+ return variableAssignment;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BinaryIntegerExpression createBinaryIntegerExpression() {
+ BinaryIntegerExpressionImpl binaryIntegerExpression = new BinaryIntegerExpressionImpl();
+ return binaryIntegerExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BinaryBooleanExpression createBinaryBooleanExpression() {
+ BinaryBooleanExpressionImpl binaryBooleanExpression = new BinaryBooleanExpressionImpl();
+ return binaryBooleanExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public If createIf() {
+ IfImpl if_ = new IfImpl();
+ return if_;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IntegerConstant createIntegerConstant() {
+ IntegerConstantImpl integerConstant = new IntegerConstantImpl();
+ return integerConstant;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanConstant createBooleanConstant() {
+ BooleanConstantImpl booleanConstant = new BooleanConstantImpl();
+ return booleanConstant;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IntegerVariable createIntegerVariable() {
+ IntegerVariableImpl integerVariable = new IntegerVariableImpl();
+ return integerVariable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanVariable createBooleanVariable() {
+ BooleanVariableImpl booleanVariable = new BooleanVariableImpl();
+ return booleanVariable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanModuleGet createBooleanModuleGet() {
+ BooleanModuleGetImpl booleanModuleGet = new BooleanModuleGetImpl();
+ return booleanModuleGet;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IntegerModuleGet createIntegerModuleGet() {
+ IntegerModuleGetImpl integerModuleGet = new IntegerModuleGetImpl();
+ return integerModuleGet;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public UnaryBooleanExpression createUnaryBooleanExpression() {
+ UnaryBooleanExpressionImpl unaryBooleanExpression = new UnaryBooleanExpressionImpl();
+ return unaryBooleanExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public UnaryIntegerExpression createUnaryIntegerExpression() {
+ UnaryIntegerExpressionImpl unaryIntegerExpression = new UnaryIntegerExpressionImpl();
+ return unaryIntegerExpression;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public VariableDeclaration createVariableDeclaration() {
+ VariableDeclarationImpl variableDeclaration = new VariableDeclarationImpl();
+ return variableDeclaration;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public VariableRef createVariableRef() {
+ VariableRefImpl variableRef = new VariableRefImpl();
+ return variableRef;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LED createLED() {
+ LEDImpl led = new LEDImpl();
+ return led;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public PushButton createPushButton() {
+ PushButtonImpl pushButton = new PushButtonImpl();
+ return pushButton;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Buzzer createBuzzer() {
+ BuzzerImpl buzzer = new BuzzerImpl();
+ return buzzer;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public RotationSensor createRotationSensor() {
+ RotationSensorImpl rotationSensor = new RotationSensorImpl();
+ return rotationSensor;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MicroServo createMicroServo() {
+ MicroServoImpl microServo = new MicroServoImpl();
+ return microServo;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public InfraRedSensor createInfraRedSensor() {
+ InfraRedSensorImpl infraRedSensor = new InfraRedSensorImpl();
+ return infraRedSensor;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public AmbientLightSensor createAmbientLightSensor() {
+ AmbientLightSensorImpl ambientLightSensor = new AmbientLightSensorImpl();
+ return ambientLightSensor;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public SoundSensor createSoundSensor() {
+ SoundSensorImpl soundSensor = new SoundSensorImpl();
+ return soundSensor;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Fan createFan() {
+ FanImpl fan = new FanImpl();
+ return fan;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MusicPlayer createMusicPlayer() {
+ MusicPlayerImpl musicPlayer = new MusicPlayerImpl();
+ return musicPlayer;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoBoard createArduinoBoard() {
+ ArduinoBoardImpl arduinoBoard = new ArduinoBoardImpl();
+ return arduinoBoard;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread createThread() {
+ ThreadImpl thread = new ThreadImpl();
+ return thread;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Channel createChannel() {
+ ChannelImpl channel = new ChannelImpl();
+ return channel;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Link createLink() {
+ LinkImpl link = new LinkImpl();
+ return link;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public SynchronizationBlock createSynchronizationBlock() {
+ SynchronizationBlockImpl synchronizationBlock = new SynchronizationBlockImpl();
+ return synchronizationBlock;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public InstructionBlock createInstructionBlock() {
+ InstructionBlockImpl instructionBlock = new InstructionBlockImpl();
+ return instructionBlock;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Time createTimeFromString(EDataType eDataType, String initialValue) {
+ Time result = Time.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertTimeToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BinaryIntegerOperatorKind createBinaryIntegerOperatorKindFromString(EDataType eDataType, String initialValue) {
+ BinaryIntegerOperatorKind result = BinaryIntegerOperatorKind.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertBinaryIntegerOperatorKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BinaryBooleanOperatorKind createBinaryBooleanOperatorKindFromString(EDataType eDataType, String initialValue) {
+ BinaryBooleanOperatorKind result = BinaryBooleanOperatorKind.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertBinaryBooleanOperatorKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public UnaryIntegerOperatorKind createUnaryIntegerOperatorKindFromString(EDataType eDataType, String initialValue) {
+ UnaryIntegerOperatorKind result = UnaryIntegerOperatorKind.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertUnaryIntegerOperatorKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public UnaryBooleanOperatorKind createUnaryBooleanOperatorKindFromString(EDataType eDataType, String initialValue) {
+ UnaryBooleanOperatorKind result = UnaryBooleanOperatorKind.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String convertUnaryBooleanOperatorKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoPackage getArduinoPackage() {
+ return (ArduinoPackage)getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ArduinoPackage getPackage() {
+ return ArduinoPackage.eINSTANCE;
+ }
+
+} //ArduinoFactoryImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoModuleImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoModuleImpl.java
new file mode 100644
index 00000000..02152f84
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoModuleImpl.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Module '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ArduinoModuleImpl#isLevel Level }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ArduinoModuleImpl extends NamedElementImpl implements ArduinoModule {
+ /**
+ * The default value of the '{@link #isLevel() Level }' attribute.
+ *
+ *
+ * @see #isLevel()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean LEVEL_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isLevel() Level }' attribute.
+ *
+ *
+ * @see #isLevel()
+ * @generated
+ * @ordered
+ */
+ protected boolean level = LEVEL_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ArduinoModuleImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ARDUINO_MODULE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public boolean isLevel() {
+ return level;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLevel(boolean newLevel) {
+ boolean oldLevel = level;
+ level = newLevel;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.ARDUINO_MODULE__LEVEL, oldLevel, level));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_MODULE__LEVEL:
+ return isLevel();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_MODULE__LEVEL:
+ setLevel((Boolean)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_MODULE__LEVEL:
+ setLevel(LEVEL_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ARDUINO_MODULE__LEVEL:
+ return level != LEVEL_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (level: ");
+ result.append(level);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ArduinoModuleImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoPackageImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoPackageImpl.java
new file mode 100644
index 00000000..7430da55
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ArduinoPackageImpl.java
@@ -0,0 +1,2292 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.AbstractInstructionBlock;
+import fr.obeo.dsl.arduino.AmbientLightSensor;
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.ArduinoFactory;
+import fr.obeo.dsl.arduino.ArduinoModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.BinaryExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.BooleanConstant;
+import fr.obeo.dsl.arduino.BooleanExpression;
+import fr.obeo.dsl.arduino.BooleanModuleGet;
+import fr.obeo.dsl.arduino.BooleanVariable;
+import fr.obeo.dsl.arduino.Buzzer;
+import fr.obeo.dsl.arduino.Channel;
+import fr.obeo.dsl.arduino.Constant;
+import fr.obeo.dsl.arduino.Control;
+import fr.obeo.dsl.arduino.Delay;
+import fr.obeo.dsl.arduino.DigitalPin;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.Fan;
+import fr.obeo.dsl.arduino.If;
+import fr.obeo.dsl.arduino.InfraRedSensor;
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.InstructionBlock;
+import fr.obeo.dsl.arduino.IntegerConstant;
+import fr.obeo.dsl.arduino.IntegerExpression;
+import fr.obeo.dsl.arduino.IntegerModuleGet;
+import fr.obeo.dsl.arduino.IntegerVariable;
+import fr.obeo.dsl.arduino.Link;
+import fr.obeo.dsl.arduino.MicroServo;
+import fr.obeo.dsl.arduino.Module;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+import fr.obeo.dsl.arduino.ModuleGet;
+import fr.obeo.dsl.arduino.ModuleInstruction;
+import fr.obeo.dsl.arduino.MusicPlayer;
+import fr.obeo.dsl.arduino.NamedElement;
+import fr.obeo.dsl.arduino.Pin;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.PushButton;
+import fr.obeo.dsl.arduino.Repeat;
+import fr.obeo.dsl.arduino.RotationSensor;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.SoundSensor;
+import fr.obeo.dsl.arduino.Synchonization;
+import fr.obeo.dsl.arduino.Synchronization;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+import fr.obeo.dsl.arduino.ThreadInstructionBlock;
+import fr.obeo.dsl.arduino.Time;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryBooleanOperatorKind;
+import fr.obeo.dsl.arduino.UnaryExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerOperatorKind;
+import fr.obeo.dsl.arduino.Utilities;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableAssignment;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+import fr.obeo.dsl.arduino.VariableRef;
+import fr.obeo.dsl.arduino.While;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ *
+ * An implementation of the model Package .
+ *
+ * @generated
+ */
+public class ArduinoPackageImpl extends EPackageImpl implements ArduinoPackage {
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass boardEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass moduleEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass digitalPinEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass pinEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass analogPinEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass sketchEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass projectEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass instructionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass moduleAssignmentEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass moduleInstructionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass controlEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass utilitiesEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass delayEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass namedElementEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass repeatEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass moduleGetEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass whileEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass binaryExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass variableEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass variableAssignmentEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass binaryIntegerExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass binaryBooleanExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass expressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass constantEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass ifEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass integerConstantEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass booleanConstantEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass booleanExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass integerExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass assignmentEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass integerVariableEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass booleanVariableEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass booleanModuleGetEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass integerModuleGetEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass unaryExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass unaryBooleanExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass unaryIntegerExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass variableDeclarationEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass variableRefEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass ledEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass pushButtonEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass buzzerEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass rotationSensorEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass microServoEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass infraRedSensorEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass ambientLightSensorEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass soundSensorEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass fanEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass musicPlayerEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduinoModuleEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduinoBoardEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduinoDigitalModuleEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduinoAnalogModuleEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass threadEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass channelEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass linkEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass synchronizationBlockEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass instructionBlockEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass threadInstructionBlockEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum timeEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum binaryIntegerOperatorKindEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum binaryBooleanOperatorKindEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum unaryIntegerOperatorKindEEnum = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EEnum unaryBooleanOperatorKindEEnum = null;
+
+ /**
+ * Creates an instance of the model Package , registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ *
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see fr.obeo.dsl.arduino.ArduinoPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ArduinoPackageImpl() {
+ super(eNS_URI, ArduinoFactory.eINSTANCE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
This method is used to initialize {@link ArduinoPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ArduinoPackage init() {
+ if (isInited) return (ArduinoPackage)EPackage.Registry.INSTANCE.getEPackage(ArduinoPackage.eNS_URI);
+
+ // Obtain or create and register package
+ ArduinoPackageImpl theArduinoPackage = (ArduinoPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ArduinoPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ArduinoPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theArduinoPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theArduinoPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theArduinoPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ArduinoPackage.eNS_URI, theArduinoPackage);
+ return theArduinoPackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBoard() {
+ return boardEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getBoard_Project() {
+ return (EReference)boardEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getBoard_Threads() {
+ return (EReference)boardEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getModule() {
+ return moduleEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getModule_Level() {
+ return (EAttribute)moduleEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getDigitalPin() {
+ return digitalPinEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getDigitalPin_Module() {
+ return (EReference)digitalPinEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getPin() {
+ return pinEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getPin_Id() {
+ return (EAttribute)pinEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getPin_Level() {
+ return (EAttribute)pinEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getAnalogPin() {
+ return analogPinEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getAnalogPin_Module() {
+ return (EReference)analogPinEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getSketch() {
+ return sketchEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getSketch_Project() {
+ return (EReference)sketchEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getSketch_Threads() {
+ return (EReference)sketchEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getSketch_Channels() {
+ return (EReference)sketchEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getProject() {
+ return projectEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getProject_Boards() {
+ return (EReference)projectEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getProject_Sketch() {
+ return (EReference)projectEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getProject_Links() {
+ return (EReference)projectEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getInstruction() {
+ return instructionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getInstruction_OwnedBlock() {
+ return (EReference)instructionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getModuleAssignment() {
+ return moduleAssignmentEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getModuleInstruction() {
+ return moduleInstructionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getModuleInstruction_Module() {
+ return (EReference)moduleInstructionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getControl() {
+ return controlEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getControl_Block() {
+ return (EReference)controlEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getUtilities() {
+ return utilitiesEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getDelay() {
+ return delayEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getDelay_Unit() {
+ return (EAttribute)delayEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getDelay_Value() {
+ return (EAttribute)delayEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getNamedElement() {
+ return namedElementEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getNamedElement_Name() {
+ return (EAttribute)namedElementEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getRepeat() {
+ return repeatEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getRepeat_Iteration() {
+ return (EAttribute)repeatEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getModuleGet() {
+ return moduleGetEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getModuleGet_Module() {
+ return (EReference)moduleGetEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getWhile() {
+ return whileEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getWhile_Condition() {
+ return (EReference)whileEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBinaryExpression() {
+ return binaryExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getBinaryExpression_Left() {
+ return (EReference)binaryExpressionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getBinaryExpression_Right() {
+ return (EReference)binaryExpressionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getVariable() {
+ return variableEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getVariableAssignment() {
+ return variableAssignmentEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getVariableAssignment_Variable() {
+ return (EReference)variableAssignmentEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBinaryIntegerExpression() {
+ return binaryIntegerExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getBinaryIntegerExpression_Operator() {
+ return (EAttribute)binaryIntegerExpressionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBinaryBooleanExpression() {
+ return binaryBooleanExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getBinaryBooleanExpression_Operator() {
+ return (EAttribute)binaryBooleanExpressionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getExpression() {
+ return expressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getConstant() {
+ return constantEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getIf() {
+ return ifEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getIf_Condition() {
+ return (EReference)ifEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getIf_ElseBlock() {
+ return (EReference)ifEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getIntegerConstant() {
+ return integerConstantEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getIntegerConstant_Value() {
+ return (EAttribute)integerConstantEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBooleanConstant() {
+ return booleanConstantEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getBooleanConstant_Value() {
+ return (EAttribute)booleanConstantEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBooleanExpression() {
+ return booleanExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getIntegerExpression() {
+ return integerExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getAssignment() {
+ return assignmentEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getAssignment_Operand() {
+ return (EReference)assignmentEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getIntegerVariable() {
+ return integerVariableEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getIntegerVariable_InitialValue() {
+ return (EAttribute)integerVariableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getIntegerVariable_Value() {
+ return (EAttribute)integerVariableEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBooleanVariable() {
+ return booleanVariableEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getBooleanVariable_InitialValue() {
+ return (EAttribute)booleanVariableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getBooleanVariable_Value() {
+ return (EAttribute)booleanVariableEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBooleanModuleGet() {
+ return booleanModuleGetEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getIntegerModuleGet() {
+ return integerModuleGetEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getUnaryExpression() {
+ return unaryExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getUnaryExpression_Operand() {
+ return (EReference)unaryExpressionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getUnaryBooleanExpression() {
+ return unaryBooleanExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getUnaryBooleanExpression_Operator() {
+ return (EAttribute)unaryBooleanExpressionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getUnaryIntegerExpression() {
+ return unaryIntegerExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getUnaryIntegerExpression_Operator() {
+ return (EAttribute)unaryIntegerExpressionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getVariableDeclaration() {
+ return variableDeclarationEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getVariableDeclaration_Variable() {
+ return (EReference)variableDeclarationEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getVariableRef() {
+ return variableRefEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getVariableRef_Variable() {
+ return (EReference)variableRefEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getLED() {
+ return ledEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getPushButton() {
+ return pushButtonEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBuzzer() {
+ return buzzerEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getRotationSensor() {
+ return rotationSensorEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getMicroServo() {
+ return microServoEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getInfraRedSensor() {
+ return infraRedSensorEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getAmbientLightSensor() {
+ return ambientLightSensorEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getSoundSensor() {
+ return soundSensorEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getFan() {
+ return fanEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getMusicPlayer() {
+ return musicPlayerEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduinoModule() {
+ return arduinoModuleEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduinoBoard() {
+ return arduinoBoardEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduinoBoard_DigitalPins() {
+ return (EReference)arduinoBoardEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduinoBoard_AnalogPins() {
+ return (EReference)arduinoBoardEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduinoDigitalModule() {
+ return arduinoDigitalModuleEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduinoAnalogModule() {
+ return arduinoAnalogModuleEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getThread() {
+ return threadEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThread_Blocks() {
+ return (EReference)threadEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThread_Channels() {
+ return (EReference)threadEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThread_CurrentInstruction() {
+ return (EReference)threadEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThread_First() {
+ return (EReference)threadEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThread_Last() {
+ return (EReference)threadEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getThread_NbCycle() {
+ return (EAttribute)threadEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getChannel() {
+ return channelEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getChannel_Source() {
+ return (EReference)channelEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getChannel_Target() {
+ return (EReference)channelEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getChannel_InRate() {
+ return (EAttribute)channelEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getChannel_OutRate() {
+ return (EAttribute)channelEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getChannel_Capacity() {
+ return (EAttribute)channelEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getChannel_CurrentSize() {
+ return (EAttribute)channelEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getLink() {
+ return linkEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getLink_InBoard() {
+ return (EReference)linkEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getLink_OutBoard() {
+ return (EReference)linkEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getLink_Channels() {
+ return (EReference)linkEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getSynchronizationBlock() {
+ return synchronizationBlockEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getInstructionBlock() {
+ return instructionBlockEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getInstructionBlock_Instructions() {
+ return (EReference)instructionBlockEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getThreadInstructionBlock() {
+ return threadInstructionBlockEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThreadInstructionBlock_Thread() {
+ return (EReference)threadInstructionBlockEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getThreadInstructionBlock_Next() {
+ return (EReference)threadInstructionBlockEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EEnum getTime() {
+ return timeEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EEnum getBinaryIntegerOperatorKind() {
+ return binaryIntegerOperatorKindEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EEnum getBinaryBooleanOperatorKind() {
+ return binaryBooleanOperatorKindEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EEnum getUnaryIntegerOperatorKind() {
+ return unaryIntegerOperatorKindEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EEnum getUnaryBooleanOperatorKind() {
+ return unaryBooleanOperatorKindEEnum;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoFactory getArduinoFactory() {
+ return (ArduinoFactory)getEFactoryInstance();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ boardEClass = createEClass(BOARD);
+ createEReference(boardEClass, BOARD__PROJECT);
+ createEReference(boardEClass, BOARD__THREADS);
+
+ moduleEClass = createEClass(MODULE);
+ createEAttribute(moduleEClass, MODULE__LEVEL);
+
+ digitalPinEClass = createEClass(DIGITAL_PIN);
+ createEReference(digitalPinEClass, DIGITAL_PIN__MODULE);
+
+ pinEClass = createEClass(PIN);
+ createEAttribute(pinEClass, PIN__ID);
+ createEAttribute(pinEClass, PIN__LEVEL);
+
+ analogPinEClass = createEClass(ANALOG_PIN);
+ createEReference(analogPinEClass, ANALOG_PIN__MODULE);
+
+ sketchEClass = createEClass(SKETCH);
+ createEReference(sketchEClass, SKETCH__PROJECT);
+ createEReference(sketchEClass, SKETCH__THREADS);
+ createEReference(sketchEClass, SKETCH__CHANNELS);
+
+ projectEClass = createEClass(PROJECT);
+ createEReference(projectEClass, PROJECT__BOARDS);
+ createEReference(projectEClass, PROJECT__SKETCH);
+ createEReference(projectEClass, PROJECT__LINKS);
+
+ instructionEClass = createEClass(INSTRUCTION);
+ createEReference(instructionEClass, INSTRUCTION__OWNED_BLOCK);
+
+ moduleAssignmentEClass = createEClass(MODULE_ASSIGNMENT);
+
+ moduleInstructionEClass = createEClass(MODULE_INSTRUCTION);
+ createEReference(moduleInstructionEClass, MODULE_INSTRUCTION__MODULE);
+
+ controlEClass = createEClass(CONTROL);
+ createEReference(controlEClass, CONTROL__BLOCK);
+
+ utilitiesEClass = createEClass(UTILITIES);
+
+ delayEClass = createEClass(DELAY);
+ createEAttribute(delayEClass, DELAY__UNIT);
+ createEAttribute(delayEClass, DELAY__VALUE);
+
+ namedElementEClass = createEClass(NAMED_ELEMENT);
+ createEAttribute(namedElementEClass, NAMED_ELEMENT__NAME);
+
+ repeatEClass = createEClass(REPEAT);
+ createEAttribute(repeatEClass, REPEAT__ITERATION);
+
+ moduleGetEClass = createEClass(MODULE_GET);
+ createEReference(moduleGetEClass, MODULE_GET__MODULE);
+
+ whileEClass = createEClass(WHILE);
+ createEReference(whileEClass, WHILE__CONDITION);
+
+ binaryExpressionEClass = createEClass(BINARY_EXPRESSION);
+ createEReference(binaryExpressionEClass, BINARY_EXPRESSION__LEFT);
+ createEReference(binaryExpressionEClass, BINARY_EXPRESSION__RIGHT);
+
+ variableEClass = createEClass(VARIABLE);
+
+ variableAssignmentEClass = createEClass(VARIABLE_ASSIGNMENT);
+ createEReference(variableAssignmentEClass, VARIABLE_ASSIGNMENT__VARIABLE);
+
+ binaryIntegerExpressionEClass = createEClass(BINARY_INTEGER_EXPRESSION);
+ createEAttribute(binaryIntegerExpressionEClass, BINARY_INTEGER_EXPRESSION__OPERATOR);
+
+ binaryBooleanExpressionEClass = createEClass(BINARY_BOOLEAN_EXPRESSION);
+ createEAttribute(binaryBooleanExpressionEClass, BINARY_BOOLEAN_EXPRESSION__OPERATOR);
+
+ expressionEClass = createEClass(EXPRESSION);
+
+ constantEClass = createEClass(CONSTANT);
+
+ ifEClass = createEClass(IF);
+ createEReference(ifEClass, IF__CONDITION);
+ createEReference(ifEClass, IF__ELSE_BLOCK);
+
+ integerConstantEClass = createEClass(INTEGER_CONSTANT);
+ createEAttribute(integerConstantEClass, INTEGER_CONSTANT__VALUE);
+
+ booleanConstantEClass = createEClass(BOOLEAN_CONSTANT);
+ createEAttribute(booleanConstantEClass, BOOLEAN_CONSTANT__VALUE);
+
+ booleanExpressionEClass = createEClass(BOOLEAN_EXPRESSION);
+
+ integerExpressionEClass = createEClass(INTEGER_EXPRESSION);
+
+ assignmentEClass = createEClass(ASSIGNMENT);
+ createEReference(assignmentEClass, ASSIGNMENT__OPERAND);
+
+ integerVariableEClass = createEClass(INTEGER_VARIABLE);
+ createEAttribute(integerVariableEClass, INTEGER_VARIABLE__INITIAL_VALUE);
+ createEAttribute(integerVariableEClass, INTEGER_VARIABLE__VALUE);
+
+ booleanVariableEClass = createEClass(BOOLEAN_VARIABLE);
+ createEAttribute(booleanVariableEClass, BOOLEAN_VARIABLE__INITIAL_VALUE);
+ createEAttribute(booleanVariableEClass, BOOLEAN_VARIABLE__VALUE);
+
+ booleanModuleGetEClass = createEClass(BOOLEAN_MODULE_GET);
+
+ integerModuleGetEClass = createEClass(INTEGER_MODULE_GET);
+
+ unaryExpressionEClass = createEClass(UNARY_EXPRESSION);
+ createEReference(unaryExpressionEClass, UNARY_EXPRESSION__OPERAND);
+
+ unaryBooleanExpressionEClass = createEClass(UNARY_BOOLEAN_EXPRESSION);
+ createEAttribute(unaryBooleanExpressionEClass, UNARY_BOOLEAN_EXPRESSION__OPERATOR);
+
+ unaryIntegerExpressionEClass = createEClass(UNARY_INTEGER_EXPRESSION);
+ createEAttribute(unaryIntegerExpressionEClass, UNARY_INTEGER_EXPRESSION__OPERATOR);
+
+ variableDeclarationEClass = createEClass(VARIABLE_DECLARATION);
+ createEReference(variableDeclarationEClass, VARIABLE_DECLARATION__VARIABLE);
+
+ variableRefEClass = createEClass(VARIABLE_REF);
+ createEReference(variableRefEClass, VARIABLE_REF__VARIABLE);
+
+ ledEClass = createEClass(LED);
+
+ pushButtonEClass = createEClass(PUSH_BUTTON);
+
+ buzzerEClass = createEClass(BUZZER);
+
+ rotationSensorEClass = createEClass(ROTATION_SENSOR);
+
+ microServoEClass = createEClass(MICRO_SERVO);
+
+ infraRedSensorEClass = createEClass(INFRA_RED_SENSOR);
+
+ ambientLightSensorEClass = createEClass(AMBIENT_LIGHT_SENSOR);
+
+ soundSensorEClass = createEClass(SOUND_SENSOR);
+
+ fanEClass = createEClass(FAN);
+
+ musicPlayerEClass = createEClass(MUSIC_PLAYER);
+
+ arduinoModuleEClass = createEClass(ARDUINO_MODULE);
+
+ arduinoBoardEClass = createEClass(ARDUINO_BOARD);
+ createEReference(arduinoBoardEClass, ARDUINO_BOARD__DIGITAL_PINS);
+ createEReference(arduinoBoardEClass, ARDUINO_BOARD__ANALOG_PINS);
+
+ arduinoDigitalModuleEClass = createEClass(ARDUINO_DIGITAL_MODULE);
+
+ arduinoAnalogModuleEClass = createEClass(ARDUINO_ANALOG_MODULE);
+
+ threadEClass = createEClass(THREAD);
+ createEReference(threadEClass, THREAD__BLOCKS);
+ createEReference(threadEClass, THREAD__CHANNELS);
+ createEReference(threadEClass, THREAD__CURRENT_INSTRUCTION);
+ createEReference(threadEClass, THREAD__FIRST);
+ createEReference(threadEClass, THREAD__LAST);
+ createEAttribute(threadEClass, THREAD__NB_CYCLE);
+
+ channelEClass = createEClass(CHANNEL);
+ createEReference(channelEClass, CHANNEL__SOURCE);
+ createEReference(channelEClass, CHANNEL__TARGET);
+ createEAttribute(channelEClass, CHANNEL__IN_RATE);
+ createEAttribute(channelEClass, CHANNEL__OUT_RATE);
+ createEAttribute(channelEClass, CHANNEL__CAPACITY);
+ createEAttribute(channelEClass, CHANNEL__CURRENT_SIZE);
+
+ linkEClass = createEClass(LINK);
+ createEReference(linkEClass, LINK__IN_BOARD);
+ createEReference(linkEClass, LINK__OUT_BOARD);
+ createEReference(linkEClass, LINK__CHANNELS);
+
+ synchronizationBlockEClass = createEClass(SYNCHRONIZATION_BLOCK);
+
+ instructionBlockEClass = createEClass(INSTRUCTION_BLOCK);
+ createEReference(instructionBlockEClass, INSTRUCTION_BLOCK__INSTRUCTIONS);
+
+ threadInstructionBlockEClass = createEClass(THREAD_INSTRUCTION_BLOCK);
+ createEReference(threadInstructionBlockEClass, THREAD_INSTRUCTION_BLOCK__THREAD);
+ createEReference(threadInstructionBlockEClass, THREAD_INSTRUCTION_BLOCK__NEXT);
+
+ // Create enums
+ timeEEnum = createEEnum(TIME);
+ binaryIntegerOperatorKindEEnum = createEEnum(BINARY_INTEGER_OPERATOR_KIND);
+ binaryBooleanOperatorKindEEnum = createEEnum(BINARY_BOOLEAN_OPERATOR_KIND);
+ unaryIntegerOperatorKindEEnum = createEEnum(UNARY_INTEGER_OPERATOR_KIND);
+ unaryBooleanOperatorKindEEnum = createEEnum(UNARY_BOOLEAN_OPERATOR_KIND);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ boardEClass.getESuperTypes().add(this.getNamedElement());
+ moduleEClass.getESuperTypes().add(this.getNamedElement());
+ digitalPinEClass.getESuperTypes().add(this.getPin());
+ analogPinEClass.getESuperTypes().add(this.getPin());
+ sketchEClass.getESuperTypes().add(this.getNamedElement());
+ projectEClass.getESuperTypes().add(this.getNamedElement());
+ instructionEClass.getESuperTypes().add(this.getNamedElement());
+ moduleAssignmentEClass.getESuperTypes().add(this.getModuleInstruction());
+ moduleAssignmentEClass.getESuperTypes().add(this.getAssignment());
+ moduleInstructionEClass.getESuperTypes().add(this.getInstruction());
+ controlEClass.getESuperTypes().add(this.getInstruction());
+ utilitiesEClass.getESuperTypes().add(this.getInstruction());
+ delayEClass.getESuperTypes().add(this.getUtilities());
+ repeatEClass.getESuperTypes().add(this.getControl());
+ moduleGetEClass.getESuperTypes().add(this.getExpression());
+ whileEClass.getESuperTypes().add(this.getControl());
+ binaryExpressionEClass.getESuperTypes().add(this.getExpression());
+ variableEClass.getESuperTypes().add(this.getExpression());
+ variableEClass.getESuperTypes().add(this.getNamedElement());
+ variableAssignmentEClass.getESuperTypes().add(this.getInstruction());
+ variableAssignmentEClass.getESuperTypes().add(this.getAssignment());
+ binaryIntegerExpressionEClass.getESuperTypes().add(this.getBinaryExpression());
+ binaryIntegerExpressionEClass.getESuperTypes().add(this.getIntegerExpression());
+ binaryBooleanExpressionEClass.getESuperTypes().add(this.getBinaryExpression());
+ binaryBooleanExpressionEClass.getESuperTypes().add(this.getBooleanExpression());
+ constantEClass.getESuperTypes().add(this.getExpression());
+ ifEClass.getESuperTypes().add(this.getControl());
+ integerConstantEClass.getESuperTypes().add(this.getConstant());
+ integerConstantEClass.getESuperTypes().add(this.getIntegerExpression());
+ booleanConstantEClass.getESuperTypes().add(this.getConstant());
+ booleanConstantEClass.getESuperTypes().add(this.getBooleanExpression());
+ booleanExpressionEClass.getESuperTypes().add(this.getExpression());
+ integerExpressionEClass.getESuperTypes().add(this.getExpression());
+ assignmentEClass.getESuperTypes().add(this.getInstruction());
+ integerVariableEClass.getESuperTypes().add(this.getVariable());
+ integerVariableEClass.getESuperTypes().add(this.getIntegerExpression());
+ booleanVariableEClass.getESuperTypes().add(this.getVariable());
+ booleanVariableEClass.getESuperTypes().add(this.getBooleanExpression());
+ booleanModuleGetEClass.getESuperTypes().add(this.getModuleGet());
+ booleanModuleGetEClass.getESuperTypes().add(this.getBooleanExpression());
+ integerModuleGetEClass.getESuperTypes().add(this.getModuleGet());
+ integerModuleGetEClass.getESuperTypes().add(this.getIntegerExpression());
+ unaryExpressionEClass.getESuperTypes().add(this.getExpression());
+ unaryBooleanExpressionEClass.getESuperTypes().add(this.getUnaryExpression());
+ unaryBooleanExpressionEClass.getESuperTypes().add(this.getBooleanExpression());
+ unaryIntegerExpressionEClass.getESuperTypes().add(this.getUnaryExpression());
+ unaryIntegerExpressionEClass.getESuperTypes().add(this.getIntegerExpression());
+ variableDeclarationEClass.getESuperTypes().add(this.getInstruction());
+ variableRefEClass.getESuperTypes().add(this.getExpression());
+ ledEClass.getESuperTypes().add(this.getArduinoDigitalModule());
+ pushButtonEClass.getESuperTypes().add(this.getArduinoDigitalModule());
+ buzzerEClass.getESuperTypes().add(this.getArduinoDigitalModule());
+ rotationSensorEClass.getESuperTypes().add(this.getArduinoAnalogModule());
+ microServoEClass.getESuperTypes().add(this.getArduinoDigitalModule());
+ infraRedSensorEClass.getESuperTypes().add(this.getArduinoDigitalModule());
+ ambientLightSensorEClass.getESuperTypes().add(this.getArduinoAnalogModule());
+ soundSensorEClass.getESuperTypes().add(this.getArduinoAnalogModule());
+ fanEClass.getESuperTypes().add(this.getArduinoDigitalModule());
+ musicPlayerEClass.getESuperTypes().add(this.getArduinoAnalogModule());
+ arduinoModuleEClass.getESuperTypes().add(this.getModule());
+ arduinoBoardEClass.getESuperTypes().add(this.getBoard());
+ arduinoDigitalModuleEClass.getESuperTypes().add(this.getArduinoModule());
+ arduinoAnalogModuleEClass.getESuperTypes().add(this.getArduinoModule());
+ threadEClass.getESuperTypes().add(this.getNamedElement());
+ channelEClass.getESuperTypes().add(this.getNamedElement());
+ linkEClass.getESuperTypes().add(this.getNamedElement());
+ synchronizationBlockEClass.getESuperTypes().add(this.getThreadInstructionBlock());
+ instructionBlockEClass.getESuperTypes().add(this.getThreadInstructionBlock());
+ threadInstructionBlockEClass.getESuperTypes().add(this.getNamedElement());
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(boardEClass, Board.class, "Board", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getBoard_Project(), this.getProject(), this.getProject_Boards(), "project", null, 1, 1, Board.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getBoard_Threads(), this.getThread(), null, "threads", null, 0, -1, Board.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(moduleEClass, Module.class, "Module", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getModule_Level(), ecorePackage.getEBoolean(), "level", null, 0, 1, Module.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(digitalPinEClass, DigitalPin.class, "DigitalPin", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDigitalPin_Module(), this.getArduinoDigitalModule(), null, "module", null, 0, 1, DigitalPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(pinEClass, Pin.class, "Pin", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getPin_Id(), ecorePackage.getEInt(), "id", null, 0, 1, Pin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getPin_Level(), ecorePackage.getEIntegerObject(), "level", null, 0, 1, Pin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(analogPinEClass, AnalogPin.class, "AnalogPin", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getAnalogPin_Module(), this.getArduinoAnalogModule(), null, "module", null, 0, 1, AnalogPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(sketchEClass, Sketch.class, "Sketch", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getSketch_Project(), this.getProject(), this.getProject_Sketch(), "project", null, 1, 1, Sketch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getSketch_Threads(), this.getThread(), null, "threads", null, 0, -1, Sketch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getSketch_Channels(), this.getChannel(), null, "channels", null, 0, -1, Sketch.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(projectEClass, Project.class, "Project", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getProject_Boards(), this.getBoard(), this.getBoard_Project(), "boards", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getProject_Sketch(), this.getSketch(), this.getSketch_Project(), "sketch", null, 0, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getProject_Links(), this.getLink(), null, "links", null, 0, -1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(instructionEClass, Instruction.class, "Instruction", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getInstruction_OwnedBlock(), this.getInstructionBlock(), this.getInstructionBlock_Instructions(), "ownedBlock", null, 0, 1, Instruction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ addEOperation(instructionEClass, null, "execute", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(moduleAssignmentEClass, ModuleAssignment.class, "ModuleAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(moduleInstructionEClass, ModuleInstruction.class, "ModuleInstruction", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getModuleInstruction_Module(), this.getModule(), null, "module", null, 1, 1, ModuleInstruction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(controlEClass, Control.class, "Control", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getControl_Block(), this.getInstructionBlock(), null, "block", null, 1, 1, Control.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(utilitiesEClass, Utilities.class, "Utilities", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(delayEClass, Delay.class, "Delay", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getDelay_Unit(), this.getTime(), "unit", null, 0, 1, Delay.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getDelay_Value(), ecorePackage.getEInt(), "value", null, 0, 1, Delay.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(namedElementEClass, NamedElement.class, "NamedElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getNamedElement_Name(), ecorePackage.getEString(), "name", null, 0, 1, NamedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(repeatEClass, Repeat.class, "Repeat", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getRepeat_Iteration(), ecorePackage.getEInt(), "iteration", "5", 0, 1, Repeat.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(moduleGetEClass, ModuleGet.class, "ModuleGet", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getModuleGet_Module(), this.getModule(), null, "module", null, 1, 1, ModuleGet.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(whileEClass, While.class, "While", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getWhile_Condition(), this.getBooleanExpression(), null, "condition", null, 1, 1, While.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(binaryExpressionEClass, BinaryExpression.class, "BinaryExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getBinaryExpression_Left(), this.getExpression(), null, "left", null, 1, 1, BinaryExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getBinaryExpression_Right(), this.getExpression(), null, "right", null, 0, 1, BinaryExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(variableEClass, Variable.class, "Variable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(variableAssignmentEClass, VariableAssignment.class, "VariableAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getVariableAssignment_Variable(), this.getVariable(), null, "variable", null, 1, 1, VariableAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(binaryIntegerExpressionEClass, BinaryIntegerExpression.class, "BinaryIntegerExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getBinaryIntegerExpression_Operator(), this.getBinaryIntegerOperatorKind(), "operator", null, 0, 1, BinaryIntegerExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(binaryBooleanExpressionEClass, BinaryBooleanExpression.class, "BinaryBooleanExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getBinaryBooleanExpression_Operator(), this.getBinaryBooleanOperatorKind(), "operator", null, 0, 1, BinaryBooleanExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(expressionEClass, Expression.class, "Expression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(constantEClass, Constant.class, "Constant", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(ifEClass, If.class, "If", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getIf_Condition(), this.getBooleanExpression(), null, "condition", null, 1, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getIf_ElseBlock(), this.getInstructionBlock(), null, "elseBlock", null, 0, 1, If.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(integerConstantEClass, IntegerConstant.class, "IntegerConstant", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getIntegerConstant_Value(), ecorePackage.getEInt(), "value", "0", 0, 1, IntegerConstant.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(booleanConstantEClass, BooleanConstant.class, "BooleanConstant", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getBooleanConstant_Value(), ecorePackage.getEBoolean(), "value", "false", 0, 1, BooleanConstant.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(booleanExpressionEClass, BooleanExpression.class, "BooleanExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(integerExpressionEClass, IntegerExpression.class, "IntegerExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(assignmentEClass, Assignment.class, "Assignment", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getAssignment_Operand(), this.getExpression(), null, "operand", null, 1, 1, Assignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(integerVariableEClass, IntegerVariable.class, "IntegerVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getIntegerVariable_InitialValue(), ecorePackage.getEInt(), "initialValue", "0", 0, 1, IntegerVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getIntegerVariable_Value(), ecorePackage.getEIntegerObject(), "value", "0", 0, 1, IntegerVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(booleanVariableEClass, BooleanVariable.class, "BooleanVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getBooleanVariable_InitialValue(), ecorePackage.getEBoolean(), "initialValue", "false", 0, 1, BooleanVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getBooleanVariable_Value(), ecorePackage.getEBooleanObject(), "value", "false", 0, 1, BooleanVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(booleanModuleGetEClass, BooleanModuleGet.class, "BooleanModuleGet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(integerModuleGetEClass, IntegerModuleGet.class, "IntegerModuleGet", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(unaryExpressionEClass, UnaryExpression.class, "UnaryExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getUnaryExpression_Operand(), this.getExpression(), null, "operand", null, 1, 1, UnaryExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(unaryBooleanExpressionEClass, UnaryBooleanExpression.class, "UnaryBooleanExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getUnaryBooleanExpression_Operator(), this.getUnaryBooleanOperatorKind(), "operator", null, 0, 1, UnaryBooleanExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(unaryIntegerExpressionEClass, UnaryIntegerExpression.class, "UnaryIntegerExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getUnaryIntegerExpression_Operator(), this.getUnaryIntegerOperatorKind(), "operator", null, 0, 1, UnaryIntegerExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(variableDeclarationEClass, VariableDeclaration.class, "VariableDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getVariableDeclaration_Variable(), this.getVariable(), null, "variable", null, 1, 1, VariableDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(variableRefEClass, VariableRef.class, "VariableRef", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getVariableRef_Variable(), this.getVariable(), null, "variable", null, 1, 1, VariableRef.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(ledEClass, fr.obeo.dsl.arduino.LED.class, "LED", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(pushButtonEClass, PushButton.class, "PushButton", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(buzzerEClass, Buzzer.class, "Buzzer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(rotationSensorEClass, RotationSensor.class, "RotationSensor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(microServoEClass, MicroServo.class, "MicroServo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(infraRedSensorEClass, InfraRedSensor.class, "InfraRedSensor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(ambientLightSensorEClass, AmbientLightSensor.class, "AmbientLightSensor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(soundSensorEClass, SoundSensor.class, "SoundSensor", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(fanEClass, Fan.class, "Fan", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(musicPlayerEClass, MusicPlayer.class, "MusicPlayer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduinoModuleEClass, ArduinoModule.class, "ArduinoModule", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduinoBoardEClass, ArduinoBoard.class, "ArduinoBoard", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getArduinoBoard_DigitalPins(), this.getDigitalPin(), null, "digitalPins", null, 0, -1, ArduinoBoard.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getArduinoBoard_AnalogPins(), this.getAnalogPin(), null, "analogPins", null, 0, -1, ArduinoBoard.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(arduinoDigitalModuleEClass, ArduinoDigitalModule.class, "ArduinoDigitalModule", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduinoAnalogModuleEClass, ArduinoAnalogModule.class, "ArduinoAnalogModule", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(threadEClass, fr.obeo.dsl.arduino.Thread.class, "Thread", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getThread_Blocks(), this.getThreadInstructionBlock(), null, "blocks", null, 0, -1, fr.obeo.dsl.arduino.Thread.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getThread_Channels(), this.getChannel(), this.getChannel_Source(), "channels", null, 0, -1, fr.obeo.dsl.arduino.Thread.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getThread_CurrentInstruction(), this.getInstruction(), null, "currentInstruction", null, 0, 1, fr.obeo.dsl.arduino.Thread.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getThread_First(), this.getThreadInstructionBlock(), null, "first", null, 0, 1, fr.obeo.dsl.arduino.Thread.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getThread_Last(), this.getThreadInstructionBlock(), null, "last", null, 0, 1, fr.obeo.dsl.arduino.Thread.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getThread_NbCycle(), ecorePackage.getEInt(), "nbCycle", null, 0, 1, fr.obeo.dsl.arduino.Thread.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(channelEClass, Channel.class, "Channel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getChannel_Source(), this.getThread(), this.getThread_Channels(), "source", null, 1, 1, Channel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getChannel_Target(), this.getThread(), null, "target", null, 1, 1, Channel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getChannel_InRate(), ecorePackage.getEInt(), "inRate", null, 0, 1, Channel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getChannel_OutRate(), ecorePackage.getEInt(), "outRate", null, 0, 1, Channel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getChannel_Capacity(), ecorePackage.getEInt(), "capacity", null, 0, 1, Channel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getChannel_CurrentSize(), ecorePackage.getEInt(), "currentSize", null, 0, 1, Channel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(linkEClass, Link.class, "Link", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getLink_InBoard(), this.getBoard(), null, "inBoard", null, 1, 1, Link.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getLink_OutBoard(), this.getBoard(), null, "outBoard", null, 1, 1, Link.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getLink_Channels(), this.getChannel(), null, "channels", null, 0, -1, Link.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(synchronizationBlockEClass, SynchronizationBlock.class, "SynchronizationBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(instructionBlockEClass, InstructionBlock.class, "InstructionBlock", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getInstructionBlock_Instructions(), this.getInstruction(), this.getInstruction_OwnedBlock(), "instructions", null, 0, -1, InstructionBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(threadInstructionBlockEClass, ThreadInstructionBlock.class, "ThreadInstructionBlock", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getThreadInstructionBlock_Thread(), this.getThread(), null, "thread", null, 0, 1, ThreadInstructionBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getThreadInstructionBlock_Next(), this.getThreadInstructionBlock(), null, "next", null, 0, 1, ThreadInstructionBlock.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ addEOperation(threadInstructionBlockEClass, null, "execute", 0, 1, IS_UNIQUE, IS_ORDERED);
+
+ // Initialize enums and add enum literals
+ initEEnum(timeEEnum, Time.class, "Time");
+ addEEnumLiteral(timeEEnum, Time.MILLI_SECOND);
+ addEEnumLiteral(timeEEnum, Time.MICRO_SECOND);
+
+ initEEnum(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.class, "BinaryIntegerOperatorKind");
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.MINUS);
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.PLUS);
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.MUL);
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.DIV);
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.MIN);
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.MAX);
+ addEEnumLiteral(binaryIntegerOperatorKindEEnum, BinaryIntegerOperatorKind.POURCENT);
+
+ initEEnum(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.class, "BinaryBooleanOperatorKind");
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.INF);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.SUP);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.INF_OR_EQUAL);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.SUP_OR_EQUAL);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.EQUAL);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.AND);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.OR);
+ addEEnumLiteral(binaryBooleanOperatorKindEEnum, BinaryBooleanOperatorKind.DIFFERENT);
+
+ initEEnum(unaryIntegerOperatorKindEEnum, UnaryIntegerOperatorKind.class, "UnaryIntegerOperatorKind");
+ addEEnumLiteral(unaryIntegerOperatorKindEEnum, UnaryIntegerOperatorKind.MINUS);
+ addEEnumLiteral(unaryIntegerOperatorKindEEnum, UnaryIntegerOperatorKind.SQUARE_ROOT);
+
+ initEEnum(unaryBooleanOperatorKindEEnum, UnaryBooleanOperatorKind.class, "UnaryBooleanOperatorKind");
+ addEEnumLiteral(unaryBooleanOperatorKindEEnum, UnaryBooleanOperatorKind.NOT);
+
+ // Create resource
+ createResource(eNS_URI);
+
+ // Create annotations
+ // dynamic
+ createDynamicAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for dynamic .
+ *
+ *
+ * @generated
+ */
+ protected void createDynamicAnnotations() {
+ String source = "dynamic";
+ addAnnotation
+ (getPin_Level(),
+ source,
+ new String[] {
+ });
+ addAnnotation
+ (getIntegerVariable_Value(),
+ source,
+ new String[] {
+ });
+ addAnnotation
+ (getBooleanVariable_Value(),
+ source,
+ new String[] {
+ });
+ }
+
+} //ArduinoPackageImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AssignmentImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AssignmentImpl.java
new file mode 100644
index 00000000..8f4d353c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/AssignmentImpl.java
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+import fr.obeo.dsl.arduino.Expression;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Assignment '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.AssignmentImpl#getOperand Operand }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class AssignmentImpl extends InstructionImpl implements Assignment {
+ /**
+ * The cached value of the '{@link #getOperand() Operand }' containment reference.
+ *
+ *
+ * @see #getOperand()
+ * @generated
+ * @ordered
+ */
+ protected Expression operand;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected AssignmentImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ASSIGNMENT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Expression getOperand() {
+ return operand;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetOperand(Expression newOperand, NotificationChain msgs) {
+ Expression oldOperand = operand;
+ operand = newOperand;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.ASSIGNMENT__OPERAND, oldOperand, newOperand);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperand(Expression newOperand) {
+ if (newOperand != operand) {
+ NotificationChain msgs = null;
+ if (operand != null)
+ msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.ASSIGNMENT__OPERAND, null, msgs);
+ if (newOperand != null)
+ msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.ASSIGNMENT__OPERAND, null, msgs);
+ msgs = basicSetOperand(newOperand, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.ASSIGNMENT__OPERAND, newOperand, newOperand));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND:
+ return basicSetOperand(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND:
+ return getOperand();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND:
+ setOperand((Expression)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND:
+ setOperand((Expression)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND:
+ return operand != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //AssignmentImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryBooleanExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryBooleanExpressionImpl.java
new file mode 100644
index 00000000..297ca7e4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryBooleanExpressionImpl.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryBooleanOperatorKind;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Binary Boolean Expression '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.BinaryBooleanExpressionImpl#getOperator Operator }
+ *
+ *
+ *
+ * @generated
+ */
+public class BinaryBooleanExpressionImpl extends BinaryExpressionImpl implements BinaryBooleanExpression {
+ /**
+ * The default value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected static final BinaryBooleanOperatorKind OPERATOR_EDEFAULT = BinaryBooleanOperatorKind.INF;
+
+ /**
+ * The cached value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected BinaryBooleanOperatorKind operator = OPERATOR_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BinaryBooleanExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BINARY_BOOLEAN_EXPRESSION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BinaryBooleanOperatorKind getOperator() {
+ return operator;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperator(BinaryBooleanOperatorKind newOperator) {
+ BinaryBooleanOperatorKind oldOperator = operator;
+ operator = newOperator == null ? OPERATOR_EDEFAULT : newOperator;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BINARY_BOOLEAN_EXPRESSION__OPERATOR, oldOperator, operator));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION__OPERATOR:
+ return getOperator();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION__OPERATOR:
+ setOperator((BinaryBooleanOperatorKind)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION__OPERATOR:
+ setOperator(OPERATOR_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION__OPERATOR:
+ return operator != OPERATOR_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (operator: ");
+ result.append(operator);
+ result.append(')');
+ return result.toString();
+ }
+
+} //BinaryBooleanExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryExpressionImpl.java
new file mode 100644
index 00000000..369cfa1a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryExpressionImpl.java
@@ -0,0 +1,249 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryExpression;
+import fr.obeo.dsl.arduino.Expression;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Binary Expression '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.BinaryExpressionImpl#getLeft Left }
+ * {@link fr.obeo.dsl.arduino.impl.BinaryExpressionImpl#getRight Right }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class BinaryExpressionImpl extends ExpressionImpl implements BinaryExpression {
+ /**
+ * The cached value of the '{@link #getLeft() Left }' containment reference.
+ *
+ *
+ * @see #getLeft()
+ * @generated
+ * @ordered
+ */
+ protected Expression left;
+
+ /**
+ * The cached value of the '{@link #getRight() Right }' containment reference.
+ *
+ *
+ * @see #getRight()
+ * @generated
+ * @ordered
+ */
+ protected Expression right;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BinaryExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BINARY_EXPRESSION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Expression getLeft() {
+ return left;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLeft(Expression newLeft, NotificationChain msgs) {
+ Expression oldLeft = left;
+ left = newLeft;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.BINARY_EXPRESSION__LEFT, oldLeft, newLeft);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLeft(Expression newLeft) {
+ if (newLeft != left) {
+ NotificationChain msgs = null;
+ if (left != null)
+ msgs = ((InternalEObject)left).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.BINARY_EXPRESSION__LEFT, null, msgs);
+ if (newLeft != null)
+ msgs = ((InternalEObject)newLeft).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.BINARY_EXPRESSION__LEFT, null, msgs);
+ msgs = basicSetLeft(newLeft, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BINARY_EXPRESSION__LEFT, newLeft, newLeft));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Expression getRight() {
+ return right;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetRight(Expression newRight, NotificationChain msgs) {
+ Expression oldRight = right;
+ right = newRight;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.BINARY_EXPRESSION__RIGHT, oldRight, newRight);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setRight(Expression newRight) {
+ if (newRight != right) {
+ NotificationChain msgs = null;
+ if (right != null)
+ msgs = ((InternalEObject)right).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.BINARY_EXPRESSION__RIGHT, null, msgs);
+ if (newRight != null)
+ msgs = ((InternalEObject)newRight).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.BINARY_EXPRESSION__RIGHT, null, msgs);
+ msgs = basicSetRight(newRight, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BINARY_EXPRESSION__RIGHT, newRight, newRight));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_EXPRESSION__LEFT:
+ return basicSetLeft(null, msgs);
+ case ArduinoPackage.BINARY_EXPRESSION__RIGHT:
+ return basicSetRight(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_EXPRESSION__LEFT:
+ return getLeft();
+ case ArduinoPackage.BINARY_EXPRESSION__RIGHT:
+ return getRight();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_EXPRESSION__LEFT:
+ setLeft((Expression)newValue);
+ return;
+ case ArduinoPackage.BINARY_EXPRESSION__RIGHT:
+ setRight((Expression)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_EXPRESSION__LEFT:
+ setLeft((Expression)null);
+ return;
+ case ArduinoPackage.BINARY_EXPRESSION__RIGHT:
+ setRight((Expression)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_EXPRESSION__LEFT:
+ return left != null;
+ case ArduinoPackage.BINARY_EXPRESSION__RIGHT:
+ return right != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //BinaryExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryIntegerExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryIntegerExpressionImpl.java
new file mode 100644
index 00000000..26a66514
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BinaryIntegerExpressionImpl.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerOperatorKind;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Binary Integer Expression '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.BinaryIntegerExpressionImpl#getOperator Operator }
+ *
+ *
+ *
+ * @generated
+ */
+public class BinaryIntegerExpressionImpl extends BinaryExpressionImpl implements BinaryIntegerExpression {
+ /**
+ * The default value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected static final BinaryIntegerOperatorKind OPERATOR_EDEFAULT = BinaryIntegerOperatorKind.MINUS;
+
+ /**
+ * The cached value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected BinaryIntegerOperatorKind operator = OPERATOR_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BinaryIntegerExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BINARY_INTEGER_EXPRESSION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BinaryIntegerOperatorKind getOperator() {
+ return operator;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperator(BinaryIntegerOperatorKind newOperator) {
+ BinaryIntegerOperatorKind oldOperator = operator;
+ operator = newOperator == null ? OPERATOR_EDEFAULT : newOperator;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BINARY_INTEGER_EXPRESSION__OPERATOR, oldOperator, operator));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION__OPERATOR:
+ return getOperator();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION__OPERATOR:
+ setOperator((BinaryIntegerOperatorKind)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION__OPERATOR:
+ setOperator(OPERATOR_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION__OPERATOR:
+ return operator != OPERATOR_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (operator: ");
+ result.append(operator);
+ result.append(')');
+ return result.toString();
+ }
+
+} //BinaryIntegerExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BoardImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BoardImpl.java
new file mode 100644
index 00000000..d2c87fe3
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BoardImpl.java
@@ -0,0 +1,241 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.Project;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Board '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.BoardImpl#getProject Project }
+ * {@link fr.obeo.dsl.arduino.impl.BoardImpl#getThreads Threads }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class BoardImpl extends NamedElementImpl implements Board {
+ /**
+ * The cached value of the '{@link #getThreads() Threads }' reference list.
+ *
+ *
+ * @see #getThreads()
+ * @generated
+ * @ordered
+ */
+ protected EList threads;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BoardImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BOARD;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Project getProject() {
+ if (eContainerFeatureID() != ArduinoPackage.BOARD__PROJECT) return null;
+ return (Project)eInternalContainer();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetProject(Project newProject, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newProject, ArduinoPackage.BOARD__PROJECT, msgs);
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setProject(Project newProject) {
+ if (newProject != eInternalContainer() || (eContainerFeatureID() != ArduinoPackage.BOARD__PROJECT && newProject != null)) {
+ if (EcoreUtil.isAncestor(this, newProject))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newProject != null)
+ msgs = ((InternalEObject)newProject).eInverseAdd(this, ArduinoPackage.PROJECT__BOARDS, Project.class, msgs);
+ msgs = basicSetProject(newProject, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BOARD__PROJECT, newProject, newProject));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getThreads() {
+ if (threads == null) {
+ threads = new EObjectResolvingEList(fr.obeo.dsl.arduino.Thread.class, this, ArduinoPackage.BOARD__THREADS);
+ }
+ return threads;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.BOARD__PROJECT:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetProject((Project)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.BOARD__PROJECT:
+ return basicSetProject(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case ArduinoPackage.BOARD__PROJECT:
+ return eInternalContainer().eInverseRemove(this, ArduinoPackage.PROJECT__BOARDS, Project.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.BOARD__PROJECT:
+ return getProject();
+ case ArduinoPackage.BOARD__THREADS:
+ return getThreads();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.BOARD__PROJECT:
+ setProject((Project)newValue);
+ return;
+ case ArduinoPackage.BOARD__THREADS:
+ getThreads().clear();
+ getThreads().addAll((Collection extends fr.obeo.dsl.arduino.Thread>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BOARD__PROJECT:
+ setProject((Project)null);
+ return;
+ case ArduinoPackage.BOARD__THREADS:
+ getThreads().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BOARD__PROJECT:
+ return getProject() != null;
+ case ArduinoPackage.BOARD__THREADS:
+ return threads != null && !threads.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //BoardImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanConstantImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanConstantImpl.java
new file mode 100644
index 00000000..d5d97219
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanConstantImpl.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanConstant;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Boolean Constant '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.BooleanConstantImpl#isValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class BooleanConstantImpl extends ConstantImpl implements BooleanConstant {
+ /**
+ * The default value of the '{@link #isValue() Value }' attribute.
+ *
+ *
+ * @see #isValue()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean VALUE_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isValue() Value }' attribute.
+ *
+ *
+ * @see #isValue()
+ * @generated
+ * @ordered
+ */
+ protected boolean value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BooleanConstantImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BOOLEAN_CONSTANT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public boolean isValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(boolean newValue) {
+ boolean oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BOOLEAN_CONSTANT__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_CONSTANT__VALUE:
+ return isValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_CONSTANT__VALUE:
+ setValue((Boolean)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_CONSTANT__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_CONSTANT__VALUE:
+ return value != VALUE_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //BooleanConstantImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanExpressionImpl.java
new file mode 100644
index 00000000..2f52eafd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanExpressionImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanExpression;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Boolean Expression '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class BooleanExpressionImpl extends ExpressionImpl implements BooleanExpression {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BooleanExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BOOLEAN_EXPRESSION;
+ }
+
+} //BooleanExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanModuleGetImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanModuleGetImpl.java
new file mode 100644
index 00000000..afc2671c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanModuleGetImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanModuleGet;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Boolean Module Get '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class BooleanModuleGetImpl extends ModuleGetImpl implements BooleanModuleGet {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BooleanModuleGetImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BOOLEAN_MODULE_GET;
+ }
+
+} //BooleanModuleGetImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanVariableImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanVariableImpl.java
new file mode 100644
index 00000000..9998aa07
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BooleanVariableImpl.java
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanVariable;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Boolean Variable '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.BooleanVariableImpl#isInitialValue Initial Value }
+ * {@link fr.obeo.dsl.arduino.impl.BooleanVariableImpl#getValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class BooleanVariableImpl extends VariableImpl implements BooleanVariable {
+ /**
+ * The default value of the '{@link #isInitialValue() Initial Value }' attribute.
+ *
+ *
+ * @see #isInitialValue()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean INITIAL_VALUE_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isInitialValue() Initial Value }' attribute.
+ *
+ *
+ * @see #isInitialValue()
+ * @generated
+ * @ordered
+ */
+ protected boolean initialValue = INITIAL_VALUE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final Boolean VALUE_EDEFAULT = Boolean.FALSE;
+
+ /**
+ * The cached value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected Boolean value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BooleanVariableImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BOOLEAN_VARIABLE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public boolean isInitialValue() {
+ return initialValue;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setInitialValue(boolean newInitialValue) {
+ boolean oldInitialValue = initialValue;
+ initialValue = newInitialValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BOOLEAN_VARIABLE__INITIAL_VALUE, oldInitialValue, initialValue));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Boolean getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(Boolean newValue) {
+ Boolean oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.BOOLEAN_VARIABLE__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_VARIABLE__INITIAL_VALUE:
+ return isInitialValue();
+ case ArduinoPackage.BOOLEAN_VARIABLE__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_VARIABLE__INITIAL_VALUE:
+ setInitialValue((Boolean)newValue);
+ return;
+ case ArduinoPackage.BOOLEAN_VARIABLE__VALUE:
+ setValue((Boolean)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_VARIABLE__INITIAL_VALUE:
+ setInitialValue(INITIAL_VALUE_EDEFAULT);
+ return;
+ case ArduinoPackage.BOOLEAN_VARIABLE__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.BOOLEAN_VARIABLE__INITIAL_VALUE:
+ return initialValue != INITIAL_VALUE_EDEFAULT;
+ case ArduinoPackage.BOOLEAN_VARIABLE__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (initialValue: ");
+ result.append(initialValue);
+ result.append(", value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //BooleanVariableImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BuzzerImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BuzzerImpl.java
new file mode 100644
index 00000000..ee4ee95f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/BuzzerImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Buzzer;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Buzzer '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class BuzzerImpl extends ArduinoDigitalModuleImpl implements Buzzer {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BuzzerImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.BUZZER;
+ }
+
+} //BuzzerImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ChannelImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ChannelImpl.java
new file mode 100644
index 00000000..64265eb0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ChannelImpl.java
@@ -0,0 +1,506 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Channel;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Channel '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ChannelImpl#getSource Source }
+ * {@link fr.obeo.dsl.arduino.impl.ChannelImpl#getTarget Target }
+ * {@link fr.obeo.dsl.arduino.impl.ChannelImpl#getInRate In Rate }
+ * {@link fr.obeo.dsl.arduino.impl.ChannelImpl#getOutRate Out Rate }
+ * {@link fr.obeo.dsl.arduino.impl.ChannelImpl#getCapacity Capacity }
+ * {@link fr.obeo.dsl.arduino.impl.ChannelImpl#getCurrentSize Current Size }
+ *
+ *
+ *
+ * @generated
+ */
+public class ChannelImpl extends NamedElementImpl implements Channel {
+ /**
+ * The cached value of the '{@link #getSource() Source }' reference.
+ *
+ *
+ * @see #getSource()
+ * @generated
+ * @ordered
+ */
+ protected fr.obeo.dsl.arduino.Thread source;
+
+ /**
+ * The cached value of the '{@link #getTarget() Target }' reference.
+ *
+ *
+ * @see #getTarget()
+ * @generated
+ * @ordered
+ */
+ protected fr.obeo.dsl.arduino.Thread target;
+
+ /**
+ * The default value of the '{@link #getInRate() In Rate }' attribute.
+ *
+ *
+ * @see #getInRate()
+ * @generated
+ * @ordered
+ */
+ protected static final int IN_RATE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getInRate() In Rate }' attribute.
+ *
+ *
+ * @see #getInRate()
+ * @generated
+ * @ordered
+ */
+ protected int inRate = IN_RATE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getOutRate() Out Rate }' attribute.
+ *
+ *
+ * @see #getOutRate()
+ * @generated
+ * @ordered
+ */
+ protected static final int OUT_RATE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getOutRate() Out Rate }' attribute.
+ *
+ *
+ * @see #getOutRate()
+ * @generated
+ * @ordered
+ */
+ protected int outRate = OUT_RATE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCapacity() Capacity }' attribute.
+ *
+ *
+ * @see #getCapacity()
+ * @generated
+ * @ordered
+ */
+ protected static final int CAPACITY_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getCapacity() Capacity }' attribute.
+ *
+ *
+ * @see #getCapacity()
+ * @generated
+ * @ordered
+ */
+ protected int capacity = CAPACITY_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getCurrentSize() Current Size }' attribute.
+ *
+ *
+ * @see #getCurrentSize()
+ * @generated
+ * @ordered
+ */
+ protected static final int CURRENT_SIZE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getCurrentSize() Current Size }' attribute.
+ *
+ *
+ * @see #getCurrentSize()
+ * @generated
+ * @ordered
+ */
+ protected int currentSize = CURRENT_SIZE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ChannelImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.CHANNEL;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread getSource() {
+ if (source != null && source.eIsProxy()) {
+ InternalEObject oldSource = (InternalEObject)source;
+ source = (fr.obeo.dsl.arduino.Thread)eResolveProxy(oldSource);
+ if (source != oldSource) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.CHANNEL__SOURCE, oldSource, source));
+ }
+ }
+ return source;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread basicGetSource() {
+ return source;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetSource(fr.obeo.dsl.arduino.Thread newSource, NotificationChain msgs) {
+ fr.obeo.dsl.arduino.Thread oldSource = source;
+ source = newSource;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__SOURCE, oldSource, newSource);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setSource(fr.obeo.dsl.arduino.Thread newSource) {
+ if (newSource != source) {
+ NotificationChain msgs = null;
+ if (source != null)
+ msgs = ((InternalEObject)source).eInverseRemove(this, ArduinoPackage.THREAD__CHANNELS, fr.obeo.dsl.arduino.Thread.class, msgs);
+ if (newSource != null)
+ msgs = ((InternalEObject)newSource).eInverseAdd(this, ArduinoPackage.THREAD__CHANNELS, fr.obeo.dsl.arduino.Thread.class, msgs);
+ msgs = basicSetSource(newSource, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__SOURCE, newSource, newSource));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread getTarget() {
+ if (target != null && target.eIsProxy()) {
+ InternalEObject oldTarget = (InternalEObject)target;
+ target = (fr.obeo.dsl.arduino.Thread)eResolveProxy(oldTarget);
+ if (target != oldTarget) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.CHANNEL__TARGET, oldTarget, target));
+ }
+ }
+ return target;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread basicGetTarget() {
+ return target;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setTarget(fr.obeo.dsl.arduino.Thread newTarget) {
+ fr.obeo.dsl.arduino.Thread oldTarget = target;
+ target = newTarget;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__TARGET, oldTarget, target));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getInRate() {
+ return inRate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setInRate(int newInRate) {
+ int oldInRate = inRate;
+ inRate = newInRate;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__IN_RATE, oldInRate, inRate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getOutRate() {
+ return outRate;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOutRate(int newOutRate) {
+ int oldOutRate = outRate;
+ outRate = newOutRate;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__OUT_RATE, oldOutRate, outRate));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getCapacity() {
+ return capacity;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setCapacity(int newCapacity) {
+ int oldCapacity = capacity;
+ capacity = newCapacity;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__CAPACITY, oldCapacity, capacity));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getCurrentSize() {
+ return currentSize;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setCurrentSize(int newCurrentSize) {
+ int oldCurrentSize = currentSize;
+ currentSize = newCurrentSize;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CHANNEL__CURRENT_SIZE, oldCurrentSize, currentSize));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.CHANNEL__SOURCE:
+ if (source != null)
+ msgs = ((InternalEObject)source).eInverseRemove(this, ArduinoPackage.THREAD__CHANNELS, fr.obeo.dsl.arduino.Thread.class, msgs);
+ return basicSetSource((fr.obeo.dsl.arduino.Thread)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.CHANNEL__SOURCE:
+ return basicSetSource(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.CHANNEL__SOURCE:
+ if (resolve) return getSource();
+ return basicGetSource();
+ case ArduinoPackage.CHANNEL__TARGET:
+ if (resolve) return getTarget();
+ return basicGetTarget();
+ case ArduinoPackage.CHANNEL__IN_RATE:
+ return getInRate();
+ case ArduinoPackage.CHANNEL__OUT_RATE:
+ return getOutRate();
+ case ArduinoPackage.CHANNEL__CAPACITY:
+ return getCapacity();
+ case ArduinoPackage.CHANNEL__CURRENT_SIZE:
+ return getCurrentSize();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.CHANNEL__SOURCE:
+ setSource((fr.obeo.dsl.arduino.Thread)newValue);
+ return;
+ case ArduinoPackage.CHANNEL__TARGET:
+ setTarget((fr.obeo.dsl.arduino.Thread)newValue);
+ return;
+ case ArduinoPackage.CHANNEL__IN_RATE:
+ setInRate((Integer)newValue);
+ return;
+ case ArduinoPackage.CHANNEL__OUT_RATE:
+ setOutRate((Integer)newValue);
+ return;
+ case ArduinoPackage.CHANNEL__CAPACITY:
+ setCapacity((Integer)newValue);
+ return;
+ case ArduinoPackage.CHANNEL__CURRENT_SIZE:
+ setCurrentSize((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.CHANNEL__SOURCE:
+ setSource((fr.obeo.dsl.arduino.Thread)null);
+ return;
+ case ArduinoPackage.CHANNEL__TARGET:
+ setTarget((fr.obeo.dsl.arduino.Thread)null);
+ return;
+ case ArduinoPackage.CHANNEL__IN_RATE:
+ setInRate(IN_RATE_EDEFAULT);
+ return;
+ case ArduinoPackage.CHANNEL__OUT_RATE:
+ setOutRate(OUT_RATE_EDEFAULT);
+ return;
+ case ArduinoPackage.CHANNEL__CAPACITY:
+ setCapacity(CAPACITY_EDEFAULT);
+ return;
+ case ArduinoPackage.CHANNEL__CURRENT_SIZE:
+ setCurrentSize(CURRENT_SIZE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.CHANNEL__SOURCE:
+ return source != null;
+ case ArduinoPackage.CHANNEL__TARGET:
+ return target != null;
+ case ArduinoPackage.CHANNEL__IN_RATE:
+ return inRate != IN_RATE_EDEFAULT;
+ case ArduinoPackage.CHANNEL__OUT_RATE:
+ return outRate != OUT_RATE_EDEFAULT;
+ case ArduinoPackage.CHANNEL__CAPACITY:
+ return capacity != CAPACITY_EDEFAULT;
+ case ArduinoPackage.CHANNEL__CURRENT_SIZE:
+ return currentSize != CURRENT_SIZE_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (inRate: ");
+ result.append(inRate);
+ result.append(", outRate: ");
+ result.append(outRate);
+ result.append(", capacity: ");
+ result.append(capacity);
+ result.append(", currentSize: ");
+ result.append(currentSize);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ChannelImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ConstantImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ConstantImpl.java
new file mode 100644
index 00000000..6e596111
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ConstantImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Constant;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Constant '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ConstantImpl extends ExpressionImpl implements Constant {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ConstantImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.CONSTANT;
+ }
+
+} //ConstantImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ControlImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ControlImpl.java
new file mode 100644
index 00000000..9c1ccfeb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ControlImpl.java
@@ -0,0 +1,182 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Control;
+
+import fr.obeo.dsl.arduino.InstructionBlock;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Control '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ControlImpl#getBlock Block }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ControlImpl extends InstructionImpl implements Control {
+ /**
+ * The cached value of the '{@link #getBlock() Block }' containment reference.
+ *
+ *
+ * @see #getBlock()
+ * @generated
+ * @ordered
+ */
+ protected InstructionBlock block;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ControlImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.CONTROL;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public InstructionBlock getBlock() {
+ return block;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetBlock(InstructionBlock newBlock, NotificationChain msgs) {
+ InstructionBlock oldBlock = block;
+ block = newBlock;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.CONTROL__BLOCK, oldBlock, newBlock);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setBlock(InstructionBlock newBlock) {
+ if (newBlock != block) {
+ NotificationChain msgs = null;
+ if (block != null)
+ msgs = ((InternalEObject)block).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.CONTROL__BLOCK, null, msgs);
+ if (newBlock != null)
+ msgs = ((InternalEObject)newBlock).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.CONTROL__BLOCK, null, msgs);
+ msgs = basicSetBlock(newBlock, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.CONTROL__BLOCK, newBlock, newBlock));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.CONTROL__BLOCK:
+ return basicSetBlock(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.CONTROL__BLOCK:
+ return getBlock();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.CONTROL__BLOCK:
+ setBlock((InstructionBlock)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.CONTROL__BLOCK:
+ setBlock((InstructionBlock)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.CONTROL__BLOCK:
+ return block != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //ControlImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/DelayImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/DelayImpl.java
new file mode 100644
index 00000000..bb2b5e8a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/DelayImpl.java
@@ -0,0 +1,225 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Delay;
+import fr.obeo.dsl.arduino.Time;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Delay '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.DelayImpl#getUnit Unit }
+ * {@link fr.obeo.dsl.arduino.impl.DelayImpl#getValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class DelayImpl extends UtilitiesImpl implements Delay {
+ /**
+ * The default value of the '{@link #getUnit() Unit }' attribute.
+ *
+ *
+ * @see #getUnit()
+ * @generated
+ * @ordered
+ */
+ protected static final Time UNIT_EDEFAULT = Time.MILLI_SECOND;
+
+ /**
+ * The cached value of the '{@link #getUnit() Unit }' attribute.
+ *
+ *
+ * @see #getUnit()
+ * @generated
+ * @ordered
+ */
+ protected Time unit = UNIT_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final int VALUE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected int value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected DelayImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.DELAY;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Time getUnit() {
+ return unit;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setUnit(Time newUnit) {
+ Time oldUnit = unit;
+ unit = newUnit == null ? UNIT_EDEFAULT : newUnit;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.DELAY__UNIT, oldUnit, unit));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(int newValue) {
+ int oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.DELAY__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.DELAY__UNIT:
+ return getUnit();
+ case ArduinoPackage.DELAY__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.DELAY__UNIT:
+ setUnit((Time)newValue);
+ return;
+ case ArduinoPackage.DELAY__VALUE:
+ setValue((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.DELAY__UNIT:
+ setUnit(UNIT_EDEFAULT);
+ return;
+ case ArduinoPackage.DELAY__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.DELAY__UNIT:
+ return unit != UNIT_EDEFAULT;
+ case ArduinoPackage.DELAY__VALUE:
+ return value != VALUE_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (unit: ");
+ result.append(unit);
+ result.append(", value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //DelayImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/DigitalPinImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/DigitalPinImpl.java
new file mode 100644
index 00000000..b1c171ac
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/DigitalPinImpl.java
@@ -0,0 +1,185 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.DigitalPin;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Digital Pin '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.DigitalPinImpl#getModule Module }
+ *
+ *
+ *
+ * @generated
+ */
+public class DigitalPinImpl extends PinImpl implements DigitalPin {
+ /**
+ * The cached value of the '{@link #getModule() Module }' containment reference.
+ *
+ *
+ * @see #getModule()
+ * @generated
+ * @ordered
+ */
+ protected ArduinoDigitalModule module;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected DigitalPinImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.DIGITAL_PIN;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoDigitalModule getModule() {
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetModule(ArduinoDigitalModule newModule, NotificationChain msgs) {
+ ArduinoDigitalModule oldModule = module;
+ module = newModule;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.DIGITAL_PIN__MODULE, oldModule, newModule);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setModule(ArduinoDigitalModule newModule) {
+ if (newModule != module) {
+ NotificationChain msgs = null;
+ if (module != null)
+ msgs = ((InternalEObject)module).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.DIGITAL_PIN__MODULE, null, msgs);
+ if (newModule != null)
+ msgs = ((InternalEObject)newModule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.DIGITAL_PIN__MODULE, null, msgs);
+ msgs = basicSetModule(newModule, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.DIGITAL_PIN__MODULE, newModule, newModule));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.DIGITAL_PIN__MODULE:
+ return basicSetModule(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.DIGITAL_PIN__MODULE:
+ return getModule();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.DIGITAL_PIN__MODULE:
+ setModule((ArduinoDigitalModule)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.DIGITAL_PIN__MODULE:
+ setModule((ArduinoDigitalModule)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.DIGITAL_PIN__MODULE:
+ return module != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //DigitalPinImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ExpressionImpl.java
new file mode 100644
index 00000000..323bbe39
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ExpressionImpl.java
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Expression;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Expression '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ExpressionImpl extends EObjectImpl implements Expression {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.EXPRESSION;
+ }
+
+} //ExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/FanImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/FanImpl.java
new file mode 100644
index 00000000..5fdb3ab5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/FanImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Fan;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Fan '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class FanImpl extends ArduinoDigitalModuleImpl implements Fan {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected FanImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.FAN;
+ }
+
+} //FanImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IfImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IfImpl.java
new file mode 100644
index 00000000..3ce088b1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IfImpl.java
@@ -0,0 +1,251 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.BooleanExpression;
+import fr.obeo.dsl.arduino.If;
+
+import fr.obeo.dsl.arduino.InstructionBlock;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'If '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.IfImpl#getCondition Condition }
+ * {@link fr.obeo.dsl.arduino.impl.IfImpl#getElseBlock Else Block }
+ *
+ *
+ *
+ * @generated
+ */
+public class IfImpl extends ControlImpl implements If {
+ /**
+ * The cached value of the '{@link #getCondition() Condition }' containment reference.
+ *
+ *
+ * @see #getCondition()
+ * @generated
+ * @ordered
+ */
+ protected BooleanExpression condition;
+
+ /**
+ * The cached value of the '{@link #getElseBlock() Else Block }' containment reference.
+ *
+ *
+ * @see #getElseBlock()
+ * @generated
+ * @ordered
+ */
+ protected InstructionBlock elseBlock;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected IfImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.IF;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanExpression getCondition() {
+ return condition;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetCondition(BooleanExpression newCondition, NotificationChain msgs) {
+ BooleanExpression oldCondition = condition;
+ condition = newCondition;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.IF__CONDITION, oldCondition, newCondition);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setCondition(BooleanExpression newCondition) {
+ if (newCondition != condition) {
+ NotificationChain msgs = null;
+ if (condition != null)
+ msgs = ((InternalEObject)condition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.IF__CONDITION, null, msgs);
+ if (newCondition != null)
+ msgs = ((InternalEObject)newCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.IF__CONDITION, null, msgs);
+ msgs = basicSetCondition(newCondition, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.IF__CONDITION, newCondition, newCondition));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public InstructionBlock getElseBlock() {
+ return elseBlock;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetElseBlock(InstructionBlock newElseBlock, NotificationChain msgs) {
+ InstructionBlock oldElseBlock = elseBlock;
+ elseBlock = newElseBlock;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.IF__ELSE_BLOCK, oldElseBlock, newElseBlock);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setElseBlock(InstructionBlock newElseBlock) {
+ if (newElseBlock != elseBlock) {
+ NotificationChain msgs = null;
+ if (elseBlock != null)
+ msgs = ((InternalEObject)elseBlock).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.IF__ELSE_BLOCK, null, msgs);
+ if (newElseBlock != null)
+ msgs = ((InternalEObject)newElseBlock).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.IF__ELSE_BLOCK, null, msgs);
+ msgs = basicSetElseBlock(newElseBlock, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.IF__ELSE_BLOCK, newElseBlock, newElseBlock));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.IF__CONDITION:
+ return basicSetCondition(null, msgs);
+ case ArduinoPackage.IF__ELSE_BLOCK:
+ return basicSetElseBlock(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.IF__CONDITION:
+ return getCondition();
+ case ArduinoPackage.IF__ELSE_BLOCK:
+ return getElseBlock();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.IF__CONDITION:
+ setCondition((BooleanExpression)newValue);
+ return;
+ case ArduinoPackage.IF__ELSE_BLOCK:
+ setElseBlock((InstructionBlock)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.IF__CONDITION:
+ setCondition((BooleanExpression)null);
+ return;
+ case ArduinoPackage.IF__ELSE_BLOCK:
+ setElseBlock((InstructionBlock)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.IF__CONDITION:
+ return condition != null;
+ case ArduinoPackage.IF__ELSE_BLOCK:
+ return elseBlock != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //IfImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InfraRedSensorImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InfraRedSensorImpl.java
new file mode 100644
index 00000000..ee194df1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InfraRedSensorImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.InfraRedSensor;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Infra Red Sensor '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class InfraRedSensorImpl extends ArduinoDigitalModuleImpl implements InfraRedSensor {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected InfraRedSensorImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INFRA_RED_SENSOR;
+ }
+
+} //InfraRedSensorImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InstructionBlockImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InstructionBlockImpl.java
new file mode 100644
index 00000000..ed471340
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InstructionBlockImpl.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.InstructionBlock;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Instruction Block '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.InstructionBlockImpl#getInstructions Instructions }
+ *
+ *
+ *
+ * @generated
+ */
+public class InstructionBlockImpl extends ThreadInstructionBlockImpl implements InstructionBlock {
+ /**
+ * The cached value of the '{@link #getInstructions() Instructions }' containment reference list.
+ *
+ *
+ * @see #getInstructions()
+ * @generated
+ * @ordered
+ */
+ protected EList instructions;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected InstructionBlockImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INSTRUCTION_BLOCK;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getInstructions() {
+ if (instructions == null) {
+ instructions = new EObjectContainmentWithInverseEList(Instruction.class, this, ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS, ArduinoPackage.INSTRUCTION__OWNED_BLOCK);
+ }
+ return instructions;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ return ((InternalEList)(InternalEList>)getInstructions()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ return ((InternalEList>)getInstructions()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ return getInstructions();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ getInstructions().clear();
+ getInstructions().addAll((Collection extends Instruction>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ getInstructions().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS:
+ return instructions != null && !instructions.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //InstructionBlockImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InstructionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InstructionImpl.java
new file mode 100644
index 00000000..7a3078ed
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/InstructionImpl.java
@@ -0,0 +1,216 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Instruction;
+
+import fr.obeo.dsl.arduino.InstructionBlock;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Instruction '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.InstructionImpl#getOwnedBlock Owned Block }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class InstructionImpl extends NamedElementImpl implements Instruction {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected InstructionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INSTRUCTION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public InstructionBlock getOwnedBlock() {
+ if (eContainerFeatureID() != ArduinoPackage.INSTRUCTION__OWNED_BLOCK) return null;
+ return (InstructionBlock)eInternalContainer();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetOwnedBlock(InstructionBlock newOwnedBlock, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newOwnedBlock, ArduinoPackage.INSTRUCTION__OWNED_BLOCK, msgs);
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOwnedBlock(InstructionBlock newOwnedBlock) {
+ if (newOwnedBlock != eInternalContainer() || (eContainerFeatureID() != ArduinoPackage.INSTRUCTION__OWNED_BLOCK && newOwnedBlock != null)) {
+ if (EcoreUtil.isAncestor(this, newOwnedBlock))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newOwnedBlock != null)
+ msgs = ((InternalEObject)newOwnedBlock).eInverseAdd(this, ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS, InstructionBlock.class, msgs);
+ msgs = basicSetOwnedBlock(newOwnedBlock, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.INSTRUCTION__OWNED_BLOCK, newOwnedBlock, newOwnedBlock));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void execute() {
+ // TODO: implement this method
+ // Ensure that you remove @generated or mark it @generated NOT
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetOwnedBlock((InstructionBlock)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ return basicSetOwnedBlock(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ return eInternalContainer().eInverseRemove(this, ArduinoPackage.INSTRUCTION_BLOCK__INSTRUCTIONS, InstructionBlock.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ return getOwnedBlock();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ setOwnedBlock((InstructionBlock)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ setOwnedBlock((InstructionBlock)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INSTRUCTION__OWNED_BLOCK:
+ return getOwnedBlock() != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //InstructionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerConstantImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerConstantImpl.java
new file mode 100644
index 00000000..76e4206b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerConstantImpl.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.IntegerConstant;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Integer Constant '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.IntegerConstantImpl#getValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class IntegerConstantImpl extends ConstantImpl implements IntegerConstant {
+ /**
+ * The default value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final int VALUE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected int value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected IntegerConstantImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INTEGER_CONSTANT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(int newValue) {
+ int oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.INTEGER_CONSTANT__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_CONSTANT__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_CONSTANT__VALUE:
+ setValue((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_CONSTANT__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_CONSTANT__VALUE:
+ return value != VALUE_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //IntegerConstantImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerExpressionImpl.java
new file mode 100644
index 00000000..a6465fc7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerExpressionImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.IntegerExpression;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Integer Expression '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class IntegerExpressionImpl extends ExpressionImpl implements IntegerExpression {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected IntegerExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INTEGER_EXPRESSION;
+ }
+
+} //IntegerExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerModuleGetImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerModuleGetImpl.java
new file mode 100644
index 00000000..1f1c8952
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerModuleGetImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.IntegerModuleGet;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Integer Module Get '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class IntegerModuleGetImpl extends ModuleGetImpl implements IntegerModuleGet {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected IntegerModuleGetImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INTEGER_MODULE_GET;
+ }
+
+} //IntegerModuleGetImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerVariableImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerVariableImpl.java
new file mode 100644
index 00000000..01f0571c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/IntegerVariableImpl.java
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.IntegerVariable;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Integer Variable '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.IntegerVariableImpl#getInitialValue Initial Value }
+ * {@link fr.obeo.dsl.arduino.impl.IntegerVariableImpl#getValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class IntegerVariableImpl extends VariableImpl implements IntegerVariable {
+ /**
+ * The default value of the '{@link #getInitialValue() Initial Value }' attribute.
+ *
+ *
+ * @see #getInitialValue()
+ * @generated
+ * @ordered
+ */
+ protected static final int INITIAL_VALUE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getInitialValue() Initial Value }' attribute.
+ *
+ *
+ * @see #getInitialValue()
+ * @generated
+ * @ordered
+ */
+ protected int initialValue = INITIAL_VALUE_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer VALUE_EDEFAULT = new Integer(0);
+
+ /**
+ * The cached value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected Integer value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected IntegerVariableImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.INTEGER_VARIABLE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getInitialValue() {
+ return initialValue;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setInitialValue(int newInitialValue) {
+ int oldInitialValue = initialValue;
+ initialValue = newInitialValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.INTEGER_VARIABLE__INITIAL_VALUE, oldInitialValue, initialValue));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Integer getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(Integer newValue) {
+ Integer oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.INTEGER_VARIABLE__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_VARIABLE__INITIAL_VALUE:
+ return getInitialValue();
+ case ArduinoPackage.INTEGER_VARIABLE__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_VARIABLE__INITIAL_VALUE:
+ setInitialValue((Integer)newValue);
+ return;
+ case ArduinoPackage.INTEGER_VARIABLE__VALUE:
+ setValue((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_VARIABLE__INITIAL_VALUE:
+ setInitialValue(INITIAL_VALUE_EDEFAULT);
+ return;
+ case ArduinoPackage.INTEGER_VARIABLE__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.INTEGER_VARIABLE__INITIAL_VALUE:
+ return initialValue != INITIAL_VALUE_EDEFAULT;
+ case ArduinoPackage.INTEGER_VARIABLE__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (initialValue: ");
+ result.append(initialValue);
+ result.append(", value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //IntegerVariableImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/LEDImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/LEDImpl.java
new file mode 100644
index 00000000..0170818d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/LEDImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.LED;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'LED '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class LEDImpl extends ArduinoDigitalModuleImpl implements LED {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected LEDImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.LED;
+ }
+
+} //LEDImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/LinkImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/LinkImpl.java
new file mode 100644
index 00000000..a3d3ae83
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/LinkImpl.java
@@ -0,0 +1,263 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.Channel;
+import fr.obeo.dsl.arduino.Link;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+/**
+ *
+ * An implementation of the model object 'Link '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.LinkImpl#getInBoard In Board }
+ * {@link fr.obeo.dsl.arduino.impl.LinkImpl#getOutBoard Out Board }
+ * {@link fr.obeo.dsl.arduino.impl.LinkImpl#getChannels Channels }
+ *
+ *
+ *
+ * @generated
+ */
+public class LinkImpl extends NamedElementImpl implements Link {
+ /**
+ * The cached value of the '{@link #getInBoard() In Board }' reference.
+ *
+ *
+ * @see #getInBoard()
+ * @generated
+ * @ordered
+ */
+ protected Board inBoard;
+
+ /**
+ * The cached value of the '{@link #getOutBoard() Out Board }' reference.
+ *
+ *
+ * @see #getOutBoard()
+ * @generated
+ * @ordered
+ */
+ protected Board outBoard;
+
+ /**
+ * The cached value of the '{@link #getChannels() Channels }' reference list.
+ *
+ *
+ * @see #getChannels()
+ * @generated
+ * @ordered
+ */
+ protected EList channels;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected LinkImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.LINK;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Board getInBoard() {
+ if (inBoard != null && inBoard.eIsProxy()) {
+ InternalEObject oldInBoard = (InternalEObject)inBoard;
+ inBoard = (Board)eResolveProxy(oldInBoard);
+ if (inBoard != oldInBoard) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.LINK__IN_BOARD, oldInBoard, inBoard));
+ }
+ }
+ return inBoard;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Board basicGetInBoard() {
+ return inBoard;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setInBoard(Board newInBoard) {
+ Board oldInBoard = inBoard;
+ inBoard = newInBoard;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.LINK__IN_BOARD, oldInBoard, inBoard));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Board getOutBoard() {
+ if (outBoard != null && outBoard.eIsProxy()) {
+ InternalEObject oldOutBoard = (InternalEObject)outBoard;
+ outBoard = (Board)eResolveProxy(oldOutBoard);
+ if (outBoard != oldOutBoard) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.LINK__OUT_BOARD, oldOutBoard, outBoard));
+ }
+ }
+ return outBoard;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Board basicGetOutBoard() {
+ return outBoard;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOutBoard(Board newOutBoard) {
+ Board oldOutBoard = outBoard;
+ outBoard = newOutBoard;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.LINK__OUT_BOARD, oldOutBoard, outBoard));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getChannels() {
+ if (channels == null) {
+ channels = new EObjectResolvingEList(Channel.class, this, ArduinoPackage.LINK__CHANNELS);
+ }
+ return channels;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.LINK__IN_BOARD:
+ if (resolve) return getInBoard();
+ return basicGetInBoard();
+ case ArduinoPackage.LINK__OUT_BOARD:
+ if (resolve) return getOutBoard();
+ return basicGetOutBoard();
+ case ArduinoPackage.LINK__CHANNELS:
+ return getChannels();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.LINK__IN_BOARD:
+ setInBoard((Board)newValue);
+ return;
+ case ArduinoPackage.LINK__OUT_BOARD:
+ setOutBoard((Board)newValue);
+ return;
+ case ArduinoPackage.LINK__CHANNELS:
+ getChannels().clear();
+ getChannels().addAll((Collection extends Channel>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.LINK__IN_BOARD:
+ setInBoard((Board)null);
+ return;
+ case ArduinoPackage.LINK__OUT_BOARD:
+ setOutBoard((Board)null);
+ return;
+ case ArduinoPackage.LINK__CHANNELS:
+ getChannels().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.LINK__IN_BOARD:
+ return inBoard != null;
+ case ArduinoPackage.LINK__OUT_BOARD:
+ return outBoard != null;
+ case ArduinoPackage.LINK__CHANNELS:
+ return channels != null && !channels.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //LinkImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/MicroServoImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/MicroServoImpl.java
new file mode 100644
index 00000000..73a16850
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/MicroServoImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.MicroServo;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Micro Servo '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class MicroServoImpl extends ArduinoDigitalModuleImpl implements MicroServo {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected MicroServoImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.MICRO_SERVO;
+ }
+
+} //MicroServoImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleAssignmentImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleAssignmentImpl.java
new file mode 100644
index 00000000..f525b26a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleAssignmentImpl.java
@@ -0,0 +1,216 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Module Assignment '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ModuleAssignmentImpl#getOperand Operand }
+ *
+ *
+ *
+ * @generated
+ */
+public class ModuleAssignmentImpl extends ModuleInstructionImpl implements ModuleAssignment {
+ /**
+ * The cached value of the '{@link #getOperand() Operand }' containment reference.
+ *
+ *
+ * @see #getOperand()
+ * @generated
+ * @ordered
+ */
+ protected Expression operand;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ModuleAssignmentImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.MODULE_ASSIGNMENT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Expression getOperand() {
+ return operand;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetOperand(Expression newOperand, NotificationChain msgs) {
+ Expression oldOperand = operand;
+ operand = newOperand;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.MODULE_ASSIGNMENT__OPERAND, oldOperand, newOperand);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperand(Expression newOperand) {
+ if (newOperand != operand) {
+ NotificationChain msgs = null;
+ if (operand != null)
+ msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.MODULE_ASSIGNMENT__OPERAND, null, msgs);
+ if (newOperand != null)
+ msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.MODULE_ASSIGNMENT__OPERAND, null, msgs);
+ msgs = basicSetOperand(newOperand, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.MODULE_ASSIGNMENT__OPERAND, newOperand, newOperand));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND:
+ return basicSetOperand(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND:
+ return getOperand();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND:
+ setOperand((Expression)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND:
+ setOperand((Expression)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND:
+ return operand != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Assignment.class) {
+ switch (derivedFeatureID) {
+ case ArduinoPackage.MODULE_ASSIGNMENT__OPERAND: return ArduinoPackage.ASSIGNMENT__OPERAND;
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Assignment.class) {
+ switch (baseFeatureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND: return ArduinoPackage.MODULE_ASSIGNMENT__OPERAND;
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+} //ModuleAssignmentImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleGetImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleGetImpl.java
new file mode 100644
index 00000000..e340440b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleGetImpl.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Module;
+import fr.obeo.dsl.arduino.ModuleGet;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Module Get '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ModuleGetImpl#getModule Module }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ModuleGetImpl extends ExpressionImpl implements ModuleGet {
+ /**
+ * The cached value of the '{@link #getModule() Module }' reference.
+ *
+ *
+ * @see #getModule()
+ * @generated
+ * @ordered
+ */
+ protected Module module;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ModuleGetImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.MODULE_GET;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Module getModule() {
+ if (module != null && module.eIsProxy()) {
+ InternalEObject oldModule = (InternalEObject)module;
+ module = (Module)eResolveProxy(oldModule);
+ if (module != oldModule) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.MODULE_GET__MODULE, oldModule, module));
+ }
+ }
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Module basicGetModule() {
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setModule(Module newModule) {
+ Module oldModule = module;
+ module = newModule;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.MODULE_GET__MODULE, oldModule, module));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_GET__MODULE:
+ if (resolve) return getModule();
+ return basicGetModule();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_GET__MODULE:
+ setModule((Module)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_GET__MODULE:
+ setModule((Module)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_GET__MODULE:
+ return module != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //ModuleGetImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleInstructionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleInstructionImpl.java
new file mode 100644
index 00000000..0bf6789f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ModuleInstructionImpl.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Module;
+import fr.obeo.dsl.arduino.ModuleInstruction;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Module Instruction '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ModuleInstructionImpl#getModule Module }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ModuleInstructionImpl extends InstructionImpl implements ModuleInstruction {
+ /**
+ * The cached value of the '{@link #getModule() Module }' reference.
+ *
+ *
+ * @see #getModule()
+ * @generated
+ * @ordered
+ */
+ protected Module module;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ModuleInstructionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.MODULE_INSTRUCTION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Module getModule() {
+ if (module != null && module.eIsProxy()) {
+ InternalEObject oldModule = (InternalEObject)module;
+ module = (Module)eResolveProxy(oldModule);
+ if (module != oldModule) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.MODULE_INSTRUCTION__MODULE, oldModule, module));
+ }
+ }
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Module basicGetModule() {
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setModule(Module newModule) {
+ Module oldModule = module;
+ module = newModule;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.MODULE_INSTRUCTION__MODULE, oldModule, module));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_INSTRUCTION__MODULE:
+ if (resolve) return getModule();
+ return basicGetModule();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_INSTRUCTION__MODULE:
+ setModule((Module)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_INSTRUCTION__MODULE:
+ setModule((Module)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.MODULE_INSTRUCTION__MODULE:
+ return module != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //ModuleInstructionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/MusicPlayerImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/MusicPlayerImpl.java
new file mode 100644
index 00000000..17e0287a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/MusicPlayerImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.MusicPlayer;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Music Player '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class MusicPlayerImpl extends ArduinoAnalogModuleImpl implements MusicPlayer {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected MusicPlayerImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.MUSIC_PLAYER;
+ }
+
+} //MusicPlayerImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/NamedElementImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/NamedElementImpl.java
new file mode 100644
index 00000000..3dcb69e8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/NamedElementImpl.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.NamedElement;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Named Element '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.NamedElementImpl#getName Name }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class NamedElementImpl extends EObjectImpl implements NamedElement {
+ /**
+ * The default value of the '{@link #getName() Name }' attribute.
+ *
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name }' attribute.
+ *
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected NamedElementImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.NAMED_ELEMENT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.NAMED_ELEMENT__NAME, oldName, name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.NAMED_ELEMENT__NAME:
+ return getName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.NAMED_ELEMENT__NAME:
+ setName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.NAMED_ELEMENT__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.NAMED_ELEMENT__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(')');
+ return result.toString();
+ }
+
+} //NamedElementImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/PinImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/PinImpl.java
new file mode 100644
index 00000000..99b6769e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/PinImpl.java
@@ -0,0 +1,225 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Pin;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Pin '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.PinImpl#getId Id }
+ * {@link fr.obeo.dsl.arduino.impl.PinImpl#getLevel Level }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class PinImpl extends EObjectImpl implements Pin {
+ /**
+ * The default value of the '{@link #getId() Id }' attribute.
+ *
+ *
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected static final int ID_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getId() Id }' attribute.
+ *
+ *
+ * @see #getId()
+ * @generated
+ * @ordered
+ */
+ protected int id = ID_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getLevel() Level }' attribute.
+ *
+ *
+ * @see #getLevel()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer LEVEL_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLevel() Level }' attribute.
+ *
+ *
+ * @see #getLevel()
+ * @generated
+ * @ordered
+ */
+ protected Integer level = LEVEL_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected PinImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.PIN;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getId() {
+ return id;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setId(int newId) {
+ int oldId = id;
+ id = newId;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.PIN__ID, oldId, id));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Integer getLevel() {
+ return level;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLevel(Integer newLevel) {
+ Integer oldLevel = level;
+ level = newLevel;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.PIN__LEVEL, oldLevel, level));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.PIN__ID:
+ return getId();
+ case ArduinoPackage.PIN__LEVEL:
+ return getLevel();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.PIN__ID:
+ setId((Integer)newValue);
+ return;
+ case ArduinoPackage.PIN__LEVEL:
+ setLevel((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.PIN__ID:
+ setId(ID_EDEFAULT);
+ return;
+ case ArduinoPackage.PIN__LEVEL:
+ setLevel(LEVEL_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.PIN__ID:
+ return id != ID_EDEFAULT;
+ case ArduinoPackage.PIN__LEVEL:
+ return LEVEL_EDEFAULT == null ? level != null : !LEVEL_EDEFAULT.equals(level);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (id: ");
+ result.append(id);
+ result.append(", level: ");
+ result.append(level);
+ result.append(')');
+ return result.toString();
+ }
+
+} //PinImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ProjectImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ProjectImpl.java
new file mode 100644
index 00000000..afa27c1c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ProjectImpl.java
@@ -0,0 +1,283 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.Link;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.Sketch;
+
+import java.util.Collection;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Project '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ProjectImpl#getBoards Boards }
+ * {@link fr.obeo.dsl.arduino.impl.ProjectImpl#getSketch Sketch }
+ * {@link fr.obeo.dsl.arduino.impl.ProjectImpl#getLinks Links }
+ *
+ *
+ *
+ * @generated
+ */
+public class ProjectImpl extends NamedElementImpl implements Project {
+ /**
+ * The cached value of the '{@link #getBoards() Boards }' containment reference list.
+ *
+ *
+ * @see #getBoards()
+ * @generated
+ * @ordered
+ */
+ protected EList boards;
+
+ /**
+ * The cached value of the '{@link #getSketch() Sketch }' containment reference.
+ *
+ *
+ * @see #getSketch()
+ * @generated
+ * @ordered
+ */
+ protected Sketch sketch;
+
+ /**
+ * The cached value of the '{@link #getLinks() Links }' containment reference list.
+ *
+ *
+ * @see #getLinks()
+ * @generated
+ * @ordered
+ */
+ protected EList links;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ProjectImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.PROJECT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getBoards() {
+ if (boards == null) {
+ boards = new EObjectContainmentWithInverseEList(Board.class, this, ArduinoPackage.PROJECT__BOARDS, ArduinoPackage.BOARD__PROJECT);
+ }
+ return boards;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Sketch getSketch() {
+ return sketch;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetSketch(Sketch newSketch, NotificationChain msgs) {
+ Sketch oldSketch = sketch;
+ sketch = newSketch;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.PROJECT__SKETCH, oldSketch, newSketch);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setSketch(Sketch newSketch) {
+ if (newSketch != sketch) {
+ NotificationChain msgs = null;
+ if (sketch != null)
+ msgs = ((InternalEObject)sketch).eInverseRemove(this, ArduinoPackage.SKETCH__PROJECT, Sketch.class, msgs);
+ if (newSketch != null)
+ msgs = ((InternalEObject)newSketch).eInverseAdd(this, ArduinoPackage.SKETCH__PROJECT, Sketch.class, msgs);
+ msgs = basicSetSketch(newSketch, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.PROJECT__SKETCH, newSketch, newSketch));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getLinks() {
+ if (links == null) {
+ links = new EObjectContainmentEList (Link.class, this, ArduinoPackage.PROJECT__LINKS);
+ }
+ return links;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ return ((InternalEList)(InternalEList>)getBoards()).basicAdd(otherEnd, msgs);
+ case ArduinoPackage.PROJECT__SKETCH:
+ if (sketch != null)
+ msgs = ((InternalEObject)sketch).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.PROJECT__SKETCH, null, msgs);
+ return basicSetSketch((Sketch)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ return ((InternalEList>)getBoards()).basicRemove(otherEnd, msgs);
+ case ArduinoPackage.PROJECT__SKETCH:
+ return basicSetSketch(null, msgs);
+ case ArduinoPackage.PROJECT__LINKS:
+ return ((InternalEList>)getLinks()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ return getBoards();
+ case ArduinoPackage.PROJECT__SKETCH:
+ return getSketch();
+ case ArduinoPackage.PROJECT__LINKS:
+ return getLinks();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ getBoards().clear();
+ getBoards().addAll((Collection extends Board>)newValue);
+ return;
+ case ArduinoPackage.PROJECT__SKETCH:
+ setSketch((Sketch)newValue);
+ return;
+ case ArduinoPackage.PROJECT__LINKS:
+ getLinks().clear();
+ getLinks().addAll((Collection extends Link>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ getBoards().clear();
+ return;
+ case ArduinoPackage.PROJECT__SKETCH:
+ setSketch((Sketch)null);
+ return;
+ case ArduinoPackage.PROJECT__LINKS:
+ getLinks().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.PROJECT__BOARDS:
+ return boards != null && !boards.isEmpty();
+ case ArduinoPackage.PROJECT__SKETCH:
+ return sketch != null;
+ case ArduinoPackage.PROJECT__LINKS:
+ return links != null && !links.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //ProjectImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/PushButtonImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/PushButtonImpl.java
new file mode 100644
index 00000000..ca4dd881
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/PushButtonImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.PushButton;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Push Button '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class PushButtonImpl extends ArduinoDigitalModuleImpl implements PushButton {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected PushButtonImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.PUSH_BUTTON;
+ }
+
+} //PushButtonImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/RepeatImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/RepeatImpl.java
new file mode 100644
index 00000000..42649bca
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/RepeatImpl.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Repeat;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Repeat '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.RepeatImpl#getIteration Iteration }
+ *
+ *
+ *
+ * @generated
+ */
+public class RepeatImpl extends ControlImpl implements Repeat {
+ /**
+ * The default value of the '{@link #getIteration() Iteration }' attribute.
+ *
+ *
+ * @see #getIteration()
+ * @generated
+ * @ordered
+ */
+ protected static final int ITERATION_EDEFAULT = 5;
+
+ /**
+ * The cached value of the '{@link #getIteration() Iteration }' attribute.
+ *
+ *
+ * @see #getIteration()
+ * @generated
+ * @ordered
+ */
+ protected int iteration = ITERATION_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected RepeatImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.REPEAT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getIteration() {
+ return iteration;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setIteration(int newIteration) {
+ int oldIteration = iteration;
+ iteration = newIteration;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.REPEAT__ITERATION, oldIteration, iteration));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.REPEAT__ITERATION:
+ return getIteration();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.REPEAT__ITERATION:
+ setIteration((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.REPEAT__ITERATION:
+ setIteration(ITERATION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.REPEAT__ITERATION:
+ return iteration != ITERATION_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (iteration: ");
+ result.append(iteration);
+ result.append(')');
+ return result.toString();
+ }
+
+} //RepeatImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/RotationSensorImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/RotationSensorImpl.java
new file mode 100644
index 00000000..32de1513
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/RotationSensorImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.RotationSensor;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Rotation Sensor '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class RotationSensorImpl extends ArduinoAnalogModuleImpl implements RotationSensor {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected RotationSensorImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.ROTATION_SENSOR;
+ }
+
+} //RotationSensorImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SketchImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SketchImpl.java
new file mode 100644
index 00000000..75ee3abc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SketchImpl.java
@@ -0,0 +1,283 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Channel;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.Sketch;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Sketch '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.SketchImpl#getProject Project }
+ * {@link fr.obeo.dsl.arduino.impl.SketchImpl#getThreads Threads }
+ * {@link fr.obeo.dsl.arduino.impl.SketchImpl#getChannels Channels }
+ *
+ *
+ *
+ * @generated
+ */
+public class SketchImpl extends NamedElementImpl implements Sketch {
+ /**
+ * The cached value of the '{@link #getThreads() Threads }' containment reference list.
+ *
+ *
+ * @see #getThreads()
+ * @generated
+ * @ordered
+ */
+ protected EList threads;
+
+ /**
+ * The cached value of the '{@link #getChannels() Channels }' containment reference list.
+ *
+ *
+ * @see #getChannels()
+ * @generated
+ * @ordered
+ */
+ protected EList channels;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected SketchImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.SKETCH;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Project getProject() {
+ if (eContainerFeatureID() != ArduinoPackage.SKETCH__PROJECT) return null;
+ return (Project)eInternalContainer();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetProject(Project newProject, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newProject, ArduinoPackage.SKETCH__PROJECT, msgs);
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setProject(Project newProject) {
+ if (newProject != eInternalContainer() || (eContainerFeatureID() != ArduinoPackage.SKETCH__PROJECT && newProject != null)) {
+ if (EcoreUtil.isAncestor(this, newProject))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newProject != null)
+ msgs = ((InternalEObject)newProject).eInverseAdd(this, ArduinoPackage.PROJECT__SKETCH, Project.class, msgs);
+ msgs = basicSetProject(newProject, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.SKETCH__PROJECT, newProject, newProject));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getThreads() {
+ if (threads == null) {
+ threads = new EObjectContainmentEList(fr.obeo.dsl.arduino.Thread.class, this, ArduinoPackage.SKETCH__THREADS);
+ }
+ return threads;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getChannels() {
+ if (channels == null) {
+ channels = new EObjectContainmentEList(Channel.class, this, ArduinoPackage.SKETCH__CHANNELS);
+ }
+ return channels;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetProject((Project)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ return basicSetProject(null, msgs);
+ case ArduinoPackage.SKETCH__THREADS:
+ return ((InternalEList>)getThreads()).basicRemove(otherEnd, msgs);
+ case ArduinoPackage.SKETCH__CHANNELS:
+ return ((InternalEList>)getChannels()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ return eInternalContainer().eInverseRemove(this, ArduinoPackage.PROJECT__SKETCH, Project.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ return getProject();
+ case ArduinoPackage.SKETCH__THREADS:
+ return getThreads();
+ case ArduinoPackage.SKETCH__CHANNELS:
+ return getChannels();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ setProject((Project)newValue);
+ return;
+ case ArduinoPackage.SKETCH__THREADS:
+ getThreads().clear();
+ getThreads().addAll((Collection extends fr.obeo.dsl.arduino.Thread>)newValue);
+ return;
+ case ArduinoPackage.SKETCH__CHANNELS:
+ getChannels().clear();
+ getChannels().addAll((Collection extends Channel>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ setProject((Project)null);
+ return;
+ case ArduinoPackage.SKETCH__THREADS:
+ getThreads().clear();
+ return;
+ case ArduinoPackage.SKETCH__CHANNELS:
+ getChannels().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.SKETCH__PROJECT:
+ return getProject() != null;
+ case ArduinoPackage.SKETCH__THREADS:
+ return threads != null && !threads.isEmpty();
+ case ArduinoPackage.SKETCH__CHANNELS:
+ return channels != null && !channels.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //SketchImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SoundSensorImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SoundSensorImpl.java
new file mode 100644
index 00000000..805ef743
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SoundSensorImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.SoundSensor;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Sound Sensor '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class SoundSensorImpl extends ArduinoAnalogModuleImpl implements SoundSensor {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected SoundSensorImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.SOUND_SENSOR;
+ }
+
+} //SoundSensorImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SynchronizationBlockImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SynchronizationBlockImpl.java
new file mode 100644
index 00000000..d179d635
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/SynchronizationBlockImpl.java
@@ -0,0 +1,54 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.InstructionBlock;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Synchronization Block '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class SynchronizationBlockImpl extends ThreadInstructionBlockImpl implements SynchronizationBlock {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected SynchronizationBlockImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.SYNCHRONIZATION_BLOCK;
+ }
+
+} //SynchronizationBlockImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ThreadImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ThreadImpl.java
new file mode 100644
index 00000000..b2b7d1fc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ThreadImpl.java
@@ -0,0 +1,464 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Channel;
+
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.ThreadInstructionBlock;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Thread '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ThreadImpl#getBlocks Blocks }
+ * {@link fr.obeo.dsl.arduino.impl.ThreadImpl#getChannels Channels }
+ * {@link fr.obeo.dsl.arduino.impl.ThreadImpl#getCurrentInstruction Current Instruction }
+ * {@link fr.obeo.dsl.arduino.impl.ThreadImpl#getFirst First }
+ * {@link fr.obeo.dsl.arduino.impl.ThreadImpl#getLast Last }
+ * {@link fr.obeo.dsl.arduino.impl.ThreadImpl#getNbCycle Nb Cycle }
+ *
+ *
+ *
+ * @generated
+ */
+public class ThreadImpl extends NamedElementImpl implements fr.obeo.dsl.arduino.Thread {
+ /**
+ * The cached value of the '{@link #getBlocks() Blocks }' containment reference list.
+ *
+ *
+ * @see #getBlocks()
+ * @generated
+ * @ordered
+ */
+ protected EList blocks;
+
+ /**
+ * The cached value of the '{@link #getChannels() Channels }' reference list.
+ *
+ *
+ * @see #getChannels()
+ * @generated
+ * @ordered
+ */
+ protected EList channels;
+
+ /**
+ * The cached value of the '{@link #getCurrentInstruction() Current Instruction }' reference.
+ *
+ *
+ * @see #getCurrentInstruction()
+ * @generated
+ * @ordered
+ */
+ protected Instruction currentInstruction;
+
+ /**
+ * The cached value of the '{@link #getFirst() First }' reference.
+ *
+ *
+ * @see #getFirst()
+ * @generated
+ * @ordered
+ */
+ protected ThreadInstructionBlock first;
+
+ /**
+ * The cached value of the '{@link #getLast() Last }' reference.
+ *
+ *
+ * @see #getLast()
+ * @generated
+ * @ordered
+ */
+ protected ThreadInstructionBlock last;
+
+ /**
+ * The default value of the '{@link #getNbCycle() Nb Cycle }' attribute.
+ *
+ *
+ * @see #getNbCycle()
+ * @generated
+ * @ordered
+ */
+ protected static final int NB_CYCLE_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getNbCycle() Nb Cycle }' attribute.
+ *
+ *
+ * @see #getNbCycle()
+ * @generated
+ * @ordered
+ */
+ protected int nbCycle = NB_CYCLE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ThreadImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.THREAD;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getBlocks() {
+ if (blocks == null) {
+ blocks = new EObjectContainmentEList(ThreadInstructionBlock.class, this, ArduinoPackage.THREAD__BLOCKS);
+ }
+ return blocks;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getChannels() {
+ if (channels == null) {
+ channels = new EObjectWithInverseResolvingEList(Channel.class, this, ArduinoPackage.THREAD__CHANNELS, ArduinoPackage.CHANNEL__SOURCE);
+ }
+ return channels;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Instruction getCurrentInstruction() {
+ if (currentInstruction != null && currentInstruction.eIsProxy()) {
+ InternalEObject oldCurrentInstruction = (InternalEObject)currentInstruction;
+ currentInstruction = (Instruction)eResolveProxy(oldCurrentInstruction);
+ if (currentInstruction != oldCurrentInstruction) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.THREAD__CURRENT_INSTRUCTION, oldCurrentInstruction, currentInstruction));
+ }
+ }
+ return currentInstruction;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Instruction basicGetCurrentInstruction() {
+ return currentInstruction;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setCurrentInstruction(Instruction newCurrentInstruction) {
+ Instruction oldCurrentInstruction = currentInstruction;
+ currentInstruction = newCurrentInstruction;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.THREAD__CURRENT_INSTRUCTION, oldCurrentInstruction, currentInstruction));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlock getFirst() {
+ if (first != null && first.eIsProxy()) {
+ InternalEObject oldFirst = (InternalEObject)first;
+ first = (ThreadInstructionBlock)eResolveProxy(oldFirst);
+ if (first != oldFirst) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.THREAD__FIRST, oldFirst, first));
+ }
+ }
+ return first;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlock basicGetFirst() {
+ return first;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setFirst(ThreadInstructionBlock newFirst) {
+ ThreadInstructionBlock oldFirst = first;
+ first = newFirst;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.THREAD__FIRST, oldFirst, first));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlock getLast() {
+ if (last != null && last.eIsProxy()) {
+ InternalEObject oldLast = (InternalEObject)last;
+ last = (ThreadInstructionBlock)eResolveProxy(oldLast);
+ if (last != oldLast) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.THREAD__LAST, oldLast, last));
+ }
+ }
+ return last;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlock basicGetLast() {
+ return last;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLast(ThreadInstructionBlock newLast) {
+ ThreadInstructionBlock oldLast = last;
+ last = newLast;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.THREAD__LAST, oldLast, last));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public int getNbCycle() {
+ return nbCycle;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setNbCycle(int newNbCycle) {
+ int oldNbCycle = nbCycle;
+ nbCycle = newNbCycle;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.THREAD__NB_CYCLE, oldNbCycle, nbCycle));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD__CHANNELS:
+ return ((InternalEList)(InternalEList>)getChannels()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD__BLOCKS:
+ return ((InternalEList>)getBlocks()).basicRemove(otherEnd, msgs);
+ case ArduinoPackage.THREAD__CHANNELS:
+ return ((InternalEList>)getChannels()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD__BLOCKS:
+ return getBlocks();
+ case ArduinoPackage.THREAD__CHANNELS:
+ return getChannels();
+ case ArduinoPackage.THREAD__CURRENT_INSTRUCTION:
+ if (resolve) return getCurrentInstruction();
+ return basicGetCurrentInstruction();
+ case ArduinoPackage.THREAD__FIRST:
+ if (resolve) return getFirst();
+ return basicGetFirst();
+ case ArduinoPackage.THREAD__LAST:
+ if (resolve) return getLast();
+ return basicGetLast();
+ case ArduinoPackage.THREAD__NB_CYCLE:
+ return getNbCycle();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD__BLOCKS:
+ getBlocks().clear();
+ getBlocks().addAll((Collection extends ThreadInstructionBlock>)newValue);
+ return;
+ case ArduinoPackage.THREAD__CHANNELS:
+ getChannels().clear();
+ getChannels().addAll((Collection extends Channel>)newValue);
+ return;
+ case ArduinoPackage.THREAD__CURRENT_INSTRUCTION:
+ setCurrentInstruction((Instruction)newValue);
+ return;
+ case ArduinoPackage.THREAD__FIRST:
+ setFirst((ThreadInstructionBlock)newValue);
+ return;
+ case ArduinoPackage.THREAD__LAST:
+ setLast((ThreadInstructionBlock)newValue);
+ return;
+ case ArduinoPackage.THREAD__NB_CYCLE:
+ setNbCycle((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD__BLOCKS:
+ getBlocks().clear();
+ return;
+ case ArduinoPackage.THREAD__CHANNELS:
+ getChannels().clear();
+ return;
+ case ArduinoPackage.THREAD__CURRENT_INSTRUCTION:
+ setCurrentInstruction((Instruction)null);
+ return;
+ case ArduinoPackage.THREAD__FIRST:
+ setFirst((ThreadInstructionBlock)null);
+ return;
+ case ArduinoPackage.THREAD__LAST:
+ setLast((ThreadInstructionBlock)null);
+ return;
+ case ArduinoPackage.THREAD__NB_CYCLE:
+ setNbCycle(NB_CYCLE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD__BLOCKS:
+ return blocks != null && !blocks.isEmpty();
+ case ArduinoPackage.THREAD__CHANNELS:
+ return channels != null && !channels.isEmpty();
+ case ArduinoPackage.THREAD__CURRENT_INSTRUCTION:
+ return currentInstruction != null;
+ case ArduinoPackage.THREAD__FIRST:
+ return first != null;
+ case ArduinoPackage.THREAD__LAST:
+ return last != null;
+ case ArduinoPackage.THREAD__NB_CYCLE:
+ return nbCycle != NB_CYCLE_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (nbCycle: ");
+ result.append(nbCycle);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ThreadImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ThreadInstructionBlockImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ThreadInstructionBlockImpl.java
new file mode 100644
index 00000000..f953832e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/ThreadInstructionBlockImpl.java
@@ -0,0 +1,236 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.ThreadInstructionBlock;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ *
+ * An implementation of the model object 'Thread Instruction Block '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.ThreadInstructionBlockImpl#getThread Thread }
+ * {@link fr.obeo.dsl.arduino.impl.ThreadInstructionBlockImpl#getNext Next }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class ThreadInstructionBlockImpl extends NamedElementImpl implements ThreadInstructionBlock {
+ /**
+ * The cached value of the '{@link #getThread() Thread }' reference.
+ *
+ *
+ * @see #getThread()
+ * @generated
+ * @ordered
+ */
+ protected fr.obeo.dsl.arduino.Thread thread;
+ /**
+ * The cached value of the '{@link #getNext() Next }' reference.
+ *
+ *
+ * @see #getNext()
+ * @generated
+ * @ordered
+ */
+ protected ThreadInstructionBlock next;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected ThreadInstructionBlockImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.THREAD_INSTRUCTION_BLOCK;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread getThread() {
+ if (thread != null && thread.eIsProxy()) {
+ InternalEObject oldThread = (InternalEObject)thread;
+ thread = (fr.obeo.dsl.arduino.Thread)eResolveProxy(oldThread);
+ if (thread != oldThread) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.THREAD_INSTRUCTION_BLOCK__THREAD, oldThread, thread));
+ }
+ }
+ return thread;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public fr.obeo.dsl.arduino.Thread basicGetThread() {
+ return thread;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setThread(fr.obeo.dsl.arduino.Thread newThread) {
+ fr.obeo.dsl.arduino.Thread oldThread = thread;
+ thread = newThread;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.THREAD_INSTRUCTION_BLOCK__THREAD, oldThread, thread));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlock getNext() {
+ if (next != null && next.eIsProxy()) {
+ InternalEObject oldNext = (InternalEObject)next;
+ next = (ThreadInstructionBlock)eResolveProxy(oldNext);
+ if (next != oldNext) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.THREAD_INSTRUCTION_BLOCK__NEXT, oldNext, next));
+ }
+ }
+ return next;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ThreadInstructionBlock basicGetNext() {
+ return next;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setNext(ThreadInstructionBlock newNext) {
+ ThreadInstructionBlock oldNext = next;
+ next = newNext;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.THREAD_INSTRUCTION_BLOCK__NEXT, oldNext, next));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void execute() {
+ // TODO: implement this method
+ // Ensure that you remove @generated or mark it @generated NOT
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__THREAD:
+ if (resolve) return getThread();
+ return basicGetThread();
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__NEXT:
+ if (resolve) return getNext();
+ return basicGetNext();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__THREAD:
+ setThread((fr.obeo.dsl.arduino.Thread)newValue);
+ return;
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__NEXT:
+ setNext((ThreadInstructionBlock)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__THREAD:
+ setThread((fr.obeo.dsl.arduino.Thread)null);
+ return;
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__NEXT:
+ setNext((ThreadInstructionBlock)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__THREAD:
+ return thread != null;
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK__NEXT:
+ return next != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //ThreadInstructionBlockImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryBooleanExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryBooleanExpressionImpl.java
new file mode 100644
index 00000000..0c3fd1c8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryBooleanExpressionImpl.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryBooleanOperatorKind;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Unary Boolean Expression '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.UnaryBooleanExpressionImpl#getOperator Operator }
+ *
+ *
+ *
+ * @generated
+ */
+public class UnaryBooleanExpressionImpl extends UnaryExpressionImpl implements UnaryBooleanExpression {
+ /**
+ * The default value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected static final UnaryBooleanOperatorKind OPERATOR_EDEFAULT = UnaryBooleanOperatorKind.NOT;
+
+ /**
+ * The cached value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected UnaryBooleanOperatorKind operator = OPERATOR_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected UnaryBooleanExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.UNARY_BOOLEAN_EXPRESSION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public UnaryBooleanOperatorKind getOperator() {
+ return operator;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperator(UnaryBooleanOperatorKind newOperator) {
+ UnaryBooleanOperatorKind oldOperator = operator;
+ operator = newOperator == null ? OPERATOR_EDEFAULT : newOperator;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.UNARY_BOOLEAN_EXPRESSION__OPERATOR, oldOperator, operator));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION__OPERATOR:
+ return getOperator();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION__OPERATOR:
+ setOperator((UnaryBooleanOperatorKind)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION__OPERATOR:
+ setOperator(OPERATOR_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION__OPERATOR:
+ return operator != OPERATOR_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (operator: ");
+ result.append(operator);
+ result.append(')');
+ return result.toString();
+ }
+
+} //UnaryBooleanExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryExpressionImpl.java
new file mode 100644
index 00000000..1dae9498
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryExpressionImpl.java
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.UnaryExpression;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Unary Expression '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.UnaryExpressionImpl#getOperand Operand }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class UnaryExpressionImpl extends ExpressionImpl implements UnaryExpression {
+ /**
+ * The cached value of the '{@link #getOperand() Operand }' containment reference.
+ *
+ *
+ * @see #getOperand()
+ * @generated
+ * @ordered
+ */
+ protected Expression operand;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected UnaryExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.UNARY_EXPRESSION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Expression getOperand() {
+ return operand;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetOperand(Expression newOperand, NotificationChain msgs) {
+ Expression oldOperand = operand;
+ operand = newOperand;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.UNARY_EXPRESSION__OPERAND, oldOperand, newOperand);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperand(Expression newOperand) {
+ if (newOperand != operand) {
+ NotificationChain msgs = null;
+ if (operand != null)
+ msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.UNARY_EXPRESSION__OPERAND, null, msgs);
+ if (newOperand != null)
+ msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.UNARY_EXPRESSION__OPERAND, null, msgs);
+ msgs = basicSetOperand(newOperand, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.UNARY_EXPRESSION__OPERAND, newOperand, newOperand));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_EXPRESSION__OPERAND:
+ return basicSetOperand(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_EXPRESSION__OPERAND:
+ return getOperand();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_EXPRESSION__OPERAND:
+ setOperand((Expression)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_EXPRESSION__OPERAND:
+ setOperand((Expression)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_EXPRESSION__OPERAND:
+ return operand != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //UnaryExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryIntegerExpressionImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryIntegerExpressionImpl.java
new file mode 100644
index 00000000..25b3bcde
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UnaryIntegerExpressionImpl.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerOperatorKind;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Unary Integer Expression '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.UnaryIntegerExpressionImpl#getOperator Operator }
+ *
+ *
+ *
+ * @generated
+ */
+public class UnaryIntegerExpressionImpl extends UnaryExpressionImpl implements UnaryIntegerExpression {
+ /**
+ * The default value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected static final UnaryIntegerOperatorKind OPERATOR_EDEFAULT = UnaryIntegerOperatorKind.MINUS;
+
+ /**
+ * The cached value of the '{@link #getOperator() Operator }' attribute.
+ *
+ *
+ * @see #getOperator()
+ * @generated
+ * @ordered
+ */
+ protected UnaryIntegerOperatorKind operator = OPERATOR_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected UnaryIntegerExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.UNARY_INTEGER_EXPRESSION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public UnaryIntegerOperatorKind getOperator() {
+ return operator;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperator(UnaryIntegerOperatorKind newOperator) {
+ UnaryIntegerOperatorKind oldOperator = operator;
+ operator = newOperator == null ? OPERATOR_EDEFAULT : newOperator;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.UNARY_INTEGER_EXPRESSION__OPERATOR, oldOperator, operator));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION__OPERATOR:
+ return getOperator();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION__OPERATOR:
+ setOperator((UnaryIntegerOperatorKind)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION__OPERATOR:
+ setOperator(OPERATOR_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION__OPERATOR:
+ return operator != OPERATOR_EDEFAULT;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (operator: ");
+ result.append(operator);
+ result.append(')');
+ return result.toString();
+ }
+
+} //UnaryIntegerExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UtilitiesImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UtilitiesImpl.java
new file mode 100644
index 00000000..1f76ced7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/UtilitiesImpl.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Utilities;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Utilities '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class UtilitiesImpl extends InstructionImpl implements Utilities {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected UtilitiesImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.UTILITIES;
+ }
+
+} //UtilitiesImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableAssignmentImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableAssignmentImpl.java
new file mode 100644
index 00000000..a429f533
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableAssignmentImpl.java
@@ -0,0 +1,277 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableAssignment;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Variable Assignment '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.VariableAssignmentImpl#getOperand Operand }
+ * {@link fr.obeo.dsl.arduino.impl.VariableAssignmentImpl#getVariable Variable }
+ *
+ *
+ *
+ * @generated
+ */
+public class VariableAssignmentImpl extends InstructionImpl implements VariableAssignment {
+ /**
+ * The cached value of the '{@link #getOperand() Operand }' containment reference.
+ *
+ *
+ * @see #getOperand()
+ * @generated
+ * @ordered
+ */
+ protected Expression operand;
+
+ /**
+ * The cached value of the '{@link #getVariable() Variable }' reference.
+ *
+ *
+ * @see #getVariable()
+ * @generated
+ * @ordered
+ */
+ protected Variable variable;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected VariableAssignmentImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.VARIABLE_ASSIGNMENT;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Expression getOperand() {
+ return operand;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetOperand(Expression newOperand, NotificationChain msgs) {
+ Expression oldOperand = operand;
+ operand = newOperand;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND, oldOperand, newOperand);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOperand(Expression newOperand) {
+ if (newOperand != operand) {
+ NotificationChain msgs = null;
+ if (operand != null)
+ msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND, null, msgs);
+ if (newOperand != null)
+ msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND, null, msgs);
+ msgs = basicSetOperand(newOperand, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND, newOperand, newOperand));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Variable getVariable() {
+ if (variable != null && variable.eIsProxy()) {
+ InternalEObject oldVariable = (InternalEObject)variable;
+ variable = (Variable)eResolveProxy(oldVariable);
+ if (variable != oldVariable) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.VARIABLE_ASSIGNMENT__VARIABLE, oldVariable, variable));
+ }
+ }
+ return variable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Variable basicGetVariable() {
+ return variable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setVariable(Variable newVariable) {
+ Variable oldVariable = variable;
+ variable = newVariable;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE_ASSIGNMENT__VARIABLE, oldVariable, variable));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND:
+ return basicSetOperand(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND:
+ return getOperand();
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__VARIABLE:
+ if (resolve) return getVariable();
+ return basicGetVariable();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND:
+ setOperand((Expression)newValue);
+ return;
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__VARIABLE:
+ setVariable((Variable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND:
+ setOperand((Expression)null);
+ return;
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__VARIABLE:
+ setVariable((Variable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND:
+ return operand != null;
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__VARIABLE:
+ return variable != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Assignment.class) {
+ switch (derivedFeatureID) {
+ case ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND: return ArduinoPackage.ASSIGNMENT__OPERAND;
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Assignment.class) {
+ switch (baseFeatureID) {
+ case ArduinoPackage.ASSIGNMENT__OPERAND: return ArduinoPackage.VARIABLE_ASSIGNMENT__OPERAND;
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+} //VariableAssignmentImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableDeclarationImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableDeclarationImpl.java
new file mode 100644
index 00000000..c3cacf07
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableDeclarationImpl.java
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Variable Declaration '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.VariableDeclarationImpl#getVariable Variable }
+ *
+ *
+ *
+ * @generated
+ */
+public class VariableDeclarationImpl extends InstructionImpl implements VariableDeclaration {
+ /**
+ * The cached value of the '{@link #getVariable() Variable }' containment reference.
+ *
+ *
+ * @see #getVariable()
+ * @generated
+ * @ordered
+ */
+ protected Variable variable;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected VariableDeclarationImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.VARIABLE_DECLARATION;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Variable getVariable() {
+ return variable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetVariable(Variable newVariable, NotificationChain msgs) {
+ Variable oldVariable = variable;
+ variable = newVariable;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE_DECLARATION__VARIABLE, oldVariable, newVariable);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setVariable(Variable newVariable) {
+ if (newVariable != variable) {
+ NotificationChain msgs = null;
+ if (variable != null)
+ msgs = ((InternalEObject)variable).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.VARIABLE_DECLARATION__VARIABLE, null, msgs);
+ if (newVariable != null)
+ msgs = ((InternalEObject)newVariable).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.VARIABLE_DECLARATION__VARIABLE, null, msgs);
+ msgs = basicSetVariable(newVariable, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE_DECLARATION__VARIABLE, newVariable, newVariable));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_DECLARATION__VARIABLE:
+ return basicSetVariable(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_DECLARATION__VARIABLE:
+ return getVariable();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_DECLARATION__VARIABLE:
+ setVariable((Variable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_DECLARATION__VARIABLE:
+ setVariable((Variable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_DECLARATION__VARIABLE:
+ return variable != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //VariableDeclarationImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableImpl.java
new file mode 100644
index 00000000..58a0017d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableImpl.java
@@ -0,0 +1,203 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.NamedElement;
+import fr.obeo.dsl.arduino.Variable;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Variable '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.VariableImpl#getName Name }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class VariableImpl extends ExpressionImpl implements Variable {
+ /**
+ * The default value of the '{@link #getName() Name }' attribute.
+ *
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() Name }' attribute.
+ *
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected VariableImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.VARIABLE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE__NAME, oldName, name));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE__NAME:
+ return getName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE__NAME:
+ setName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == NamedElement.class) {
+ switch (derivedFeatureID) {
+ case ArduinoPackage.VARIABLE__NAME: return ArduinoPackage.NAMED_ELEMENT__NAME;
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == NamedElement.class) {
+ switch (baseFeatureID) {
+ case ArduinoPackage.NAMED_ELEMENT__NAME: return ArduinoPackage.VARIABLE__NAME;
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(')');
+ return result.toString();
+ }
+
+} //VariableImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableRefImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableRefImpl.java
new file mode 100644
index 00000000..fae225fc
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/VariableRefImpl.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableRef;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Variable Ref '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.VariableRefImpl#getVariable Variable }
+ *
+ *
+ *
+ * @generated
+ */
+public class VariableRefImpl extends ExpressionImpl implements VariableRef {
+ /**
+ * The cached value of the '{@link #getVariable() Variable }' reference.
+ *
+ *
+ * @see #getVariable()
+ * @generated
+ * @ordered
+ */
+ protected Variable variable;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected VariableRefImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.VARIABLE_REF;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Variable getVariable() {
+ if (variable != null && variable.eIsProxy()) {
+ InternalEObject oldVariable = (InternalEObject)variable;
+ variable = (Variable)eResolveProxy(oldVariable);
+ if (variable != oldVariable) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.VARIABLE_REF__VARIABLE, oldVariable, variable));
+ }
+ }
+ return variable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Variable basicGetVariable() {
+ return variable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setVariable(Variable newVariable) {
+ Variable oldVariable = variable;
+ variable = newVariable;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.VARIABLE_REF__VARIABLE, oldVariable, variable));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_REF__VARIABLE:
+ if (resolve) return getVariable();
+ return basicGetVariable();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_REF__VARIABLE:
+ setVariable((Variable)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_REF__VARIABLE:
+ setVariable((Variable)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.VARIABLE_REF__VARIABLE:
+ return variable != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //VariableRefImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/WhileImpl.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/WhileImpl.java
new file mode 100644
index 00000000..19e8e8c0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/impl/WhileImpl.java
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.impl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.BooleanExpression;
+import fr.obeo.dsl.arduino.While;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'While '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link fr.obeo.dsl.arduino.impl.WhileImpl#getCondition Condition }
+ *
+ *
+ *
+ * @generated
+ */
+public class WhileImpl extends ControlImpl implements While {
+ /**
+ * The cached value of the '{@link #getCondition() Condition }' containment reference.
+ *
+ *
+ * @see #getCondition()
+ * @generated
+ * @ordered
+ */
+ protected BooleanExpression condition;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected WhileImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.WHILE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanExpression getCondition() {
+ return condition;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetCondition(BooleanExpression newCondition, NotificationChain msgs) {
+ BooleanExpression oldCondition = condition;
+ condition = newCondition;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ArduinoPackage.WHILE__CONDITION, oldCondition, newCondition);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setCondition(BooleanExpression newCondition) {
+ if (newCondition != condition) {
+ NotificationChain msgs = null;
+ if (condition != null)
+ msgs = ((InternalEObject)condition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.WHILE__CONDITION, null, msgs);
+ if (newCondition != null)
+ msgs = ((InternalEObject)newCondition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ArduinoPackage.WHILE__CONDITION, null, msgs);
+ msgs = basicSetCondition(newCondition, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.WHILE__CONDITION, newCondition, newCondition));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.WHILE__CONDITION:
+ return basicSetCondition(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.WHILE__CONDITION:
+ return getCondition();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.WHILE__CONDITION:
+ setCondition((BooleanExpression)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.WHILE__CONDITION:
+ setCondition((BooleanExpression)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.WHILE__CONDITION:
+ return condition != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //WhileImpl
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/util/ArduinoAdapterFactory.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/util/ArduinoAdapterFactory.java
new file mode 100644
index 00000000..14a9de80
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/util/ArduinoAdapterFactory.java
@@ -0,0 +1,1234 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.util;
+
+import fr.obeo.dsl.arduino.AbstractInstructionBlock;
+import fr.obeo.dsl.arduino.AmbientLightSensor;
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.ArduinoModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.BooleanConstant;
+import fr.obeo.dsl.arduino.BooleanExpression;
+import fr.obeo.dsl.arduino.BooleanModuleGet;
+import fr.obeo.dsl.arduino.BooleanVariable;
+import fr.obeo.dsl.arduino.Buzzer;
+import fr.obeo.dsl.arduino.Channel;
+import fr.obeo.dsl.arduino.Constant;
+import fr.obeo.dsl.arduino.Control;
+import fr.obeo.dsl.arduino.Delay;
+import fr.obeo.dsl.arduino.DigitalPin;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.Fan;
+import fr.obeo.dsl.arduino.If;
+import fr.obeo.dsl.arduino.InfraRedSensor;
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.InstructionBlock;
+import fr.obeo.dsl.arduino.IntegerConstant;
+import fr.obeo.dsl.arduino.IntegerExpression;
+import fr.obeo.dsl.arduino.IntegerModuleGet;
+import fr.obeo.dsl.arduino.IntegerVariable;
+import fr.obeo.dsl.arduino.LED;
+import fr.obeo.dsl.arduino.Link;
+import fr.obeo.dsl.arduino.MicroServo;
+import fr.obeo.dsl.arduino.Module;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+import fr.obeo.dsl.arduino.ModuleGet;
+import fr.obeo.dsl.arduino.ModuleInstruction;
+import fr.obeo.dsl.arduino.MusicPlayer;
+import fr.obeo.dsl.arduino.NamedElement;
+import fr.obeo.dsl.arduino.Pin;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.PushButton;
+import fr.obeo.dsl.arduino.Repeat;
+import fr.obeo.dsl.arduino.RotationSensor;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.SoundSensor;
+import fr.obeo.dsl.arduino.Synchonization;
+import fr.obeo.dsl.arduino.Synchronization;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+import fr.obeo.dsl.arduino.ThreadInstructionBlock;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.Utilities;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableAssignment;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+import fr.obeo.dsl.arduino.VariableRef;
+import fr.obeo.dsl.arduino.While;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * The Adapter Factory for the model.
+ * It provides an adapter createXXX
method for each class of the model.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage
+ * @generated
+ */
+public class ArduinoAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ *
+ *
+ * @generated
+ */
+ protected static ArduinoPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ *
+ * @generated
+ */
+ public ArduinoAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ArduinoPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ *
+ * This implementation returns true
if the object is either the model's package or is an instance object of the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoSwitch modelSwitch =
+ new ArduinoSwitch() {
+ @Override
+ public Adapter caseBoard(Board object) {
+ return createBoardAdapter();
+ }
+ @Override
+ public Adapter caseModule(Module object) {
+ return createModuleAdapter();
+ }
+ @Override
+ public Adapter caseDigitalPin(DigitalPin object) {
+ return createDigitalPinAdapter();
+ }
+ @Override
+ public Adapter casePin(Pin object) {
+ return createPinAdapter();
+ }
+ @Override
+ public Adapter caseAnalogPin(AnalogPin object) {
+ return createAnalogPinAdapter();
+ }
+ @Override
+ public Adapter caseSketch(Sketch object) {
+ return createSketchAdapter();
+ }
+ @Override
+ public Adapter caseProject(Project object) {
+ return createProjectAdapter();
+ }
+ @Override
+ public Adapter caseInstruction(Instruction object) {
+ return createInstructionAdapter();
+ }
+ @Override
+ public Adapter caseModuleAssignment(ModuleAssignment object) {
+ return createModuleAssignmentAdapter();
+ }
+ @Override
+ public Adapter caseModuleInstruction(ModuleInstruction object) {
+ return createModuleInstructionAdapter();
+ }
+ @Override
+ public Adapter caseControl(Control object) {
+ return createControlAdapter();
+ }
+ @Override
+ public Adapter caseUtilities(Utilities object) {
+ return createUtilitiesAdapter();
+ }
+ @Override
+ public Adapter caseDelay(Delay object) {
+ return createDelayAdapter();
+ }
+ @Override
+ public Adapter caseNamedElement(NamedElement object) {
+ return createNamedElementAdapter();
+ }
+ @Override
+ public Adapter caseRepeat(Repeat object) {
+ return createRepeatAdapter();
+ }
+ @Override
+ public Adapter caseModuleGet(ModuleGet object) {
+ return createModuleGetAdapter();
+ }
+ @Override
+ public Adapter caseWhile(While object) {
+ return createWhileAdapter();
+ }
+ @Override
+ public Adapter caseBinaryExpression(BinaryExpression object) {
+ return createBinaryExpressionAdapter();
+ }
+ @Override
+ public Adapter caseVariable(Variable object) {
+ return createVariableAdapter();
+ }
+ @Override
+ public Adapter caseVariableAssignment(VariableAssignment object) {
+ return createVariableAssignmentAdapter();
+ }
+ @Override
+ public Adapter caseBinaryIntegerExpression(BinaryIntegerExpression object) {
+ return createBinaryIntegerExpressionAdapter();
+ }
+ @Override
+ public Adapter caseBinaryBooleanExpression(BinaryBooleanExpression object) {
+ return createBinaryBooleanExpressionAdapter();
+ }
+ @Override
+ public Adapter caseExpression(Expression object) {
+ return createExpressionAdapter();
+ }
+ @Override
+ public Adapter caseConstant(Constant object) {
+ return createConstantAdapter();
+ }
+ @Override
+ public Adapter caseIf(If object) {
+ return createIfAdapter();
+ }
+ @Override
+ public Adapter caseIntegerConstant(IntegerConstant object) {
+ return createIntegerConstantAdapter();
+ }
+ @Override
+ public Adapter caseBooleanConstant(BooleanConstant object) {
+ return createBooleanConstantAdapter();
+ }
+ @Override
+ public Adapter caseBooleanExpression(BooleanExpression object) {
+ return createBooleanExpressionAdapter();
+ }
+ @Override
+ public Adapter caseIntegerExpression(IntegerExpression object) {
+ return createIntegerExpressionAdapter();
+ }
+ @Override
+ public Adapter caseAssignment(Assignment object) {
+ return createAssignmentAdapter();
+ }
+ @Override
+ public Adapter caseIntegerVariable(IntegerVariable object) {
+ return createIntegerVariableAdapter();
+ }
+ @Override
+ public Adapter caseBooleanVariable(BooleanVariable object) {
+ return createBooleanVariableAdapter();
+ }
+ @Override
+ public Adapter caseBooleanModuleGet(BooleanModuleGet object) {
+ return createBooleanModuleGetAdapter();
+ }
+ @Override
+ public Adapter caseIntegerModuleGet(IntegerModuleGet object) {
+ return createIntegerModuleGetAdapter();
+ }
+ @Override
+ public Adapter caseUnaryExpression(UnaryExpression object) {
+ return createUnaryExpressionAdapter();
+ }
+ @Override
+ public Adapter caseUnaryBooleanExpression(UnaryBooleanExpression object) {
+ return createUnaryBooleanExpressionAdapter();
+ }
+ @Override
+ public Adapter caseUnaryIntegerExpression(UnaryIntegerExpression object) {
+ return createUnaryIntegerExpressionAdapter();
+ }
+ @Override
+ public Adapter caseVariableDeclaration(VariableDeclaration object) {
+ return createVariableDeclarationAdapter();
+ }
+ @Override
+ public Adapter caseVariableRef(VariableRef object) {
+ return createVariableRefAdapter();
+ }
+ @Override
+ public Adapter caseLED(LED object) {
+ return createLEDAdapter();
+ }
+ @Override
+ public Adapter casePushButton(PushButton object) {
+ return createPushButtonAdapter();
+ }
+ @Override
+ public Adapter caseBuzzer(Buzzer object) {
+ return createBuzzerAdapter();
+ }
+ @Override
+ public Adapter caseRotationSensor(RotationSensor object) {
+ return createRotationSensorAdapter();
+ }
+ @Override
+ public Adapter caseMicroServo(MicroServo object) {
+ return createMicroServoAdapter();
+ }
+ @Override
+ public Adapter caseInfraRedSensor(InfraRedSensor object) {
+ return createInfraRedSensorAdapter();
+ }
+ @Override
+ public Adapter caseAmbientLightSensor(AmbientLightSensor object) {
+ return createAmbientLightSensorAdapter();
+ }
+ @Override
+ public Adapter caseSoundSensor(SoundSensor object) {
+ return createSoundSensorAdapter();
+ }
+ @Override
+ public Adapter caseFan(Fan object) {
+ return createFanAdapter();
+ }
+ @Override
+ public Adapter caseMusicPlayer(MusicPlayer object) {
+ return createMusicPlayerAdapter();
+ }
+ @Override
+ public Adapter caseArduinoModule(ArduinoModule object) {
+ return createArduinoModuleAdapter();
+ }
+ @Override
+ public Adapter caseArduinoBoard(ArduinoBoard object) {
+ return createArduinoBoardAdapter();
+ }
+ @Override
+ public Adapter caseArduinoDigitalModule(ArduinoDigitalModule object) {
+ return createArduinoDigitalModuleAdapter();
+ }
+ @Override
+ public Adapter caseArduinoAnalogModule(ArduinoAnalogModule object) {
+ return createArduinoAnalogModuleAdapter();
+ }
+ @Override
+ public Adapter caseThread(fr.obeo.dsl.arduino.Thread object) {
+ return createThreadAdapter();
+ }
+ @Override
+ public Adapter caseChannel(Channel object) {
+ return createChannelAdapter();
+ }
+ @Override
+ public Adapter caseLink(Link object) {
+ return createLinkAdapter();
+ }
+ @Override
+ public Adapter caseSynchronizationBlock(SynchronizationBlock object) {
+ return createSynchronizationBlockAdapter();
+ }
+ @Override
+ public Adapter caseInstructionBlock(InstructionBlock object) {
+ return createInstructionBlockAdapter();
+ }
+ @Override
+ public Adapter caseThreadInstructionBlock(ThreadInstructionBlock object) {
+ return createThreadInstructionBlockAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ *
+ * @param target the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Board Board }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Board
+ * @generated
+ */
+ public Adapter createBoardAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Module Module }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Module
+ * @generated
+ */
+ public Adapter createModuleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.DigitalPin Digital Pin }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.DigitalPin
+ * @generated
+ */
+ public Adapter createDigitalPinAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Pin Pin }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Pin
+ * @generated
+ */
+ public Adapter createPinAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.AnalogPin Analog Pin }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.AnalogPin
+ * @generated
+ */
+ public Adapter createAnalogPinAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Sketch Sketch }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Sketch
+ * @generated
+ */
+ public Adapter createSketchAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Project Project }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Project
+ * @generated
+ */
+ public Adapter createProjectAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Instruction Instruction }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Instruction
+ * @generated
+ */
+ public Adapter createInstructionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ModuleAssignment Module Assignment }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ModuleAssignment
+ * @generated
+ */
+ public Adapter createModuleAssignmentAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ModuleInstruction Module Instruction }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ModuleInstruction
+ * @generated
+ */
+ public Adapter createModuleInstructionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Control Control }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Control
+ * @generated
+ */
+ public Adapter createControlAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Utilities Utilities }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Utilities
+ * @generated
+ */
+ public Adapter createUtilitiesAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Delay Delay }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Delay
+ * @generated
+ */
+ public Adapter createDelayAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.NamedElement Named Element }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.NamedElement
+ * @generated
+ */
+ public Adapter createNamedElementAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Repeat Repeat }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Repeat
+ * @generated
+ */
+ public Adapter createRepeatAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ModuleGet Module Get }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ModuleGet
+ * @generated
+ */
+ public Adapter createModuleGetAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.While While }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.While
+ * @generated
+ */
+ public Adapter createWhileAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BinaryExpression Binary Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BinaryExpression
+ * @generated
+ */
+ public Adapter createBinaryExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Variable Variable }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Variable
+ * @generated
+ */
+ public Adapter createVariableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.VariableAssignment Variable Assignment }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.VariableAssignment
+ * @generated
+ */
+ public Adapter createVariableAssignmentAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BinaryIntegerExpression Binary Integer Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BinaryIntegerExpression
+ * @generated
+ */
+ public Adapter createBinaryIntegerExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BinaryBooleanExpression Binary Boolean Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BinaryBooleanExpression
+ * @generated
+ */
+ public Adapter createBinaryBooleanExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Expression Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Expression
+ * @generated
+ */
+ public Adapter createExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Constant Constant }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Constant
+ * @generated
+ */
+ public Adapter createConstantAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.If If }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.If
+ * @generated
+ */
+ public Adapter createIfAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.IntegerConstant Integer Constant }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.IntegerConstant
+ * @generated
+ */
+ public Adapter createIntegerConstantAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BooleanConstant Boolean Constant }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BooleanConstant
+ * @generated
+ */
+ public Adapter createBooleanConstantAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BooleanExpression Boolean Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BooleanExpression
+ * @generated
+ */
+ public Adapter createBooleanExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.IntegerExpression Integer Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.IntegerExpression
+ * @generated
+ */
+ public Adapter createIntegerExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Assignment Assignment }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Assignment
+ * @generated
+ */
+ public Adapter createAssignmentAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.IntegerVariable Integer Variable }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.IntegerVariable
+ * @generated
+ */
+ public Adapter createIntegerVariableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BooleanVariable Boolean Variable }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BooleanVariable
+ * @generated
+ */
+ public Adapter createBooleanVariableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.BooleanModuleGet Boolean Module Get }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.BooleanModuleGet
+ * @generated
+ */
+ public Adapter createBooleanModuleGetAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.IntegerModuleGet Integer Module Get }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.IntegerModuleGet
+ * @generated
+ */
+ public Adapter createIntegerModuleGetAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.UnaryExpression Unary Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.UnaryExpression
+ * @generated
+ */
+ public Adapter createUnaryExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.UnaryBooleanExpression Unary Boolean Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.UnaryBooleanExpression
+ * @generated
+ */
+ public Adapter createUnaryBooleanExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.UnaryIntegerExpression Unary Integer Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.UnaryIntegerExpression
+ * @generated
+ */
+ public Adapter createUnaryIntegerExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.VariableDeclaration Variable Declaration }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.VariableDeclaration
+ * @generated
+ */
+ public Adapter createVariableDeclarationAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.VariableRef Variable Ref }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.VariableRef
+ * @generated
+ */
+ public Adapter createVariableRefAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.LED LED }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.LED
+ * @generated
+ */
+ public Adapter createLEDAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.PushButton Push Button }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.PushButton
+ * @generated
+ */
+ public Adapter createPushButtonAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Buzzer Buzzer }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Buzzer
+ * @generated
+ */
+ public Adapter createBuzzerAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.RotationSensor Rotation Sensor }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.RotationSensor
+ * @generated
+ */
+ public Adapter createRotationSensorAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.MicroServo Micro Servo }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.MicroServo
+ * @generated
+ */
+ public Adapter createMicroServoAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.InfraRedSensor Infra Red Sensor }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.InfraRedSensor
+ * @generated
+ */
+ public Adapter createInfraRedSensorAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.AmbientLightSensor Ambient Light Sensor }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.AmbientLightSensor
+ * @generated
+ */
+ public Adapter createAmbientLightSensorAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.SoundSensor Sound Sensor }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.SoundSensor
+ * @generated
+ */
+ public Adapter createSoundSensorAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Fan Fan }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Fan
+ * @generated
+ */
+ public Adapter createFanAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.MusicPlayer Music Player }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.MusicPlayer
+ * @generated
+ */
+ public Adapter createMusicPlayerAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ArduinoModule Module }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ArduinoModule
+ * @generated
+ */
+ public Adapter createArduinoModuleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ArduinoBoard Board }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ArduinoBoard
+ * @generated
+ */
+ public Adapter createArduinoBoardAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ArduinoDigitalModule Digital Module }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ArduinoDigitalModule
+ * @generated
+ */
+ public Adapter createArduinoDigitalModuleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ArduinoAnalogModule Analog Module }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ArduinoAnalogModule
+ * @generated
+ */
+ public Adapter createArduinoAnalogModuleAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Thread Thread }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Thread
+ * @generated
+ */
+ public Adapter createThreadAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Channel Channel }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Channel
+ * @generated
+ */
+ public Adapter createChannelAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.Link Link }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.Link
+ * @generated
+ */
+ public Adapter createLinkAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.SynchronizationBlock Synchronization Block }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.SynchronizationBlock
+ * @generated
+ */
+ public Adapter createSynchronizationBlockAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.InstructionBlock Instruction Block }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.InstructionBlock
+ * @generated
+ */
+ public Adapter createInstructionBlockAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link fr.obeo.dsl.arduino.ThreadInstructionBlock Thread Instruction Block }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see fr.obeo.dsl.arduino.ThreadInstructionBlock
+ * @generated
+ */
+ public Adapter createThreadInstructionBlockAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ *
+ * This default implementation returns null.
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //ArduinoAdapterFactory
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/util/ArduinoSwitch.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/util/ArduinoSwitch.java
new file mode 100644
index 00000000..ac135a6a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src-gen/fr/obeo/dsl/arduino/util/ArduinoSwitch.java
@@ -0,0 +1,1533 @@
+/**
+ * Copyright (c) 2013 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 fr.obeo.dsl.arduino.util;
+
+import fr.obeo.dsl.arduino.AbstractInstructionBlock;
+import fr.obeo.dsl.arduino.AmbientLightSensor;
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+import fr.obeo.dsl.arduino.ArduinoBoard;
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.ArduinoModule;
+import fr.obeo.dsl.arduino.ArduinoPackage;
+import fr.obeo.dsl.arduino.Assignment;
+import fr.obeo.dsl.arduino.BinaryBooleanExpression;
+import fr.obeo.dsl.arduino.BinaryExpression;
+import fr.obeo.dsl.arduino.BinaryIntegerExpression;
+import fr.obeo.dsl.arduino.Block;
+import fr.obeo.dsl.arduino.Board;
+import fr.obeo.dsl.arduino.BooleanConstant;
+import fr.obeo.dsl.arduino.BooleanExpression;
+import fr.obeo.dsl.arduino.BooleanModuleGet;
+import fr.obeo.dsl.arduino.BooleanVariable;
+import fr.obeo.dsl.arduino.Buzzer;
+import fr.obeo.dsl.arduino.Channel;
+import fr.obeo.dsl.arduino.Constant;
+import fr.obeo.dsl.arduino.Control;
+import fr.obeo.dsl.arduino.Delay;
+import fr.obeo.dsl.arduino.DigitalPin;
+import fr.obeo.dsl.arduino.Expression;
+import fr.obeo.dsl.arduino.Fan;
+import fr.obeo.dsl.arduino.If;
+import fr.obeo.dsl.arduino.InfraRedSensor;
+import fr.obeo.dsl.arduino.Instruction;
+import fr.obeo.dsl.arduino.InstructionBlock;
+import fr.obeo.dsl.arduino.IntegerConstant;
+import fr.obeo.dsl.arduino.IntegerExpression;
+import fr.obeo.dsl.arduino.IntegerModuleGet;
+import fr.obeo.dsl.arduino.IntegerVariable;
+import fr.obeo.dsl.arduino.LED;
+import fr.obeo.dsl.arduino.Link;
+import fr.obeo.dsl.arduino.MicroServo;
+import fr.obeo.dsl.arduino.Module;
+import fr.obeo.dsl.arduino.ModuleAssignment;
+import fr.obeo.dsl.arduino.ModuleGet;
+import fr.obeo.dsl.arduino.ModuleInstruction;
+import fr.obeo.dsl.arduino.MusicPlayer;
+import fr.obeo.dsl.arduino.NamedElement;
+import fr.obeo.dsl.arduino.Pin;
+import fr.obeo.dsl.arduino.Project;
+import fr.obeo.dsl.arduino.PushButton;
+import fr.obeo.dsl.arduino.Repeat;
+import fr.obeo.dsl.arduino.RotationSensor;
+import fr.obeo.dsl.arduino.Sketch;
+import fr.obeo.dsl.arduino.SoundSensor;
+import fr.obeo.dsl.arduino.Synchonization;
+import fr.obeo.dsl.arduino.Synchronization;
+import fr.obeo.dsl.arduino.SynchronizationBlock;
+import fr.obeo.dsl.arduino.ThreadInstructionBlock;
+import fr.obeo.dsl.arduino.UnaryBooleanExpression;
+import fr.obeo.dsl.arduino.UnaryExpression;
+import fr.obeo.dsl.arduino.UnaryIntegerExpression;
+import fr.obeo.dsl.arduino.Utilities;
+import fr.obeo.dsl.arduino.Variable;
+import fr.obeo.dsl.arduino.VariableAssignment;
+import fr.obeo.dsl.arduino.VariableDeclaration;
+import fr.obeo.dsl.arduino.VariableRef;
+import fr.obeo.dsl.arduino.While;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ *
+ * The Switch for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ *
+ * @see fr.obeo.dsl.arduino.ArduinoPackage
+ * @generated
+ */
+public class ArduinoSwitch extends Switch {
+ /**
+ * The cached model package
+ *
+ *
+ * @generated
+ */
+ protected static ArduinoPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ *
+ * @generated
+ */
+ public ArduinoSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ArduinoPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ *
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that result.
+ *
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ArduinoPackage.BOARD: {
+ Board board = (Board)theEObject;
+ T result = caseBoard(board);
+ if (result == null) result = caseNamedElement(board);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.MODULE: {
+ Module module = (Module)theEObject;
+ T result = caseModule(module);
+ if (result == null) result = caseNamedElement(module);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.DIGITAL_PIN: {
+ DigitalPin digitalPin = (DigitalPin)theEObject;
+ T result = caseDigitalPin(digitalPin);
+ if (result == null) result = casePin(digitalPin);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.PIN: {
+ Pin pin = (Pin)theEObject;
+ T result = casePin(pin);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ANALOG_PIN: {
+ AnalogPin analogPin = (AnalogPin)theEObject;
+ T result = caseAnalogPin(analogPin);
+ if (result == null) result = casePin(analogPin);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.SKETCH: {
+ Sketch sketch = (Sketch)theEObject;
+ T result = caseSketch(sketch);
+ if (result == null) result = caseNamedElement(sketch);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.PROJECT: {
+ Project project = (Project)theEObject;
+ T result = caseProject(project);
+ if (result == null) result = caseNamedElement(project);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INSTRUCTION: {
+ Instruction instruction = (Instruction)theEObject;
+ T result = caseInstruction(instruction);
+ if (result == null) result = caseNamedElement(instruction);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.MODULE_ASSIGNMENT: {
+ ModuleAssignment moduleAssignment = (ModuleAssignment)theEObject;
+ T result = caseModuleAssignment(moduleAssignment);
+ if (result == null) result = caseModuleInstruction(moduleAssignment);
+ if (result == null) result = caseAssignment(moduleAssignment);
+ if (result == null) result = caseInstruction(moduleAssignment);
+ if (result == null) result = caseNamedElement(moduleAssignment);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.MODULE_INSTRUCTION: {
+ ModuleInstruction moduleInstruction = (ModuleInstruction)theEObject;
+ T result = caseModuleInstruction(moduleInstruction);
+ if (result == null) result = caseInstruction(moduleInstruction);
+ if (result == null) result = caseNamedElement(moduleInstruction);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.CONTROL: {
+ Control control = (Control)theEObject;
+ T result = caseControl(control);
+ if (result == null) result = caseInstruction(control);
+ if (result == null) result = caseNamedElement(control);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.UTILITIES: {
+ Utilities utilities = (Utilities)theEObject;
+ T result = caseUtilities(utilities);
+ if (result == null) result = caseInstruction(utilities);
+ if (result == null) result = caseNamedElement(utilities);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.DELAY: {
+ Delay delay = (Delay)theEObject;
+ T result = caseDelay(delay);
+ if (result == null) result = caseUtilities(delay);
+ if (result == null) result = caseInstruction(delay);
+ if (result == null) result = caseNamedElement(delay);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.NAMED_ELEMENT: {
+ NamedElement namedElement = (NamedElement)theEObject;
+ T result = caseNamedElement(namedElement);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.REPEAT: {
+ Repeat repeat = (Repeat)theEObject;
+ T result = caseRepeat(repeat);
+ if (result == null) result = caseControl(repeat);
+ if (result == null) result = caseInstruction(repeat);
+ if (result == null) result = caseNamedElement(repeat);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.MODULE_GET: {
+ ModuleGet moduleGet = (ModuleGet)theEObject;
+ T result = caseModuleGet(moduleGet);
+ if (result == null) result = caseExpression(moduleGet);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.WHILE: {
+ While while_ = (While)theEObject;
+ T result = caseWhile(while_);
+ if (result == null) result = caseControl(while_);
+ if (result == null) result = caseInstruction(while_);
+ if (result == null) result = caseNamedElement(while_);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BINARY_EXPRESSION: {
+ BinaryExpression binaryExpression = (BinaryExpression)theEObject;
+ T result = caseBinaryExpression(binaryExpression);
+ if (result == null) result = caseExpression(binaryExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.VARIABLE: {
+ Variable variable = (Variable)theEObject;
+ T result = caseVariable(variable);
+ if (result == null) result = caseExpression(variable);
+ if (result == null) result = caseNamedElement(variable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.VARIABLE_ASSIGNMENT: {
+ VariableAssignment variableAssignment = (VariableAssignment)theEObject;
+ T result = caseVariableAssignment(variableAssignment);
+ if (result == null) result = caseAssignment(variableAssignment);
+ if (result == null) result = caseInstruction(variableAssignment);
+ if (result == null) result = caseNamedElement(variableAssignment);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BINARY_INTEGER_EXPRESSION: {
+ BinaryIntegerExpression binaryIntegerExpression = (BinaryIntegerExpression)theEObject;
+ T result = caseBinaryIntegerExpression(binaryIntegerExpression);
+ if (result == null) result = caseBinaryExpression(binaryIntegerExpression);
+ if (result == null) result = caseIntegerExpression(binaryIntegerExpression);
+ if (result == null) result = caseExpression(binaryIntegerExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BINARY_BOOLEAN_EXPRESSION: {
+ BinaryBooleanExpression binaryBooleanExpression = (BinaryBooleanExpression)theEObject;
+ T result = caseBinaryBooleanExpression(binaryBooleanExpression);
+ if (result == null) result = caseBinaryExpression(binaryBooleanExpression);
+ if (result == null) result = caseBooleanExpression(binaryBooleanExpression);
+ if (result == null) result = caseExpression(binaryBooleanExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.EXPRESSION: {
+ Expression expression = (Expression)theEObject;
+ T result = caseExpression(expression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.CONSTANT: {
+ Constant constant = (Constant)theEObject;
+ T result = caseConstant(constant);
+ if (result == null) result = caseExpression(constant);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.IF: {
+ If if_ = (If)theEObject;
+ T result = caseIf(if_);
+ if (result == null) result = caseControl(if_);
+ if (result == null) result = caseInstruction(if_);
+ if (result == null) result = caseNamedElement(if_);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INTEGER_CONSTANT: {
+ IntegerConstant integerConstant = (IntegerConstant)theEObject;
+ T result = caseIntegerConstant(integerConstant);
+ if (result == null) result = caseConstant(integerConstant);
+ if (result == null) result = caseIntegerExpression(integerConstant);
+ if (result == null) result = caseExpression(integerConstant);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BOOLEAN_CONSTANT: {
+ BooleanConstant booleanConstant = (BooleanConstant)theEObject;
+ T result = caseBooleanConstant(booleanConstant);
+ if (result == null) result = caseConstant(booleanConstant);
+ if (result == null) result = caseBooleanExpression(booleanConstant);
+ if (result == null) result = caseExpression(booleanConstant);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BOOLEAN_EXPRESSION: {
+ BooleanExpression booleanExpression = (BooleanExpression)theEObject;
+ T result = caseBooleanExpression(booleanExpression);
+ if (result == null) result = caseExpression(booleanExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INTEGER_EXPRESSION: {
+ IntegerExpression integerExpression = (IntegerExpression)theEObject;
+ T result = caseIntegerExpression(integerExpression);
+ if (result == null) result = caseExpression(integerExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ASSIGNMENT: {
+ Assignment assignment = (Assignment)theEObject;
+ T result = caseAssignment(assignment);
+ if (result == null) result = caseInstruction(assignment);
+ if (result == null) result = caseNamedElement(assignment);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INTEGER_VARIABLE: {
+ IntegerVariable integerVariable = (IntegerVariable)theEObject;
+ T result = caseIntegerVariable(integerVariable);
+ if (result == null) result = caseVariable(integerVariable);
+ if (result == null) result = caseIntegerExpression(integerVariable);
+ if (result == null) result = caseExpression(integerVariable);
+ if (result == null) result = caseNamedElement(integerVariable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BOOLEAN_VARIABLE: {
+ BooleanVariable booleanVariable = (BooleanVariable)theEObject;
+ T result = caseBooleanVariable(booleanVariable);
+ if (result == null) result = caseVariable(booleanVariable);
+ if (result == null) result = caseBooleanExpression(booleanVariable);
+ if (result == null) result = caseExpression(booleanVariable);
+ if (result == null) result = caseNamedElement(booleanVariable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BOOLEAN_MODULE_GET: {
+ BooleanModuleGet booleanModuleGet = (BooleanModuleGet)theEObject;
+ T result = caseBooleanModuleGet(booleanModuleGet);
+ if (result == null) result = caseModuleGet(booleanModuleGet);
+ if (result == null) result = caseBooleanExpression(booleanModuleGet);
+ if (result == null) result = caseExpression(booleanModuleGet);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INTEGER_MODULE_GET: {
+ IntegerModuleGet integerModuleGet = (IntegerModuleGet)theEObject;
+ T result = caseIntegerModuleGet(integerModuleGet);
+ if (result == null) result = caseModuleGet(integerModuleGet);
+ if (result == null) result = caseIntegerExpression(integerModuleGet);
+ if (result == null) result = caseExpression(integerModuleGet);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.UNARY_EXPRESSION: {
+ UnaryExpression unaryExpression = (UnaryExpression)theEObject;
+ T result = caseUnaryExpression(unaryExpression);
+ if (result == null) result = caseExpression(unaryExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.UNARY_BOOLEAN_EXPRESSION: {
+ UnaryBooleanExpression unaryBooleanExpression = (UnaryBooleanExpression)theEObject;
+ T result = caseUnaryBooleanExpression(unaryBooleanExpression);
+ if (result == null) result = caseUnaryExpression(unaryBooleanExpression);
+ if (result == null) result = caseBooleanExpression(unaryBooleanExpression);
+ if (result == null) result = caseExpression(unaryBooleanExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.UNARY_INTEGER_EXPRESSION: {
+ UnaryIntegerExpression unaryIntegerExpression = (UnaryIntegerExpression)theEObject;
+ T result = caseUnaryIntegerExpression(unaryIntegerExpression);
+ if (result == null) result = caseUnaryExpression(unaryIntegerExpression);
+ if (result == null) result = caseIntegerExpression(unaryIntegerExpression);
+ if (result == null) result = caseExpression(unaryIntegerExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.VARIABLE_DECLARATION: {
+ VariableDeclaration variableDeclaration = (VariableDeclaration)theEObject;
+ T result = caseVariableDeclaration(variableDeclaration);
+ if (result == null) result = caseInstruction(variableDeclaration);
+ if (result == null) result = caseNamedElement(variableDeclaration);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.VARIABLE_REF: {
+ VariableRef variableRef = (VariableRef)theEObject;
+ T result = caseVariableRef(variableRef);
+ if (result == null) result = caseExpression(variableRef);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.LED: {
+ LED led = (LED)theEObject;
+ T result = caseLED(led);
+ if (result == null) result = caseArduinoDigitalModule(led);
+ if (result == null) result = caseArduinoModule(led);
+ if (result == null) result = caseModule(led);
+ if (result == null) result = caseNamedElement(led);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.PUSH_BUTTON: {
+ PushButton pushButton = (PushButton)theEObject;
+ T result = casePushButton(pushButton);
+ if (result == null) result = caseArduinoDigitalModule(pushButton);
+ if (result == null) result = caseArduinoModule(pushButton);
+ if (result == null) result = caseModule(pushButton);
+ if (result == null) result = caseNamedElement(pushButton);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.BUZZER: {
+ Buzzer buzzer = (Buzzer)theEObject;
+ T result = caseBuzzer(buzzer);
+ if (result == null) result = caseArduinoDigitalModule(buzzer);
+ if (result == null) result = caseArduinoModule(buzzer);
+ if (result == null) result = caseModule(buzzer);
+ if (result == null) result = caseNamedElement(buzzer);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ROTATION_SENSOR: {
+ RotationSensor rotationSensor = (RotationSensor)theEObject;
+ T result = caseRotationSensor(rotationSensor);
+ if (result == null) result = caseArduinoAnalogModule(rotationSensor);
+ if (result == null) result = caseArduinoModule(rotationSensor);
+ if (result == null) result = caseModule(rotationSensor);
+ if (result == null) result = caseNamedElement(rotationSensor);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.MICRO_SERVO: {
+ MicroServo microServo = (MicroServo)theEObject;
+ T result = caseMicroServo(microServo);
+ if (result == null) result = caseArduinoDigitalModule(microServo);
+ if (result == null) result = caseArduinoModule(microServo);
+ if (result == null) result = caseModule(microServo);
+ if (result == null) result = caseNamedElement(microServo);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INFRA_RED_SENSOR: {
+ InfraRedSensor infraRedSensor = (InfraRedSensor)theEObject;
+ T result = caseInfraRedSensor(infraRedSensor);
+ if (result == null) result = caseArduinoDigitalModule(infraRedSensor);
+ if (result == null) result = caseArduinoModule(infraRedSensor);
+ if (result == null) result = caseModule(infraRedSensor);
+ if (result == null) result = caseNamedElement(infraRedSensor);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.AMBIENT_LIGHT_SENSOR: {
+ AmbientLightSensor ambientLightSensor = (AmbientLightSensor)theEObject;
+ T result = caseAmbientLightSensor(ambientLightSensor);
+ if (result == null) result = caseArduinoAnalogModule(ambientLightSensor);
+ if (result == null) result = caseArduinoModule(ambientLightSensor);
+ if (result == null) result = caseModule(ambientLightSensor);
+ if (result == null) result = caseNamedElement(ambientLightSensor);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.SOUND_SENSOR: {
+ SoundSensor soundSensor = (SoundSensor)theEObject;
+ T result = caseSoundSensor(soundSensor);
+ if (result == null) result = caseArduinoAnalogModule(soundSensor);
+ if (result == null) result = caseArduinoModule(soundSensor);
+ if (result == null) result = caseModule(soundSensor);
+ if (result == null) result = caseNamedElement(soundSensor);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.FAN: {
+ Fan fan = (Fan)theEObject;
+ T result = caseFan(fan);
+ if (result == null) result = caseArduinoDigitalModule(fan);
+ if (result == null) result = caseArduinoModule(fan);
+ if (result == null) result = caseModule(fan);
+ if (result == null) result = caseNamedElement(fan);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.MUSIC_PLAYER: {
+ MusicPlayer musicPlayer = (MusicPlayer)theEObject;
+ T result = caseMusicPlayer(musicPlayer);
+ if (result == null) result = caseArduinoAnalogModule(musicPlayer);
+ if (result == null) result = caseArduinoModule(musicPlayer);
+ if (result == null) result = caseModule(musicPlayer);
+ if (result == null) result = caseNamedElement(musicPlayer);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ARDUINO_MODULE: {
+ ArduinoModule arduinoModule = (ArduinoModule)theEObject;
+ T result = caseArduinoModule(arduinoModule);
+ if (result == null) result = caseModule(arduinoModule);
+ if (result == null) result = caseNamedElement(arduinoModule);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ARDUINO_BOARD: {
+ ArduinoBoard arduinoBoard = (ArduinoBoard)theEObject;
+ T result = caseArduinoBoard(arduinoBoard);
+ if (result == null) result = caseBoard(arduinoBoard);
+ if (result == null) result = caseNamedElement(arduinoBoard);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ARDUINO_DIGITAL_MODULE: {
+ ArduinoDigitalModule arduinoDigitalModule = (ArduinoDigitalModule)theEObject;
+ T result = caseArduinoDigitalModule(arduinoDigitalModule);
+ if (result == null) result = caseArduinoModule(arduinoDigitalModule);
+ if (result == null) result = caseModule(arduinoDigitalModule);
+ if (result == null) result = caseNamedElement(arduinoDigitalModule);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.ARDUINO_ANALOG_MODULE: {
+ ArduinoAnalogModule arduinoAnalogModule = (ArduinoAnalogModule)theEObject;
+ T result = caseArduinoAnalogModule(arduinoAnalogModule);
+ if (result == null) result = caseArduinoModule(arduinoAnalogModule);
+ if (result == null) result = caseModule(arduinoAnalogModule);
+ if (result == null) result = caseNamedElement(arduinoAnalogModule);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.THREAD: {
+ fr.obeo.dsl.arduino.Thread thread = (fr.obeo.dsl.arduino.Thread)theEObject;
+ T result = caseThread(thread);
+ if (result == null) result = caseNamedElement(thread);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.CHANNEL: {
+ Channel channel = (Channel)theEObject;
+ T result = caseChannel(channel);
+ if (result == null) result = caseNamedElement(channel);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.LINK: {
+ Link link = (Link)theEObject;
+ T result = caseLink(link);
+ if (result == null) result = caseNamedElement(link);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.SYNCHRONIZATION_BLOCK: {
+ SynchronizationBlock synchronizationBlock = (SynchronizationBlock)theEObject;
+ T result = caseSynchronizationBlock(synchronizationBlock);
+ if (result == null) result = caseThreadInstructionBlock(synchronizationBlock);
+ if (result == null) result = caseNamedElement(synchronizationBlock);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.INSTRUCTION_BLOCK: {
+ InstructionBlock instructionBlock = (InstructionBlock)theEObject;
+ T result = caseInstructionBlock(instructionBlock);
+ if (result == null) result = caseThreadInstructionBlock(instructionBlock);
+ if (result == null) result = caseNamedElement(instructionBlock);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.THREAD_INSTRUCTION_BLOCK: {
+ ThreadInstructionBlock threadInstructionBlock = (ThreadInstructionBlock)theEObject;
+ T result = caseThreadInstructionBlock(threadInstructionBlock);
+ if (result == null) result = caseNamedElement(threadInstructionBlock);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Board '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Board '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBoard(Board object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Module '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Module '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModule(Module object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Digital Pin '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Digital Pin '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseDigitalPin(DigitalPin object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Pin '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Pin '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePin(Pin object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Analog Pin '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Analog Pin '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAnalogPin(AnalogPin object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Sketch '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Sketch '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseSketch(Sketch object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Project '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Project '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseProject(Project object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Instruction '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Instruction '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInstruction(Instruction object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Module Assignment '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Module Assignment '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModuleAssignment(ModuleAssignment object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Module Instruction '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Module Instruction '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModuleInstruction(ModuleInstruction object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Control '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Control '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseControl(Control object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Utilities '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Utilities '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseUtilities(Utilities object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Delay '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Delay '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseDelay(Delay object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Named Element '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Named Element '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseNamedElement(NamedElement object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Repeat '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Repeat '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRepeat(Repeat object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Module Get '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Module Get '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseModuleGet(ModuleGet object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'While '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'While '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseWhile(While object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Binary Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Binary Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBinaryExpression(BinaryExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Variable '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Variable '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseVariable(Variable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Variable Assignment '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Variable Assignment '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseVariableAssignment(VariableAssignment object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Binary Integer Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Binary Integer Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBinaryIntegerExpression(BinaryIntegerExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Binary Boolean Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Binary Boolean Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBinaryBooleanExpression(BinaryBooleanExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseExpression(Expression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Constant '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Constant '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseConstant(Constant object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'If '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'If '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIf(If object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Integer Constant '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Integer Constant '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIntegerConstant(IntegerConstant object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Boolean Constant '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Boolean Constant '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBooleanConstant(BooleanConstant object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Boolean Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Boolean Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBooleanExpression(BooleanExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Integer Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Integer Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIntegerExpression(IntegerExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Assignment '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Assignment '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAssignment(Assignment object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Integer Variable '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Integer Variable '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIntegerVariable(IntegerVariable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Boolean Variable '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Boolean Variable '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBooleanVariable(BooleanVariable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Boolean Module Get '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Boolean Module Get '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBooleanModuleGet(BooleanModuleGet object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Integer Module Get '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Integer Module Get '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIntegerModuleGet(IntegerModuleGet object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Unary Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Unary Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseUnaryExpression(UnaryExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Unary Boolean Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Unary Boolean Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseUnaryBooleanExpression(UnaryBooleanExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Unary Integer Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Unary Integer Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseUnaryIntegerExpression(UnaryIntegerExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Variable Declaration '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Variable Declaration '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseVariableDeclaration(VariableDeclaration object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Variable Ref '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Variable Ref '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseVariableRef(VariableRef object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'LED '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'LED '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseLED(LED object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Push Button '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Push Button '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePushButton(PushButton object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Buzzer '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Buzzer '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBuzzer(Buzzer object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Rotation Sensor '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Rotation Sensor '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRotationSensor(RotationSensor object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Micro Servo '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Micro Servo '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMicroServo(MicroServo object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Infra Red Sensor '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Infra Red Sensor '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInfraRedSensor(InfraRedSensor object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Ambient Light Sensor '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Ambient Light Sensor '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAmbientLightSensor(AmbientLightSensor object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Sound Sensor '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Sound Sensor '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseSoundSensor(SoundSensor object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Fan '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Fan '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseFan(Fan object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Music Player '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Music Player '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMusicPlayer(MusicPlayer object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Module '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Module '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduinoModule(ArduinoModule object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Board '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Board '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduinoBoard(ArduinoBoard object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Digital Module '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Digital Module '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduinoDigitalModule(ArduinoDigitalModule object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Analog Module '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Analog Module '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduinoAnalogModule(ArduinoAnalogModule object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Thread '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Thread '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseThread(fr.obeo.dsl.arduino.Thread object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Channel '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Channel '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseChannel(Channel object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Link '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Link '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseLink(Link object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Synchronization Block '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Synchronization Block '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseSynchronizationBlock(SynchronizationBlock object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Instruction Block '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Instruction Block '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInstructionBlock(InstructionBlock object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Thread Instruction Block '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Thread Instruction Block '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseThreadInstructionBlock(ThreadInstructionBlock object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //ArduinoSwitch
diff --git a/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src/fr/obeo/dsl/arduino/ArduinoUtils.java b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src/fr/obeo/dsl/arduino/ArduinoUtils.java
new file mode 100644
index 00000000..4a5fd38b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/fr.obeo.dsl.arduino/src/fr/obeo/dsl/arduino/ArduinoUtils.java
@@ -0,0 +1,163 @@
+package fr.obeo.dsl.arduino;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.OperationsException;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Utility class for arduino.
+ *
+ * @author Yvan Lussaud
+ *
+ */
+public final class ArduinoUtils {
+
+ private ArduinoUtils() {
+ // nothing to do here
+ }
+
+
+ public static Board getBoard(Project project, String boardName) {
+ if(project.getBoards() !=null){
+ for(Board b : project.getBoards()){
+ if(b.getName().equals(boardName)){
+ return b;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the {@link Pin} {@link Connector connected} to the given
+ * {@link Module}.
+ *
+ * @param board the {@link Board}
+ * @param module
+ * the {@link Module}
+ * @return the {@link Pin} {@link Connector connected} to the given
+ * {@link Module} if any, null
otherwise
+ */
+ public static Pin getPin(Project project, Module module) {
+ Pin res = null;
+
+ final Board board = getContainingBoard(project, module);
+ if (board != null && board instanceof ArduinoBoard) {
+ ArduinoBoard arduinoBoard = (ArduinoBoard) board;
+ for (AnalogPin pin : arduinoBoard.getAnalogPins()) {
+ if (pin.getModule() == module) {
+ res = pin;
+ break;
+ }
+ }
+ if (res == null) {
+ for (DigitalPin pin : arduinoBoard.getDigitalPins()) {
+ if (pin.getModule() == module) {
+ res = pin;
+ break;
+ }
+ }
+ }
+ }
+
+ return res;
+ }
+
+ /**
+ * Gets the {@link Module} {@link Connector connected} to the given
+ * {@link Pin}.
+ * @param project the {@link Project}
+ * @param module
+ * the {@link Module}
+ * @return the {@link Module} {@link Connector connected} to the given
+ * {@link Pin} if any, null
otherwise
+ */
+ public static Module getModule(Pin pin) {
+ Module res = null;
+ if (pin instanceof AnalogPin) {
+ res = ((AnalogPin) pin).getModule();
+ } else if (pin instanceof DigitalPin) {
+ res = ((DigitalPin) pin).getModule();
+ }
+ return res;
+ }
+
+ /**
+ * Gets the {@link Module} {@link Connector connected} to the given
+ * {@link Pin}.
+ * @param project the {@link Project}
+ * @param module
+ * the {@link Module}
+ * @return the {@link Module} {@link Connector connected} to the given
+ * {@link Pin} if any, null
otherwise
+ */
+ public static Board getContainingBoard(Project project, Module module) {
+ for(Board board : project.getBoards()){
+ if(board instanceof ArduinoBoard){
+ ArduinoBoard ab = (ArduinoBoard)board;
+ for(AnalogPin ap : ab.getAnalogPins()){
+ if(ap.getModule().equals(module)){
+ return board;
+ }
+ }
+ for(DigitalPin dp : ab.getDigitalPins()){
+ if(dp.getModule().equals(module)){
+ return board;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the containing {@link Project} of the given {@link EObject}.
+ *
+ * @param eObj
+ * the {@link OperationsException}
+ * @return the containing {@link Project} of the given {@link EObject} if
+ * any, null
otherwise
+ */
+ public static Project getContainingProject(EObject eObj) {
+ Project res = null;
+
+ EObject current = eObj.eContainer();
+ while (current != null) {
+ if (current instanceof Project) {
+ res = (Project) current;
+ break;
+ }
+ current = current.eContainer();
+ }
+
+ return res;
+ }
+
+/* public Instruction getNextInstruction(Thread thread){
+ Iterator iter = thread.getBlock().getInstructions().iterator();
+ Instruction nextInstruction = thread.getCurrentInstruction();
+ while(iter.hasNext()){
+ if(iter.equals(thread.getCurrentInstruction())){
+ if(iter instanceof Control){
+
+ }else{
+ nextInstruction = iter.next();
+ }
+ }
+ }
+ }
+
+ private List instructionsOfABlock(Block bloc){
+ var instructions = new ArrayList();
+ for(Instruction inst : instructions){
+ if(inst instanceof Control){
+ Control control = (Control)inst;
+ control.getBlock()
+ }
+ }
+ }*/
+
+}
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/.classpath b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/.classpath
new file mode 100644
index 00000000..22f30643
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/.project b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/.project
new file mode 100644
index 00000000..e46a9d34
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/.project
@@ -0,0 +1,28 @@
+
+
+ org.gemoc.arduino.arduino.trace
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.PluginNature
+
+
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/META-INF/MANIFEST.MF b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..e92cb389
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.gemoc.arduino.arduino.trace;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Export-Package: arduinoTrace,
+ arduinoTrace.States,
+ arduinoTrace.States.arduino,
+ arduinoTrace.States.arduino.impl,
+ arduinoTrace.States.arduino.util,
+ arduinoTrace.States.impl,
+ arduinoTrace.States.util,
+ arduinoTrace.Steps,
+ arduinoTrace.Steps.impl,
+ arduinoTrace.Steps.util,
+ arduinoTrace.impl,
+ arduinoTrace.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ fr.obeo.dsl.arduino;visibility:=reexport,
+ org.gemoc.executionframework.engine.mse.model;visibility:=reexport,
+ fr.inria.diverse.trace.api,
+ org.gemoc.commons.eclipse,
+ fr.inria.diverse.trace.gemoc,
+ fr.inria.diverse.trace.gemoc.api,
+ org.gemoc.xdsmlframework.api,
+ org.gemoc.sequential_addons.multidimensional.timeline,
+ fr.obeo.timeline,
+ fr.inria.diverse.trace.commons
+Bundle-ActivationPolicy: lazy
+
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/build.properties b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/build.properties
new file mode 100644
index 00000000..4465407f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/model/arduinoTrace.ecore b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/model/arduinoTrace.ecore
new file mode 100644
index 00000000..5c7849e8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/model/arduinoTrace.ecore
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/model/arduinoTrace.genmodel b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/model/arduinoTrace.genmodel
new file mode 100644
index 00000000..f9e502a4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/model/arduinoTrace.genmodel
@@ -0,0 +1,274 @@
+
+
+ file:/C:/Users/Vincent/AppData/Local/Temp/diverse3247713228567222604tracemmgeneration/arduinoTrace.ecore
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/plugin.properties b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/plugin.properties
new file mode 100644
index 00000000..c39e4775
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = ArduinoTrace Model
+providerName = www.example.org
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/plugin.xml b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/plugin.xml
new file mode 100644
index 00000000..4fabe6d7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/plugin.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/ArduinoTraceFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/ArduinoTraceFactory.java
new file mode 100644
index 00000000..4b42bd29
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/ArduinoTraceFactory.java
@@ -0,0 +1,42 @@
+/**
+ */
+package arduinoTrace;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ *
+ * The Factory for the model.
+ * It provides a create method for each non-abstract class of the model.
+ *
+ * @see arduinoTrace.ArduinoTracePackage
+ * @generated
+ */
+public interface ArduinoTraceFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ *
+ *
+ * @generated
+ */
+ ArduinoTraceFactory eINSTANCE = arduinoTrace.impl.ArduinoTraceFactoryImpl.init();
+
+ /**
+ * Returns a new object of class 'Trace '.
+ *
+ *
+ * @return a new object of class 'Trace '.
+ * @generated
+ */
+ Trace createTrace();
+
+ /**
+ * Returns the package supported by this factory.
+ *
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ArduinoTracePackage getArduinoTracePackage();
+
+} //ArduinoTraceFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/ArduinoTracePackage.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/ArduinoTracePackage.java
new file mode 100644
index 00000000..53f5fb4b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/ArduinoTracePackage.java
@@ -0,0 +1,496 @@
+/**
+ */
+package arduinoTrace;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ *
+ * The Package for the model.
+ * It contains accessors for the meta objects to represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @see arduinoTrace.ArduinoTraceFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ArduinoTracePackage extends EPackage {
+ /**
+ * The package name.
+ *
+ *
+ * @generated
+ */
+ String eNAME = "arduinoTrace";
+
+ /**
+ * The package namespace URI.
+ *
+ *
+ * @generated
+ */
+ String eNS_URI = "arduinoTrace";
+
+ /**
+ * The package namespace name.
+ *
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "arduinoTrace";
+
+ /**
+ * The singleton instance of the package.
+ *
+ *
+ * @generated
+ */
+ ArduinoTracePackage eINSTANCE = arduinoTrace.impl.ArduinoTracePackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.impl.TraceImpl Trace }' class.
+ *
+ *
+ * @see arduinoTrace.impl.TraceImpl
+ * @see arduinoTrace.impl.ArduinoTracePackageImpl#getTrace()
+ * @generated
+ */
+ int TRACE = 0;
+
+ /**
+ * The feature id for the 'Arduino Delay Execute Sequence ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE = 0;
+
+ /**
+ * The feature id for the 'Arduino If Execute Sequence ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_IF_EXECUTE_SEQUENCE = 1;
+
+ /**
+ * The feature id for the 'Arduino Module Assignment Execute Sequence ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE = 2;
+
+ /**
+ * The feature id for the 'Arduino Project Setup Sequence ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE = 3;
+
+ /**
+ * The feature id for the 'Arduino Variable Assignment Execute Sequence ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE = 4;
+
+ /**
+ * The feature id for the 'Arduino Variable Declaration Execute Sequence ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE = 5;
+
+ /**
+ * The feature id for the 'Arduino traced Analog Pins ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_TRACED_ANALOG_PINS = 6;
+
+ /**
+ * The feature id for the 'Arduino traced Boolean Variables ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES = 7;
+
+ /**
+ * The feature id for the 'Arduino traced Digital Pins ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_TRACED_DIGITAL_PINS = 8;
+
+ /**
+ * The feature id for the 'Arduino traced Integer Variables ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_TRACED_INTEGER_VARIABLES = 9;
+
+ /**
+ * The feature id for the 'Arduino traced Shared Resources ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ARDUINO_TRACED_SHARED_RESOURCES = 10;
+
+ /**
+ * The feature id for the 'Root Steps ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__ROOT_STEPS = 11;
+
+ /**
+ * The feature id for the 'States Trace ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE__STATES_TRACE = 12;
+
+ /**
+ * The number of structural features of the 'Trace ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE_FEATURE_COUNT = 13;
+
+ /**
+ * The number of operations of the 'Trace ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACE_OPERATION_COUNT = 0;
+
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Trace Trace }'.
+ *
+ *
+ * @return the meta object for class 'Trace '.
+ * @see arduinoTrace.Trace
+ * @generated
+ */
+ EClass getTrace();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.Trace#getArduino_Delay_Execute_Sequence Arduino Delay Execute Sequence }'.
+ *
+ *
+ * @return the meta object for the reference list 'Arduino Delay Execute Sequence '.
+ * @see arduinoTrace.Trace#getArduino_Delay_Execute_Sequence()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_Delay_Execute_Sequence();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.Trace#getArduino_If_Execute_Sequence Arduino If Execute Sequence }'.
+ *
+ *
+ * @return the meta object for the reference list 'Arduino If Execute Sequence '.
+ * @see arduinoTrace.Trace#getArduino_If_Execute_Sequence()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_If_Execute_Sequence();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.Trace#getArduino_ModuleAssignment_Execute_Sequence Arduino Module Assignment Execute Sequence }'.
+ *
+ *
+ * @return the meta object for the reference list 'Arduino Module Assignment Execute Sequence '.
+ * @see arduinoTrace.Trace#getArduino_ModuleAssignment_Execute_Sequence()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_ModuleAssignment_Execute_Sequence();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.Trace#getArduino_Project_Setup_Sequence Arduino Project Setup Sequence }'.
+ *
+ *
+ * @return the meta object for the reference list 'Arduino Project Setup Sequence '.
+ * @see arduinoTrace.Trace#getArduino_Project_Setup_Sequence()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_Project_Setup_Sequence();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.Trace#getArduino_VariableAssignment_Execute_Sequence Arduino Variable Assignment Execute Sequence }'.
+ *
+ *
+ * @return the meta object for the reference list 'Arduino Variable Assignment Execute Sequence '.
+ * @see arduinoTrace.Trace#getArduino_VariableAssignment_Execute_Sequence()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_VariableAssignment_Execute_Sequence();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.Trace#getArduino_VariableDeclaration_Execute_Sequence Arduino Variable Declaration Execute Sequence }'.
+ *
+ *
+ * @return the meta object for the reference list 'Arduino Variable Declaration Execute Sequence '.
+ * @see arduinoTrace.Trace#getArduino_VariableDeclaration_Execute_Sequence()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_VariableDeclaration_Execute_Sequence();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getArduino_tracedAnalogPins Arduino traced Analog Pins }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Arduino traced Analog Pins '.
+ * @see arduinoTrace.Trace#getArduino_tracedAnalogPins()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_tracedAnalogPins();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getArduino_tracedBooleanVariables Arduino traced Boolean Variables }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Arduino traced Boolean Variables '.
+ * @see arduinoTrace.Trace#getArduino_tracedBooleanVariables()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_tracedBooleanVariables();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getArduino_tracedDigitalPins Arduino traced Digital Pins }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Arduino traced Digital Pins '.
+ * @see arduinoTrace.Trace#getArduino_tracedDigitalPins()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_tracedDigitalPins();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getArduino_tracedIntegerVariables Arduino traced Integer Variables }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Arduino traced Integer Variables '.
+ * @see arduinoTrace.Trace#getArduino_tracedIntegerVariables()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_tracedIntegerVariables();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getArduino_tracedSharedResources Arduino traced Shared Resources }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Arduino traced Shared Resources '.
+ * @see arduinoTrace.Trace#getArduino_tracedSharedResources()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_Arduino_tracedSharedResources();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getRootSteps Root Steps }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Root Steps '.
+ * @see arduinoTrace.Trace#getRootSteps()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_RootSteps();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Trace#getStatesTrace States Trace }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'States Trace '.
+ * @see arduinoTrace.Trace#getStatesTrace()
+ * @see #getTrace()
+ * @generated
+ */
+ EReference getTrace_StatesTrace();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ *
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ ArduinoTraceFactory getArduinoTraceFactory();
+
+ /**
+ *
+ * Defines literals for the meta objects that represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link arduinoTrace.impl.TraceImpl Trace }' class.
+ *
+ *
+ * @see arduinoTrace.impl.TraceImpl
+ * @see arduinoTrace.impl.ArduinoTracePackageImpl#getTrace()
+ * @generated
+ */
+ EClass TRACE = eINSTANCE.getTrace();
+
+ /**
+ * The meta object literal for the 'Arduino Delay Execute Sequence ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE = eINSTANCE.getTrace_Arduino_Delay_Execute_Sequence();
+
+ /**
+ * The meta object literal for the 'Arduino If Execute Sequence ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_IF_EXECUTE_SEQUENCE = eINSTANCE.getTrace_Arduino_If_Execute_Sequence();
+
+ /**
+ * The meta object literal for the 'Arduino Module Assignment Execute Sequence ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE = eINSTANCE.getTrace_Arduino_ModuleAssignment_Execute_Sequence();
+
+ /**
+ * The meta object literal for the 'Arduino Project Setup Sequence ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE = eINSTANCE.getTrace_Arduino_Project_Setup_Sequence();
+
+ /**
+ * The meta object literal for the 'Arduino Variable Assignment Execute Sequence ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE = eINSTANCE.getTrace_Arduino_VariableAssignment_Execute_Sequence();
+
+ /**
+ * The meta object literal for the 'Arduino Variable Declaration Execute Sequence ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE = eINSTANCE.getTrace_Arduino_VariableDeclaration_Execute_Sequence();
+
+ /**
+ * The meta object literal for the 'Arduino traced Analog Pins ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_TRACED_ANALOG_PINS = eINSTANCE.getTrace_Arduino_tracedAnalogPins();
+
+ /**
+ * The meta object literal for the 'Arduino traced Boolean Variables ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES = eINSTANCE.getTrace_Arduino_tracedBooleanVariables();
+
+ /**
+ * The meta object literal for the 'Arduino traced Digital Pins ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_TRACED_DIGITAL_PINS = eINSTANCE.getTrace_Arduino_tracedDigitalPins();
+
+ /**
+ * The meta object literal for the 'Arduino traced Integer Variables ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_TRACED_INTEGER_VARIABLES = eINSTANCE.getTrace_Arduino_tracedIntegerVariables();
+
+ /**
+ * The meta object literal for the 'Arduino traced Shared Resources ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ARDUINO_TRACED_SHARED_RESOURCES = eINSTANCE.getTrace_Arduino_tracedSharedResources();
+
+ /**
+ * The meta object literal for the 'Root Steps ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__ROOT_STEPS = eINSTANCE.getTrace_RootSteps();
+
+ /**
+ * The meta object literal for the 'States Trace ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACE__STATES_TRACE = eINSTANCE.getTrace_StatesTrace();
+
+ }
+
+} //ArduinoTracePackage
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/BooleanVariable_value_Value.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/BooleanVariable_value_Value.java
new file mode 100644
index 00000000..da89734d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/BooleanVariable_value_Value.java
@@ -0,0 +1,103 @@
+/**
+ */
+package arduinoTrace.States;
+
+import arduinoTrace.States.arduino.TracedBooleanVariable;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Boolean Variable value Value '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.BooleanVariable_value_Value#getParent Parent }
+ * {@link arduinoTrace.States.BooleanVariable_value_Value#getStates States }
+ * {@link arduinoTrace.States.BooleanVariable_value_Value#getValue Value }
+ *
+ *
+ *
+ * @see arduinoTrace.States.StatesPackage#getBooleanVariable_value_Value()
+ * @model annotation="http://www.modelexecution.org/trace/XMOF executionMetamodelElement='null'"
+ * @generated
+ */
+public interface BooleanVariable_value_Value extends EObject {
+ /**
+ * Returns the value of the 'Parent ' container reference.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.arduino.TracedBooleanVariable#getValueSequence Value Sequence }'.
+ *
+ *
+ * If the meaning of the 'Parent ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Parent ' container reference.
+ * @see #setParent(TracedBooleanVariable)
+ * @see arduinoTrace.States.StatesPackage#getBooleanVariable_value_Value_Parent()
+ * @see arduinoTrace.States.arduino.TracedBooleanVariable#getValueSequence
+ * @model opposite="valueSequence" required="true" transient="false"
+ * @generated
+ */
+ TracedBooleanVariable getParent();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.BooleanVariable_value_Value#getParent Parent }' container reference.
+ *
+ *
+ * @param value the new value of the 'Parent ' container reference.
+ * @see #getParent()
+ * @generated
+ */
+ void setParent(TracedBooleanVariable value);
+
+ /**
+ * Returns the value of the 'States ' reference list.
+ * The list contents are of type {@link arduinoTrace.States.State}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.State#getBooleanVariable_value_Values Boolean Variable value Values }'.
+ *
+ *
+ * If the meaning of the 'States ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'States ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getBooleanVariable_value_Value_States()
+ * @see arduinoTrace.States.State#getBooleanVariable_value_Values
+ * @model opposite="booleanVariable_value_Values" required="true"
+ * @generated
+ */
+ EList getStates();
+
+ /**
+ * Returns the value of the 'Value ' attribute.
+ * The default value is "false"
.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(Boolean)
+ * @see arduinoTrace.States.StatesPackage#getBooleanVariable_value_Value_Value()
+ * @model default="false"
+ * @generated
+ */
+ Boolean getValue();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.BooleanVariable_value_Value#getValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(Boolean value);
+
+} // BooleanVariable_value_Value
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/IntegerVariable_value_Value.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/IntegerVariable_value_Value.java
new file mode 100644
index 00000000..d1154a1e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/IntegerVariable_value_Value.java
@@ -0,0 +1,103 @@
+/**
+ */
+package arduinoTrace.States;
+
+import arduinoTrace.States.arduino.TracedIntegerVariable;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Integer Variable value Value '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.IntegerVariable_value_Value#getParent Parent }
+ * {@link arduinoTrace.States.IntegerVariable_value_Value#getStates States }
+ * {@link arduinoTrace.States.IntegerVariable_value_Value#getValue Value }
+ *
+ *
+ *
+ * @see arduinoTrace.States.StatesPackage#getIntegerVariable_value_Value()
+ * @model annotation="http://www.modelexecution.org/trace/XMOF executionMetamodelElement='null'"
+ * @generated
+ */
+public interface IntegerVariable_value_Value extends EObject {
+ /**
+ * Returns the value of the 'Parent ' container reference.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.arduino.TracedIntegerVariable#getValueSequence Value Sequence }'.
+ *
+ *
+ * If the meaning of the 'Parent ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Parent ' container reference.
+ * @see #setParent(TracedIntegerVariable)
+ * @see arduinoTrace.States.StatesPackage#getIntegerVariable_value_Value_Parent()
+ * @see arduinoTrace.States.arduino.TracedIntegerVariable#getValueSequence
+ * @model opposite="valueSequence" required="true" transient="false"
+ * @generated
+ */
+ TracedIntegerVariable getParent();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.IntegerVariable_value_Value#getParent Parent }' container reference.
+ *
+ *
+ * @param value the new value of the 'Parent ' container reference.
+ * @see #getParent()
+ * @generated
+ */
+ void setParent(TracedIntegerVariable value);
+
+ /**
+ * Returns the value of the 'States ' reference list.
+ * The list contents are of type {@link arduinoTrace.States.State}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.State#getIntegerVariable_value_Values Integer Variable value Values }'.
+ *
+ *
+ * If the meaning of the 'States ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'States ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getIntegerVariable_value_Value_States()
+ * @see arduinoTrace.States.State#getIntegerVariable_value_Values
+ * @model opposite="integerVariable_value_Values" required="true"
+ * @generated
+ */
+ EList getStates();
+
+ /**
+ * Returns the value of the 'Value ' attribute.
+ * The default value is "0"
.
+ *
+ *
+ * If the meaning of the 'Value ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value ' attribute.
+ * @see #setValue(Integer)
+ * @see arduinoTrace.States.StatesPackage#getIntegerVariable_value_Value_Value()
+ * @model default="0"
+ * @generated
+ */
+ Integer getValue();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.IntegerVariable_value_Value#getValue Value }' attribute.
+ *
+ *
+ * @param value the new value of the 'Value ' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(Integer value);
+
+} // IntegerVariable_value_Value
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/Pin_level_Value.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/Pin_level_Value.java
new file mode 100644
index 00000000..b4f31b3c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/Pin_level_Value.java
@@ -0,0 +1,102 @@
+/**
+ */
+package arduinoTrace.States;
+
+import arduinoTrace.States.arduino.TracedPin;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Pin level Value '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.Pin_level_Value#getLevel Level }
+ * {@link arduinoTrace.States.Pin_level_Value#getParent Parent }
+ * {@link arduinoTrace.States.Pin_level_Value#getStates States }
+ *
+ *
+ *
+ * @see arduinoTrace.States.StatesPackage#getPin_level_Value()
+ * @model annotation="http://www.modelexecution.org/trace/XMOF executionMetamodelElement='null'"
+ * @generated
+ */
+public interface Pin_level_Value extends EObject {
+ /**
+ * Returns the value of the 'Level ' attribute.
+ *
+ *
+ * If the meaning of the 'Level ' attribute isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Level ' attribute.
+ * @see #setLevel(Integer)
+ * @see arduinoTrace.States.StatesPackage#getPin_level_Value_Level()
+ * @model
+ * @generated
+ */
+ Integer getLevel();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.Pin_level_Value#getLevel Level }' attribute.
+ *
+ *
+ * @param value the new value of the 'Level ' attribute.
+ * @see #getLevel()
+ * @generated
+ */
+ void setLevel(Integer value);
+
+ /**
+ * Returns the value of the 'Parent ' container reference.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.arduino.TracedPin#getLevelSequence Level Sequence }'.
+ *
+ *
+ * If the meaning of the 'Parent ' container reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Parent ' container reference.
+ * @see #setParent(TracedPin)
+ * @see arduinoTrace.States.StatesPackage#getPin_level_Value_Parent()
+ * @see arduinoTrace.States.arduino.TracedPin#getLevelSequence
+ * @model opposite="levelSequence" required="true" transient="false"
+ * @generated
+ */
+ TracedPin getParent();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.Pin_level_Value#getParent Parent }' container reference.
+ *
+ *
+ * @param value the new value of the 'Parent ' container reference.
+ * @see #getParent()
+ * @generated
+ */
+ void setParent(TracedPin value);
+
+ /**
+ * Returns the value of the 'States ' reference list.
+ * The list contents are of type {@link arduinoTrace.States.State}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.State#getPin_level_Values Pin level Values }'.
+ *
+ *
+ * If the meaning of the 'States ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'States ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getPin_level_Value_States()
+ * @see arduinoTrace.States.State#getPin_level_Values
+ * @model opposite="pin_level_Values" required="true"
+ * @generated
+ */
+ EList getStates();
+
+} // Pin_level_Value
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/State.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/State.java
new file mode 100644
index 00000000..2865355b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/State.java
@@ -0,0 +1,122 @@
+/**
+ */
+package arduinoTrace.States;
+
+import arduinoTrace.Steps.Step;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'State '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.State#getBooleanVariable_value_Values Boolean Variable value Values }
+ * {@link arduinoTrace.States.State#getEndedSteps Ended Steps }
+ * {@link arduinoTrace.States.State#getIntegerVariable_value_Values Integer Variable value Values }
+ * {@link arduinoTrace.States.State#getPin_level_Values Pin level Values }
+ * {@link arduinoTrace.States.State#getStartedSteps Started Steps }
+ *
+ *
+ *
+ * @see arduinoTrace.States.StatesPackage#getState()
+ * @model
+ * @generated
+ */
+public interface State extends EObject {
+ /**
+ * Returns the value of the 'Boolean Variable value Values ' reference list.
+ * The list contents are of type {@link arduinoTrace.States.BooleanVariable_value_Value}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.BooleanVariable_value_Value#getStates States }'.
+ *
+ *
+ * If the meaning of the 'Boolean Variable value Values ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Boolean Variable value Values ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getState_BooleanVariable_value_Values()
+ * @see arduinoTrace.States.BooleanVariable_value_Value#getStates
+ * @model opposite="states" ordered="false"
+ * @generated
+ */
+ EList getBooleanVariable_value_Values();
+
+ /**
+ * Returns the value of the 'Ended Steps ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Step}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.Steps.Step#getEndingState Ending State }'.
+ *
+ *
+ * If the meaning of the 'Ended Steps ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Ended Steps ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getState_EndedSteps()
+ * @see arduinoTrace.Steps.Step#getEndingState
+ * @model opposite="endingState"
+ * @generated
+ */
+ EList getEndedSteps();
+
+ /**
+ * Returns the value of the 'Integer Variable value Values ' reference list.
+ * The list contents are of type {@link arduinoTrace.States.IntegerVariable_value_Value}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.IntegerVariable_value_Value#getStates States }'.
+ *
+ *
+ * If the meaning of the 'Integer Variable value Values ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Integer Variable value Values ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getState_IntegerVariable_value_Values()
+ * @see arduinoTrace.States.IntegerVariable_value_Value#getStates
+ * @model opposite="states" ordered="false"
+ * @generated
+ */
+ EList getIntegerVariable_value_Values();
+
+ /**
+ * Returns the value of the 'Pin level Values ' reference list.
+ * The list contents are of type {@link arduinoTrace.States.Pin_level_Value}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.Pin_level_Value#getStates States }'.
+ *
+ *
+ * If the meaning of the 'Pin level Values ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Pin level Values ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getState_Pin_level_Values()
+ * @see arduinoTrace.States.Pin_level_Value#getStates
+ * @model opposite="states" ordered="false"
+ * @generated
+ */
+ EList getPin_level_Values();
+
+ /**
+ * Returns the value of the 'Started Steps ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Step}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.Steps.Step#getStartingState Starting State }'.
+ *
+ *
+ * If the meaning of the 'Started Steps ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Started Steps ' reference list.
+ * @see arduinoTrace.States.StatesPackage#getState_StartedSteps()
+ * @see arduinoTrace.Steps.Step#getStartingState
+ * @model opposite="startingState"
+ * @generated
+ */
+ EList getStartedSteps();
+
+} // State
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/StatesFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/StatesFactory.java
new file mode 100644
index 00000000..5da28114
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/StatesFactory.java
@@ -0,0 +1,69 @@
+/**
+ */
+package arduinoTrace.States;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ *
+ * The Factory for the model.
+ * It provides a create method for each non-abstract class of the model.
+ *
+ * @see arduinoTrace.States.StatesPackage
+ * @generated
+ */
+public interface StatesFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ *
+ *
+ * @generated
+ */
+ StatesFactory eINSTANCE = arduinoTrace.States.impl.StatesFactoryImpl.init();
+
+ /**
+ * Returns a new object of class 'Boolean Variable value Value '.
+ *
+ *
+ * @return a new object of class 'Boolean Variable value Value '.
+ * @generated
+ */
+ BooleanVariable_value_Value createBooleanVariable_value_Value();
+
+ /**
+ * Returns a new object of class 'Integer Variable value Value '.
+ *
+ *
+ * @return a new object of class 'Integer Variable value Value '.
+ * @generated
+ */
+ IntegerVariable_value_Value createIntegerVariable_value_Value();
+
+ /**
+ * Returns a new object of class 'Pin level Value '.
+ *
+ *
+ * @return a new object of class 'Pin level Value '.
+ * @generated
+ */
+ Pin_level_Value createPin_level_Value();
+
+ /**
+ * Returns a new object of class 'State '.
+ *
+ *
+ * @return a new object of class 'State '.
+ * @generated
+ */
+ State createState();
+
+ /**
+ * Returns the package supported by this factory.
+ *
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ StatesPackage getStatesPackage();
+
+} //StatesFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/StatesPackage.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/StatesPackage.java
new file mode 100644
index 00000000..b5d4cbe4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/StatesPackage.java
@@ -0,0 +1,669 @@
+/**
+ */
+package arduinoTrace.States;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ *
+ * The Package for the model.
+ * It contains accessors for the meta objects to represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @see arduinoTrace.States.StatesFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface StatesPackage extends EPackage {
+ /**
+ * The package name.
+ *
+ *
+ * @generated
+ */
+ String eNAME = "States";
+
+ /**
+ * The package namespace URI.
+ *
+ *
+ * @generated
+ */
+ String eNS_URI = "arduinoTrace_States";
+
+ /**
+ * The package namespace name.
+ *
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "tracedclasses";
+
+ /**
+ * The singleton instance of the package.
+ *
+ *
+ * @generated
+ */
+ StatesPackage eINSTANCE = arduinoTrace.States.impl.StatesPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.impl.BooleanVariable_value_ValueImpl Boolean Variable value Value }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.BooleanVariable_value_ValueImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getBooleanVariable_value_Value()
+ * @generated
+ */
+ int BOOLEAN_VARIABLE_VALUE_VALUE = 0;
+
+ /**
+ * The feature id for the 'Parent ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE_VALUE_VALUE__PARENT = 0;
+
+ /**
+ * The feature id for the 'States ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE_VALUE_VALUE__STATES = 1;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE_VALUE_VALUE__VALUE = 2;
+
+ /**
+ * The number of structural features of the 'Boolean Variable value Value ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE_VALUE_VALUE_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the 'Boolean Variable value Value ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BOOLEAN_VARIABLE_VALUE_VALUE_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.impl.IntegerVariable_value_ValueImpl Integer Variable value Value }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.IntegerVariable_value_ValueImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getIntegerVariable_value_Value()
+ * @generated
+ */
+ int INTEGER_VARIABLE_VALUE_VALUE = 1;
+
+ /**
+ * The feature id for the 'Parent ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE_VALUE_VALUE__PARENT = 0;
+
+ /**
+ * The feature id for the 'States ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE_VALUE_VALUE__STATES = 1;
+
+ /**
+ * The feature id for the 'Value ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE_VALUE_VALUE__VALUE = 2;
+
+ /**
+ * The number of structural features of the 'Integer Variable value Value ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE_VALUE_VALUE_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the 'Integer Variable value Value ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int INTEGER_VARIABLE_VALUE_VALUE_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.impl.Pin_level_ValueImpl Pin level Value }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.Pin_level_ValueImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getPin_level_Value()
+ * @generated
+ */
+ int PIN_LEVEL_VALUE = 2;
+
+ /**
+ * The feature id for the 'Level ' attribute.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN_LEVEL_VALUE__LEVEL = 0;
+
+ /**
+ * The feature id for the 'Parent ' container reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN_LEVEL_VALUE__PARENT = 1;
+
+ /**
+ * The feature id for the 'States ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN_LEVEL_VALUE__STATES = 2;
+
+ /**
+ * The number of structural features of the 'Pin level Value ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN_LEVEL_VALUE_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the 'Pin level Value ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int PIN_LEVEL_VALUE_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.impl.StateImpl State }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.StateImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getState()
+ * @generated
+ */
+ int STATE = 3;
+
+ /**
+ * The feature id for the 'Boolean Variable value Values ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE__BOOLEAN_VARIABLE_VALUE_VALUES = 0;
+
+ /**
+ * The feature id for the 'Ended Steps ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE__ENDED_STEPS = 1;
+
+ /**
+ * The feature id for the 'Integer Variable value Values ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE__INTEGER_VARIABLE_VALUE_VALUES = 2;
+
+ /**
+ * The feature id for the 'Pin level Values ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE__PIN_LEVEL_VALUES = 3;
+
+ /**
+ * The feature id for the 'Started Steps ' reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE__STARTED_STEPS = 4;
+
+ /**
+ * The number of structural features of the 'State ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE_FEATURE_COUNT = 5;
+
+ /**
+ * The number of operations of the 'State ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STATE_OPERATION_COUNT = 0;
+
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.BooleanVariable_value_Value Boolean Variable value Value }'.
+ *
+ *
+ * @return the meta object for class 'Boolean Variable value Value '.
+ * @see arduinoTrace.States.BooleanVariable_value_Value
+ * @generated
+ */
+ EClass getBooleanVariable_value_Value();
+
+ /**
+ * Returns the meta object for the container reference '{@link arduinoTrace.States.BooleanVariable_value_Value#getParent Parent }'.
+ *
+ *
+ * @return the meta object for the container reference 'Parent '.
+ * @see arduinoTrace.States.BooleanVariable_value_Value#getParent()
+ * @see #getBooleanVariable_value_Value()
+ * @generated
+ */
+ EReference getBooleanVariable_value_Value_Parent();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.BooleanVariable_value_Value#getStates States }'.
+ *
+ *
+ * @return the meta object for the reference list 'States '.
+ * @see arduinoTrace.States.BooleanVariable_value_Value#getStates()
+ * @see #getBooleanVariable_value_Value()
+ * @generated
+ */
+ EReference getBooleanVariable_value_Value_States();
+
+ /**
+ * Returns the meta object for the attribute '{@link arduinoTrace.States.BooleanVariable_value_Value#getValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see arduinoTrace.States.BooleanVariable_value_Value#getValue()
+ * @see #getBooleanVariable_value_Value()
+ * @generated
+ */
+ EAttribute getBooleanVariable_value_Value_Value();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.IntegerVariable_value_Value Integer Variable value Value }'.
+ *
+ *
+ * @return the meta object for class 'Integer Variable value Value '.
+ * @see arduinoTrace.States.IntegerVariable_value_Value
+ * @generated
+ */
+ EClass getIntegerVariable_value_Value();
+
+ /**
+ * Returns the meta object for the container reference '{@link arduinoTrace.States.IntegerVariable_value_Value#getParent Parent }'.
+ *
+ *
+ * @return the meta object for the container reference 'Parent '.
+ * @see arduinoTrace.States.IntegerVariable_value_Value#getParent()
+ * @see #getIntegerVariable_value_Value()
+ * @generated
+ */
+ EReference getIntegerVariable_value_Value_Parent();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.IntegerVariable_value_Value#getStates States }'.
+ *
+ *
+ * @return the meta object for the reference list 'States '.
+ * @see arduinoTrace.States.IntegerVariable_value_Value#getStates()
+ * @see #getIntegerVariable_value_Value()
+ * @generated
+ */
+ EReference getIntegerVariable_value_Value_States();
+
+ /**
+ * Returns the meta object for the attribute '{@link arduinoTrace.States.IntegerVariable_value_Value#getValue Value }'.
+ *
+ *
+ * @return the meta object for the attribute 'Value '.
+ * @see arduinoTrace.States.IntegerVariable_value_Value#getValue()
+ * @see #getIntegerVariable_value_Value()
+ * @generated
+ */
+ EAttribute getIntegerVariable_value_Value_Value();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.Pin_level_Value Pin level Value }'.
+ *
+ *
+ * @return the meta object for class 'Pin level Value '.
+ * @see arduinoTrace.States.Pin_level_Value
+ * @generated
+ */
+ EClass getPin_level_Value();
+
+ /**
+ * Returns the meta object for the attribute '{@link arduinoTrace.States.Pin_level_Value#getLevel Level }'.
+ *
+ *
+ * @return the meta object for the attribute 'Level '.
+ * @see arduinoTrace.States.Pin_level_Value#getLevel()
+ * @see #getPin_level_Value()
+ * @generated
+ */
+ EAttribute getPin_level_Value_Level();
+
+ /**
+ * Returns the meta object for the container reference '{@link arduinoTrace.States.Pin_level_Value#getParent Parent }'.
+ *
+ *
+ * @return the meta object for the container reference 'Parent '.
+ * @see arduinoTrace.States.Pin_level_Value#getParent()
+ * @see #getPin_level_Value()
+ * @generated
+ */
+ EReference getPin_level_Value_Parent();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.Pin_level_Value#getStates States }'.
+ *
+ *
+ * @return the meta object for the reference list 'States '.
+ * @see arduinoTrace.States.Pin_level_Value#getStates()
+ * @see #getPin_level_Value()
+ * @generated
+ */
+ EReference getPin_level_Value_States();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.State State }'.
+ *
+ *
+ * @return the meta object for class 'State '.
+ * @see arduinoTrace.States.State
+ * @generated
+ */
+ EClass getState();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.State#getBooleanVariable_value_Values Boolean Variable value Values }'.
+ *
+ *
+ * @return the meta object for the reference list 'Boolean Variable value Values '.
+ * @see arduinoTrace.States.State#getBooleanVariable_value_Values()
+ * @see #getState()
+ * @generated
+ */
+ EReference getState_BooleanVariable_value_Values();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.State#getEndedSteps Ended Steps }'.
+ *
+ *
+ * @return the meta object for the reference list 'Ended Steps '.
+ * @see arduinoTrace.States.State#getEndedSteps()
+ * @see #getState()
+ * @generated
+ */
+ EReference getState_EndedSteps();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.State#getIntegerVariable_value_Values Integer Variable value Values }'.
+ *
+ *
+ * @return the meta object for the reference list 'Integer Variable value Values '.
+ * @see arduinoTrace.States.State#getIntegerVariable_value_Values()
+ * @see #getState()
+ * @generated
+ */
+ EReference getState_IntegerVariable_value_Values();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.State#getPin_level_Values Pin level Values }'.
+ *
+ *
+ * @return the meta object for the reference list 'Pin level Values '.
+ * @see arduinoTrace.States.State#getPin_level_Values()
+ * @see #getState()
+ * @generated
+ */
+ EReference getState_Pin_level_Values();
+
+ /**
+ * Returns the meta object for the reference list '{@link arduinoTrace.States.State#getStartedSteps Started Steps }'.
+ *
+ *
+ * @return the meta object for the reference list 'Started Steps '.
+ * @see arduinoTrace.States.State#getStartedSteps()
+ * @see #getState()
+ * @generated
+ */
+ EReference getState_StartedSteps();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ *
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ StatesFactory getStatesFactory();
+
+ /**
+ *
+ * Defines literals for the meta objects that represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.impl.BooleanVariable_value_ValueImpl Boolean Variable value Value }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.BooleanVariable_value_ValueImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getBooleanVariable_value_Value()
+ * @generated
+ */
+ EClass BOOLEAN_VARIABLE_VALUE_VALUE = eINSTANCE.getBooleanVariable_value_Value();
+
+ /**
+ * The meta object literal for the 'Parent ' container reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference BOOLEAN_VARIABLE_VALUE_VALUE__PARENT = eINSTANCE.getBooleanVariable_value_Value_Parent();
+
+ /**
+ * The meta object literal for the 'States ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference BOOLEAN_VARIABLE_VALUE_VALUE__STATES = eINSTANCE.getBooleanVariable_value_Value_States();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute BOOLEAN_VARIABLE_VALUE_VALUE__VALUE = eINSTANCE.getBooleanVariable_value_Value_Value();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.impl.IntegerVariable_value_ValueImpl Integer Variable value Value }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.IntegerVariable_value_ValueImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getIntegerVariable_value_Value()
+ * @generated
+ */
+ EClass INTEGER_VARIABLE_VALUE_VALUE = eINSTANCE.getIntegerVariable_value_Value();
+
+ /**
+ * The meta object literal for the 'Parent ' container reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference INTEGER_VARIABLE_VALUE_VALUE__PARENT = eINSTANCE.getIntegerVariable_value_Value_Parent();
+
+ /**
+ * The meta object literal for the 'States ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference INTEGER_VARIABLE_VALUE_VALUE__STATES = eINSTANCE.getIntegerVariable_value_Value_States();
+
+ /**
+ * The meta object literal for the 'Value ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute INTEGER_VARIABLE_VALUE_VALUE__VALUE = eINSTANCE.getIntegerVariable_value_Value_Value();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.impl.Pin_level_ValueImpl Pin level Value }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.Pin_level_ValueImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getPin_level_Value()
+ * @generated
+ */
+ EClass PIN_LEVEL_VALUE = eINSTANCE.getPin_level_Value();
+
+ /**
+ * The meta object literal for the 'Level ' attribute feature.
+ *
+ *
+ * @generated
+ */
+ EAttribute PIN_LEVEL_VALUE__LEVEL = eINSTANCE.getPin_level_Value_Level();
+
+ /**
+ * The meta object literal for the 'Parent ' container reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference PIN_LEVEL_VALUE__PARENT = eINSTANCE.getPin_level_Value_Parent();
+
+ /**
+ * The meta object literal for the 'States ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference PIN_LEVEL_VALUE__STATES = eINSTANCE.getPin_level_Value_States();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.impl.StateImpl State }' class.
+ *
+ *
+ * @see arduinoTrace.States.impl.StateImpl
+ * @see arduinoTrace.States.impl.StatesPackageImpl#getState()
+ * @generated
+ */
+ EClass STATE = eINSTANCE.getState();
+
+ /**
+ * The meta object literal for the 'Boolean Variable value Values ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference STATE__BOOLEAN_VARIABLE_VALUE_VALUES = eINSTANCE.getState_BooleanVariable_value_Values();
+
+ /**
+ * The meta object literal for the 'Ended Steps ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference STATE__ENDED_STEPS = eINSTANCE.getState_EndedSteps();
+
+ /**
+ * The meta object literal for the 'Integer Variable value Values ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference STATE__INTEGER_VARIABLE_VALUE_VALUES = eINSTANCE.getState_IntegerVariable_value_Values();
+
+ /**
+ * The meta object literal for the 'Pin level Values ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference STATE__PIN_LEVEL_VALUES = eINSTANCE.getState_Pin_level_Values();
+
+ /**
+ * The meta object literal for the 'Started Steps ' reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference STATE__STARTED_STEPS = eINSTANCE.getState_StartedSteps();
+
+ }
+
+} //StatesPackage
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/ArduinoFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/ArduinoFactory.java
new file mode 100644
index 00000000..efe8e85d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/ArduinoFactory.java
@@ -0,0 +1,78 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ *
+ * The Factory for the model.
+ * It provides a create method for each non-abstract class of the model.
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage
+ * @generated
+ */
+public interface ArduinoFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ *
+ *
+ * @generated
+ */
+ ArduinoFactory eINSTANCE = arduinoTrace.States.arduino.impl.ArduinoFactoryImpl.init();
+
+ /**
+ * Returns a new object of class 'Traced Analog Pin '.
+ *
+ *
+ * @return a new object of class 'Traced Analog Pin '.
+ * @generated
+ */
+ TracedAnalogPin createTracedAnalogPin();
+
+ /**
+ * Returns a new object of class 'Traced Boolean Variable '.
+ *
+ *
+ * @return a new object of class 'Traced Boolean Variable '.
+ * @generated
+ */
+ TracedBooleanVariable createTracedBooleanVariable();
+
+ /**
+ * Returns a new object of class 'Traced Digital Pin '.
+ *
+ *
+ * @return a new object of class 'Traced Digital Pin '.
+ * @generated
+ */
+ TracedDigitalPin createTracedDigitalPin();
+
+ /**
+ * Returns a new object of class 'Traced Integer Variable '.
+ *
+ *
+ * @return a new object of class 'Traced Integer Variable '.
+ * @generated
+ */
+ TracedIntegerVariable createTracedIntegerVariable();
+
+ /**
+ * Returns a new object of class 'Traced Shared Resource '.
+ *
+ *
+ * @return a new object of class 'Traced Shared Resource '.
+ * @generated
+ */
+ TracedSharedResource createTracedSharedResource();
+
+ /**
+ * Returns the package supported by this factory.
+ *
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ArduinoPackage getArduinoPackage();
+
+} //ArduinoFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/ArduinoPackage.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/ArduinoPackage.java
new file mode 100644
index 00000000..56c7fee0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/ArduinoPackage.java
@@ -0,0 +1,900 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ *
+ * The Package for the model.
+ * It contains accessors for the meta objects to represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ArduinoPackage extends EPackage {
+ /**
+ * The package name.
+ *
+ *
+ * @generated
+ */
+ String eNAME = "arduino";
+
+ /**
+ * The package namespace URI.
+ *
+ *
+ * @generated
+ */
+ String eNS_URI = "arduinoTrace_arduino";
+
+ /**
+ * The package namespace name.
+ *
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "";
+
+ /**
+ * The singleton instance of the package.
+ *
+ *
+ * @generated
+ */
+ ArduinoPackage eINSTANCE = arduinoTrace.States.arduino.impl.ArduinoPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedPinImpl Traced Pin }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedPinImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedPin()
+ * @generated
+ */
+ int TRACED_PIN = 8;
+
+ /**
+ * The feature id for the 'Level Sequence ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_PIN__LEVEL_SEQUENCE = 0;
+
+ /**
+ * The number of structural features of the 'Traced Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_PIN_FEATURE_COUNT = 1;
+
+ /**
+ * The number of operations of the 'Traced Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_PIN_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedAnalogPinImpl Traced Analog Pin }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedAnalogPinImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedAnalogPin()
+ * @generated
+ */
+ int TRACED_ANALOG_PIN = 0;
+
+ /**
+ * The feature id for the 'Level Sequence ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_ANALOG_PIN__LEVEL_SEQUENCE = TRACED_PIN__LEVEL_SEQUENCE;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_ANALOG_PIN__MODULE = TRACED_PIN_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Original Object ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_ANALOG_PIN__ORIGINAL_OBJECT = TRACED_PIN_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Traced Analog Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_ANALOG_PIN_FEATURE_COUNT = TRACED_PIN_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the 'Traced Analog Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_ANALOG_PIN_OPERATION_COUNT = TRACED_PIN_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedExpressionImpl Traced Expression }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedExpressionImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedExpression()
+ * @generated
+ */
+ int TRACED_EXPRESSION = 4;
+
+ /**
+ * The number of structural features of the 'Traced Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_EXPRESSION_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Traced Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_EXPRESSION_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedBooleanExpressionImpl Traced Boolean Expression }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedBooleanExpressionImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedBooleanExpression()
+ * @generated
+ */
+ int TRACED_BOOLEAN_EXPRESSION = 1;
+
+ /**
+ * The number of structural features of the 'Traced Boolean Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_BOOLEAN_EXPRESSION_FEATURE_COUNT = TRACED_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Traced Boolean Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_BOOLEAN_EXPRESSION_OPERATION_COUNT = TRACED_EXPRESSION_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedBooleanVariableImpl Traced Boolean Variable }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedBooleanVariableImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedBooleanVariable()
+ * @generated
+ */
+ int TRACED_BOOLEAN_VARIABLE = 2;
+
+ /**
+ * The feature id for the 'Original Object ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT = TRACED_BOOLEAN_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Value Sequence ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE = TRACED_BOOLEAN_EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Traced Boolean Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_BOOLEAN_VARIABLE_FEATURE_COUNT = TRACED_BOOLEAN_EXPRESSION_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the 'Traced Boolean Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_BOOLEAN_VARIABLE_OPERATION_COUNT = TRACED_BOOLEAN_EXPRESSION_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedDigitalPinImpl Traced Digital Pin }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedDigitalPinImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedDigitalPin()
+ * @generated
+ */
+ int TRACED_DIGITAL_PIN = 3;
+
+ /**
+ * The feature id for the 'Level Sequence ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_DIGITAL_PIN__LEVEL_SEQUENCE = TRACED_PIN__LEVEL_SEQUENCE;
+
+ /**
+ * The feature id for the 'Module ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_DIGITAL_PIN__MODULE = TRACED_PIN_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Original Object ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_DIGITAL_PIN__ORIGINAL_OBJECT = TRACED_PIN_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Traced Digital Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_DIGITAL_PIN_FEATURE_COUNT = TRACED_PIN_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the 'Traced Digital Pin ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_DIGITAL_PIN_OPERATION_COUNT = TRACED_PIN_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedIntegerExpressionImpl Traced Integer Expression }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedIntegerExpressionImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedIntegerExpression()
+ * @generated
+ */
+ int TRACED_INTEGER_EXPRESSION = 5;
+
+ /**
+ * The number of structural features of the 'Traced Integer Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_INTEGER_EXPRESSION_FEATURE_COUNT = TRACED_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Traced Integer Expression ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_INTEGER_EXPRESSION_OPERATION_COUNT = TRACED_EXPRESSION_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedIntegerVariableImpl Traced Integer Variable }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedIntegerVariableImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedIntegerVariable()
+ * @generated
+ */
+ int TRACED_INTEGER_VARIABLE = 6;
+
+ /**
+ * The feature id for the 'Original Object Integer Variable ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE = TRACED_INTEGER_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Value Sequence ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE = TRACED_INTEGER_EXPRESSION_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Traced Integer Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_INTEGER_VARIABLE_FEATURE_COUNT = TRACED_INTEGER_EXPRESSION_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the 'Traced Integer Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_INTEGER_VARIABLE_OPERATION_COUNT = TRACED_INTEGER_EXPRESSION_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedNamedElementImpl Traced Named Element }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedNamedElementImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedNamedElement()
+ * @generated
+ */
+ int TRACED_NAMED_ELEMENT = 7;
+
+ /**
+ * The number of structural features of the 'Traced Named Element ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_NAMED_ELEMENT_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Traced Named Element ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_NAMED_ELEMENT_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedSharedResourceImpl Traced Shared Resource }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedSharedResourceImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedSharedResource()
+ * @generated
+ */
+ int TRACED_SHARED_RESOURCE = 9;
+
+ /**
+ * The feature id for the 'Original Object Integer Variable ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_SHARED_RESOURCE__ORIGINAL_OBJECT_INTEGER_VARIABLE = TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE;
+
+ /**
+ * The feature id for the 'Value Sequence ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_SHARED_RESOURCE__VALUE_SEQUENCE = TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE;
+
+ /**
+ * The number of structural features of the 'Traced Shared Resource ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_SHARED_RESOURCE_FEATURE_COUNT = TRACED_INTEGER_VARIABLE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Traced Shared Resource ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_SHARED_RESOURCE_OPERATION_COUNT = TRACED_INTEGER_VARIABLE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.States.arduino.impl.TracedVariableImpl Traced Variable }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedVariableImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedVariable()
+ * @generated
+ */
+ int TRACED_VARIABLE = 10;
+
+ /**
+ * The number of structural features of the 'Traced Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_VARIABLE_FEATURE_COUNT = TRACED_EXPRESSION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Traced Variable ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int TRACED_VARIABLE_OPERATION_COUNT = TRACED_EXPRESSION_OPERATION_COUNT + 0;
+
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedAnalogPin Traced Analog Pin }'.
+ *
+ *
+ * @return the meta object for class 'Traced Analog Pin '.
+ * @see arduinoTrace.States.arduino.TracedAnalogPin
+ * @generated
+ */
+ EClass getTracedAnalogPin();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.States.arduino.TracedAnalogPin#getModule Module }'.
+ *
+ *
+ * @return the meta object for the reference 'Module '.
+ * @see arduinoTrace.States.arduino.TracedAnalogPin#getModule()
+ * @see #getTracedAnalogPin()
+ * @generated
+ */
+ EReference getTracedAnalogPin_Module();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.States.arduino.TracedAnalogPin#getOriginalObject Original Object }'.
+ *
+ *
+ * @return the meta object for the reference 'Original Object '.
+ * @see arduinoTrace.States.arduino.TracedAnalogPin#getOriginalObject()
+ * @see #getTracedAnalogPin()
+ * @generated
+ */
+ EReference getTracedAnalogPin_OriginalObject();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedBooleanExpression Traced Boolean Expression }'.
+ *
+ *
+ * @return the meta object for class 'Traced Boolean Expression '.
+ * @see arduinoTrace.States.arduino.TracedBooleanExpression
+ * @generated
+ */
+ EClass getTracedBooleanExpression();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedBooleanVariable Traced Boolean Variable }'.
+ *
+ *
+ * @return the meta object for class 'Traced Boolean Variable '.
+ * @see arduinoTrace.States.arduino.TracedBooleanVariable
+ * @generated
+ */
+ EClass getTracedBooleanVariable();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.States.arduino.TracedBooleanVariable#getOriginalObject Original Object }'.
+ *
+ *
+ * @return the meta object for the reference 'Original Object '.
+ * @see arduinoTrace.States.arduino.TracedBooleanVariable#getOriginalObject()
+ * @see #getTracedBooleanVariable()
+ * @generated
+ */
+ EReference getTracedBooleanVariable_OriginalObject();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.States.arduino.TracedBooleanVariable#getValueSequence Value Sequence }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Value Sequence '.
+ * @see arduinoTrace.States.arduino.TracedBooleanVariable#getValueSequence()
+ * @see #getTracedBooleanVariable()
+ * @generated
+ */
+ EReference getTracedBooleanVariable_ValueSequence();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedDigitalPin Traced Digital Pin }'.
+ *
+ *
+ * @return the meta object for class 'Traced Digital Pin '.
+ * @see arduinoTrace.States.arduino.TracedDigitalPin
+ * @generated
+ */
+ EClass getTracedDigitalPin();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.States.arduino.TracedDigitalPin#getModule Module }'.
+ *
+ *
+ * @return the meta object for the reference 'Module '.
+ * @see arduinoTrace.States.arduino.TracedDigitalPin#getModule()
+ * @see #getTracedDigitalPin()
+ * @generated
+ */
+ EReference getTracedDigitalPin_Module();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.States.arduino.TracedDigitalPin#getOriginalObject Original Object }'.
+ *
+ *
+ * @return the meta object for the reference 'Original Object '.
+ * @see arduinoTrace.States.arduino.TracedDigitalPin#getOriginalObject()
+ * @see #getTracedDigitalPin()
+ * @generated
+ */
+ EReference getTracedDigitalPin_OriginalObject();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedExpression Traced Expression }'.
+ *
+ *
+ * @return the meta object for class 'Traced Expression '.
+ * @see arduinoTrace.States.arduino.TracedExpression
+ * @generated
+ */
+ EClass getTracedExpression();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedIntegerExpression Traced Integer Expression }'.
+ *
+ *
+ * @return the meta object for class 'Traced Integer Expression '.
+ * @see arduinoTrace.States.arduino.TracedIntegerExpression
+ * @generated
+ */
+ EClass getTracedIntegerExpression();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedIntegerVariable Traced Integer Variable }'.
+ *
+ *
+ * @return the meta object for class 'Traced Integer Variable '.
+ * @see arduinoTrace.States.arduino.TracedIntegerVariable
+ * @generated
+ */
+ EClass getTracedIntegerVariable();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.States.arduino.TracedIntegerVariable#getOriginalObject_IntegerVariable Original Object Integer Variable }'.
+ *
+ *
+ * @return the meta object for the reference 'Original Object Integer Variable '.
+ * @see arduinoTrace.States.arduino.TracedIntegerVariable#getOriginalObject_IntegerVariable()
+ * @see #getTracedIntegerVariable()
+ * @generated
+ */
+ EReference getTracedIntegerVariable_OriginalObject_IntegerVariable();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.States.arduino.TracedIntegerVariable#getValueSequence Value Sequence }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Value Sequence '.
+ * @see arduinoTrace.States.arduino.TracedIntegerVariable#getValueSequence()
+ * @see #getTracedIntegerVariable()
+ * @generated
+ */
+ EReference getTracedIntegerVariable_ValueSequence();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedNamedElement Traced Named Element }'.
+ *
+ *
+ * @return the meta object for class 'Traced Named Element '.
+ * @see arduinoTrace.States.arduino.TracedNamedElement
+ * @generated
+ */
+ EClass getTracedNamedElement();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedPin Traced Pin }'.
+ *
+ *
+ * @return the meta object for class 'Traced Pin '.
+ * @see arduinoTrace.States.arduino.TracedPin
+ * @generated
+ */
+ EClass getTracedPin();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.States.arduino.TracedPin#getLevelSequence Level Sequence }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Level Sequence '.
+ * @see arduinoTrace.States.arduino.TracedPin#getLevelSequence()
+ * @see #getTracedPin()
+ * @generated
+ */
+ EReference getTracedPin_LevelSequence();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedSharedResource Traced Shared Resource }'.
+ *
+ *
+ * @return the meta object for class 'Traced Shared Resource '.
+ * @see arduinoTrace.States.arduino.TracedSharedResource
+ * @generated
+ */
+ EClass getTracedSharedResource();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.States.arduino.TracedVariable Traced Variable }'.
+ *
+ *
+ * @return the meta object for class 'Traced Variable '.
+ * @see arduinoTrace.States.arduino.TracedVariable
+ * @generated
+ */
+ EClass getTracedVariable();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ *
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ ArduinoFactory getArduinoFactory();
+
+ /**
+ *
+ * Defines literals for the meta objects that represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedAnalogPinImpl Traced Analog Pin }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedAnalogPinImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedAnalogPin()
+ * @generated
+ */
+ EClass TRACED_ANALOG_PIN = eINSTANCE.getTracedAnalogPin();
+
+ /**
+ * The meta object literal for the 'Module ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_ANALOG_PIN__MODULE = eINSTANCE.getTracedAnalogPin_Module();
+
+ /**
+ * The meta object literal for the 'Original Object ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_ANALOG_PIN__ORIGINAL_OBJECT = eINSTANCE.getTracedAnalogPin_OriginalObject();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedBooleanExpressionImpl Traced Boolean Expression }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedBooleanExpressionImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedBooleanExpression()
+ * @generated
+ */
+ EClass TRACED_BOOLEAN_EXPRESSION = eINSTANCE.getTracedBooleanExpression();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedBooleanVariableImpl Traced Boolean Variable }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedBooleanVariableImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedBooleanVariable()
+ * @generated
+ */
+ EClass TRACED_BOOLEAN_VARIABLE = eINSTANCE.getTracedBooleanVariable();
+
+ /**
+ * The meta object literal for the 'Original Object ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT = eINSTANCE.getTracedBooleanVariable_OriginalObject();
+
+ /**
+ * The meta object literal for the 'Value Sequence ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE = eINSTANCE.getTracedBooleanVariable_ValueSequence();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedDigitalPinImpl Traced Digital Pin }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedDigitalPinImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedDigitalPin()
+ * @generated
+ */
+ EClass TRACED_DIGITAL_PIN = eINSTANCE.getTracedDigitalPin();
+
+ /**
+ * The meta object literal for the 'Module ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_DIGITAL_PIN__MODULE = eINSTANCE.getTracedDigitalPin_Module();
+
+ /**
+ * The meta object literal for the 'Original Object ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_DIGITAL_PIN__ORIGINAL_OBJECT = eINSTANCE.getTracedDigitalPin_OriginalObject();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedExpressionImpl Traced Expression }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedExpressionImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedExpression()
+ * @generated
+ */
+ EClass TRACED_EXPRESSION = eINSTANCE.getTracedExpression();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedIntegerExpressionImpl Traced Integer Expression }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedIntegerExpressionImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedIntegerExpression()
+ * @generated
+ */
+ EClass TRACED_INTEGER_EXPRESSION = eINSTANCE.getTracedIntegerExpression();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedIntegerVariableImpl Traced Integer Variable }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedIntegerVariableImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedIntegerVariable()
+ * @generated
+ */
+ EClass TRACED_INTEGER_VARIABLE = eINSTANCE.getTracedIntegerVariable();
+
+ /**
+ * The meta object literal for the 'Original Object Integer Variable ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE = eINSTANCE.getTracedIntegerVariable_OriginalObject_IntegerVariable();
+
+ /**
+ * The meta object literal for the 'Value Sequence ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE = eINSTANCE.getTracedIntegerVariable_ValueSequence();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedNamedElementImpl Traced Named Element }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedNamedElementImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedNamedElement()
+ * @generated
+ */
+ EClass TRACED_NAMED_ELEMENT = eINSTANCE.getTracedNamedElement();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedPinImpl Traced Pin }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedPinImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedPin()
+ * @generated
+ */
+ EClass TRACED_PIN = eINSTANCE.getTracedPin();
+
+ /**
+ * The meta object literal for the 'Level Sequence ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference TRACED_PIN__LEVEL_SEQUENCE = eINSTANCE.getTracedPin_LevelSequence();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedSharedResourceImpl Traced Shared Resource }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedSharedResourceImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedSharedResource()
+ * @generated
+ */
+ EClass TRACED_SHARED_RESOURCE = eINSTANCE.getTracedSharedResource();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.States.arduino.impl.TracedVariableImpl Traced Variable }' class.
+ *
+ *
+ * @see arduinoTrace.States.arduino.impl.TracedVariableImpl
+ * @see arduinoTrace.States.arduino.impl.ArduinoPackageImpl#getTracedVariable()
+ * @generated
+ */
+ EClass TRACED_VARIABLE = eINSTANCE.getTracedVariable();
+
+ }
+
+} //ArduinoPackage
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedAnalogPin.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedAnalogPin.java
new file mode 100644
index 00000000..de246877
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedAnalogPin.java
@@ -0,0 +1,78 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+
+/**
+ *
+ * A representation of the model object 'Traced Analog Pin '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.arduino.TracedAnalogPin#getModule Module }
+ * {@link arduinoTrace.States.arduino.TracedAnalogPin#getOriginalObject Original Object }
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedAnalogPin()
+ * @model
+ * @generated
+ */
+public interface TracedAnalogPin extends TracedPin {
+ /**
+ * Returns the value of the 'Module ' reference.
+ *
+ *
+ * If the meaning of the 'Module ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Module ' reference.
+ * @see #setModule(ArduinoAnalogModule)
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedAnalogPin_Module()
+ * @model
+ * @generated
+ */
+ ArduinoAnalogModule getModule();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.arduino.TracedAnalogPin#getModule Module }' reference.
+ *
+ *
+ * @param value the new value of the 'Module ' reference.
+ * @see #getModule()
+ * @generated
+ */
+ void setModule(ArduinoAnalogModule value);
+
+ /**
+ * Returns the value of the 'Original Object ' reference.
+ *
+ *
+ * If the meaning of the 'Original Object ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Original Object ' reference.
+ * @see #setOriginalObject(AnalogPin)
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedAnalogPin_OriginalObject()
+ * @model
+ * @generated
+ */
+ AnalogPin getOriginalObject();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.arduino.TracedAnalogPin#getOriginalObject Original Object }' reference.
+ *
+ *
+ * @param value the new value of the 'Original Object ' reference.
+ * @see #getOriginalObject()
+ * @generated
+ */
+ void setOriginalObject(AnalogPin value);
+
+} // TracedAnalogPin
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedBooleanExpression.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedBooleanExpression.java
new file mode 100644
index 00000000..b627427d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedBooleanExpression.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Traced Boolean Expression '.
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedBooleanExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface TracedBooleanExpression extends TracedExpression {
+} // TracedBooleanExpression
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedBooleanVariable.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedBooleanVariable.java
new file mode 100644
index 00000000..b71b7e19
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedBooleanVariable.java
@@ -0,0 +1,73 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import arduinoTrace.States.BooleanVariable_value_Value;
+
+import fr.obeo.dsl.arduino.BooleanVariable;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Traced Boolean Variable '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.arduino.TracedBooleanVariable#getOriginalObject Original Object }
+ * {@link arduinoTrace.States.arduino.TracedBooleanVariable#getValueSequence Value Sequence }
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedBooleanVariable()
+ * @model
+ * @generated
+ */
+public interface TracedBooleanVariable extends TracedBooleanExpression, TracedVariable {
+ /**
+ * Returns the value of the 'Original Object ' reference.
+ *
+ *
+ * If the meaning of the 'Original Object ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Original Object ' reference.
+ * @see #setOriginalObject(BooleanVariable)
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedBooleanVariable_OriginalObject()
+ * @model
+ * @generated
+ */
+ BooleanVariable getOriginalObject();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.arduino.TracedBooleanVariable#getOriginalObject Original Object }' reference.
+ *
+ *
+ * @param value the new value of the 'Original Object ' reference.
+ * @see #getOriginalObject()
+ * @generated
+ */
+ void setOriginalObject(BooleanVariable value);
+
+ /**
+ * Returns the value of the 'Value Sequence ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.BooleanVariable_value_Value}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.BooleanVariable_value_Value#getParent Parent }'.
+ *
+ *
+ * If the meaning of the 'Value Sequence ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value Sequence ' containment reference list.
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedBooleanVariable_ValueSequence()
+ * @see arduinoTrace.States.BooleanVariable_value_Value#getParent
+ * @model opposite="parent" containment="true"
+ * @generated
+ */
+ EList getValueSequence();
+
+} // TracedBooleanVariable
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedDigitalPin.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedDigitalPin.java
new file mode 100644
index 00000000..5172ba81
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedDigitalPin.java
@@ -0,0 +1,78 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.DigitalPin;
+
+/**
+ *
+ * A representation of the model object 'Traced Digital Pin '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.arduino.TracedDigitalPin#getModule Module }
+ * {@link arduinoTrace.States.arduino.TracedDigitalPin#getOriginalObject Original Object }
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedDigitalPin()
+ * @model
+ * @generated
+ */
+public interface TracedDigitalPin extends TracedPin {
+ /**
+ * Returns the value of the 'Module ' reference.
+ *
+ *
+ * If the meaning of the 'Module ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Module ' reference.
+ * @see #setModule(ArduinoDigitalModule)
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedDigitalPin_Module()
+ * @model
+ * @generated
+ */
+ ArduinoDigitalModule getModule();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.arduino.TracedDigitalPin#getModule Module }' reference.
+ *
+ *
+ * @param value the new value of the 'Module ' reference.
+ * @see #getModule()
+ * @generated
+ */
+ void setModule(ArduinoDigitalModule value);
+
+ /**
+ * Returns the value of the 'Original Object ' reference.
+ *
+ *
+ * If the meaning of the 'Original Object ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Original Object ' reference.
+ * @see #setOriginalObject(DigitalPin)
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedDigitalPin_OriginalObject()
+ * @model
+ * @generated
+ */
+ DigitalPin getOriginalObject();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.arduino.TracedDigitalPin#getOriginalObject Original Object }' reference.
+ *
+ *
+ * @param value the new value of the 'Original Object ' reference.
+ * @see #getOriginalObject()
+ * @generated
+ */
+ void setOriginalObject(DigitalPin value);
+
+} // TracedDigitalPin
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedExpression.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedExpression.java
new file mode 100644
index 00000000..ecbacb0f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedExpression.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Traced Expression '.
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface TracedExpression extends EObject {
+} // TracedExpression
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedIntegerExpression.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedIntegerExpression.java
new file mode 100644
index 00000000..9916dac8
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedIntegerExpression.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Traced Integer Expression '.
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedIntegerExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface TracedIntegerExpression extends TracedExpression {
+} // TracedIntegerExpression
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedIntegerVariable.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedIntegerVariable.java
new file mode 100644
index 00000000..1c1d1848
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedIntegerVariable.java
@@ -0,0 +1,73 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import arduinoTrace.States.IntegerVariable_value_Value;
+
+import fr.obeo.dsl.arduino.IntegerVariable;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Traced Integer Variable '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.arduino.TracedIntegerVariable#getOriginalObject_IntegerVariable Original Object Integer Variable }
+ * {@link arduinoTrace.States.arduino.TracedIntegerVariable#getValueSequence Value Sequence }
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedIntegerVariable()
+ * @model
+ * @generated
+ */
+public interface TracedIntegerVariable extends TracedIntegerExpression, TracedVariable {
+ /**
+ * Returns the value of the 'Original Object Integer Variable ' reference.
+ *
+ *
+ * If the meaning of the 'Original Object Integer Variable ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Original Object Integer Variable ' reference.
+ * @see #setOriginalObject_IntegerVariable(IntegerVariable)
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedIntegerVariable_OriginalObject_IntegerVariable()
+ * @model
+ * @generated
+ */
+ IntegerVariable getOriginalObject_IntegerVariable();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.States.arduino.TracedIntegerVariable#getOriginalObject_IntegerVariable Original Object Integer Variable }' reference.
+ *
+ *
+ * @param value the new value of the 'Original Object Integer Variable ' reference.
+ * @see #getOriginalObject_IntegerVariable()
+ * @generated
+ */
+ void setOriginalObject_IntegerVariable(IntegerVariable value);
+
+ /**
+ * Returns the value of the 'Value Sequence ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.IntegerVariable_value_Value}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.IntegerVariable_value_Value#getParent Parent }'.
+ *
+ *
+ * If the meaning of the 'Value Sequence ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Value Sequence ' containment reference list.
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedIntegerVariable_ValueSequence()
+ * @see arduinoTrace.States.IntegerVariable_value_Value#getParent
+ * @model opposite="parent" containment="true"
+ * @generated
+ */
+ EList getValueSequence();
+
+} // TracedIntegerVariable
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedNamedElement.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedNamedElement.java
new file mode 100644
index 00000000..618c2a25
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedNamedElement.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Traced Named Element '.
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedNamedElement()
+ * @model abstract="true"
+ * @generated
+ */
+public interface TracedNamedElement extends EObject {
+} // TracedNamedElement
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedPin.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedPin.java
new file mode 100644
index 00000000..6f519db5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedPin.java
@@ -0,0 +1,46 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+import arduinoTrace.States.Pin_level_Value;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Traced Pin '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.States.arduino.TracedPin#getLevelSequence Level Sequence }
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedPin()
+ * @model abstract="true"
+ * @generated
+ */
+public interface TracedPin extends EObject {
+ /**
+ * Returns the value of the 'Level Sequence ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.Pin_level_Value}.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.Pin_level_Value#getParent Parent }'.
+ *
+ *
+ * If the meaning of the 'Level Sequence ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Level Sequence ' containment reference list.
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedPin_LevelSequence()
+ * @see arduinoTrace.States.Pin_level_Value#getParent
+ * @model opposite="parent" containment="true"
+ * @generated
+ */
+ EList getLevelSequence();
+
+} // TracedPin
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedSharedResource.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedSharedResource.java
new file mode 100644
index 00000000..e36ab271
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedSharedResource.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Traced Shared Resource '.
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedSharedResource()
+ * @model
+ * @generated
+ */
+public interface TracedSharedResource extends TracedIntegerVariable {
+} // TracedSharedResource
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedVariable.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedVariable.java
new file mode 100644
index 00000000..a28cea14
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/TracedVariable.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.States.arduino;
+
+
+/**
+ *
+ * A representation of the model object 'Traced Variable '.
+ *
+ *
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage#getTracedVariable()
+ * @model abstract="true"
+ * @generated
+ */
+public interface TracedVariable extends TracedExpression, TracedNamedElement {
+} // TracedVariable
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/ArduinoFactoryImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/ArduinoFactoryImpl.java
new file mode 100644
index 00000000..b47e9f8c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/ArduinoFactoryImpl.java
@@ -0,0 +1,139 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ *
+ * An implementation of the model Factory .
+ *
+ * @generated
+ */
+public class ArduinoFactoryImpl extends EFactoryImpl implements ArduinoFactory {
+ /**
+ * Creates the default factory implementation.
+ *
+ *
+ * @generated
+ */
+ public static ArduinoFactory init() {
+ try {
+ ArduinoFactory theArduinoFactory = (ArduinoFactory)EPackage.Registry.INSTANCE.getEFactory(ArduinoPackage.eNS_URI);
+ if (theArduinoFactory != null) {
+ return theArduinoFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ArduinoFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ *
+ *
+ * @generated
+ */
+ public ArduinoFactoryImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ArduinoPackage.TRACED_ANALOG_PIN: return createTracedAnalogPin();
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE: return createTracedBooleanVariable();
+ case ArduinoPackage.TRACED_DIGITAL_PIN: return createTracedDigitalPin();
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE: return createTracedIntegerVariable();
+ case ArduinoPackage.TRACED_SHARED_RESOURCE: return createTracedSharedResource();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedAnalogPin createTracedAnalogPin() {
+ TracedAnalogPinImpl tracedAnalogPin = new TracedAnalogPinImpl();
+ return tracedAnalogPin;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedBooleanVariable createTracedBooleanVariable() {
+ TracedBooleanVariableImpl tracedBooleanVariable = new TracedBooleanVariableImpl();
+ return tracedBooleanVariable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedDigitalPin createTracedDigitalPin() {
+ TracedDigitalPinImpl tracedDigitalPin = new TracedDigitalPinImpl();
+ return tracedDigitalPin;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedIntegerVariable createTracedIntegerVariable() {
+ TracedIntegerVariableImpl tracedIntegerVariable = new TracedIntegerVariableImpl();
+ return tracedIntegerVariable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedSharedResource createTracedSharedResource() {
+ TracedSharedResourceImpl tracedSharedResource = new TracedSharedResourceImpl();
+ return tracedSharedResource;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoPackage getArduinoPackage() {
+ return (ArduinoPackage)getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ArduinoPackage getPackage() {
+ return ArduinoPackage.eINSTANCE;
+ }
+
+} //ArduinoFactoryImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/ArduinoPackageImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/ArduinoPackageImpl.java
new file mode 100644
index 00000000..661ff7a7
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/ArduinoPackageImpl.java
@@ -0,0 +1,516 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.ArduinoTracePackage;
+
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoFactory;
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedAnalogPin;
+import arduinoTrace.States.arduino.TracedBooleanExpression;
+import arduinoTrace.States.arduino.TracedBooleanVariable;
+import arduinoTrace.States.arduino.TracedDigitalPin;
+import arduinoTrace.States.arduino.TracedExpression;
+import arduinoTrace.States.arduino.TracedIntegerExpression;
+import arduinoTrace.States.arduino.TracedIntegerVariable;
+import arduinoTrace.States.arduino.TracedNamedElement;
+import arduinoTrace.States.arduino.TracedPin;
+import arduinoTrace.States.arduino.TracedSharedResource;
+import arduinoTrace.States.arduino.TracedVariable;
+
+import arduinoTrace.States.impl.StatesPackageImpl;
+
+import arduinoTrace.Steps.StepsPackage;
+
+import arduinoTrace.Steps.impl.StepsPackageImpl;
+
+import arduinoTrace.impl.ArduinoTracePackageImpl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model Package .
+ *
+ * @generated
+ */
+public class ArduinoPackageImpl extends EPackageImpl implements ArduinoPackage {
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedAnalogPinEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedBooleanExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedBooleanVariableEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedDigitalPinEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedIntegerExpressionEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedIntegerVariableEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedNamedElementEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedPinEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedSharedResourceEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass tracedVariableEClass = null;
+
+ /**
+ * Creates an instance of the model Package , registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ *
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see arduinoTrace.States.arduino.ArduinoPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ArduinoPackageImpl() {
+ super(eNS_URI, ArduinoFactory.eINSTANCE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
This method is used to initialize {@link ArduinoPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ArduinoPackage init() {
+ if (isInited) return (ArduinoPackage)EPackage.Registry.INSTANCE.getEPackage(ArduinoPackage.eNS_URI);
+
+ // Obtain or create and register package
+ ArduinoPackageImpl theArduinoPackage = (ArduinoPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ArduinoPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ArduinoPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ fr.obeo.dsl.arduino.ArduinoPackage.eINSTANCE.eClass();
+ MsePackage.eINSTANCE.eClass();
+
+ // Obtain or create and register interdependencies
+ ArduinoTracePackageImpl theArduinoTracePackage = (ArduinoTracePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI) instanceof ArduinoTracePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI) : ArduinoTracePackage.eINSTANCE);
+ StepsPackageImpl theStepsPackage = (StepsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI) instanceof StepsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI) : StepsPackage.eINSTANCE);
+ StatesPackageImpl theStatesPackage = (StatesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI) instanceof StatesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI) : StatesPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ theArduinoPackage.createPackageContents();
+ theArduinoTracePackage.createPackageContents();
+ theStepsPackage.createPackageContents();
+ theStatesPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theArduinoPackage.initializePackageContents();
+ theArduinoTracePackage.initializePackageContents();
+ theStepsPackage.initializePackageContents();
+ theStatesPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theArduinoPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ArduinoPackage.eNS_URI, theArduinoPackage);
+ return theArduinoPackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedAnalogPin() {
+ return tracedAnalogPinEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedAnalogPin_Module() {
+ return (EReference)tracedAnalogPinEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedAnalogPin_OriginalObject() {
+ return (EReference)tracedAnalogPinEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedBooleanExpression() {
+ return tracedBooleanExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedBooleanVariable() {
+ return tracedBooleanVariableEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedBooleanVariable_OriginalObject() {
+ return (EReference)tracedBooleanVariableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedBooleanVariable_ValueSequence() {
+ return (EReference)tracedBooleanVariableEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedDigitalPin() {
+ return tracedDigitalPinEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedDigitalPin_Module() {
+ return (EReference)tracedDigitalPinEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedDigitalPin_OriginalObject() {
+ return (EReference)tracedDigitalPinEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedExpression() {
+ return tracedExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedIntegerExpression() {
+ return tracedIntegerExpressionEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedIntegerVariable() {
+ return tracedIntegerVariableEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedIntegerVariable_OriginalObject_IntegerVariable() {
+ return (EReference)tracedIntegerVariableEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedIntegerVariable_ValueSequence() {
+ return (EReference)tracedIntegerVariableEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedNamedElement() {
+ return tracedNamedElementEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedPin() {
+ return tracedPinEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTracedPin_LevelSequence() {
+ return (EReference)tracedPinEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedSharedResource() {
+ return tracedSharedResourceEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTracedVariable() {
+ return tracedVariableEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoFactory getArduinoFactory() {
+ return (ArduinoFactory)getEFactoryInstance();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ tracedAnalogPinEClass = createEClass(TRACED_ANALOG_PIN);
+ createEReference(tracedAnalogPinEClass, TRACED_ANALOG_PIN__MODULE);
+ createEReference(tracedAnalogPinEClass, TRACED_ANALOG_PIN__ORIGINAL_OBJECT);
+
+ tracedBooleanExpressionEClass = createEClass(TRACED_BOOLEAN_EXPRESSION);
+
+ tracedBooleanVariableEClass = createEClass(TRACED_BOOLEAN_VARIABLE);
+ createEReference(tracedBooleanVariableEClass, TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT);
+ createEReference(tracedBooleanVariableEClass, TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE);
+
+ tracedDigitalPinEClass = createEClass(TRACED_DIGITAL_PIN);
+ createEReference(tracedDigitalPinEClass, TRACED_DIGITAL_PIN__MODULE);
+ createEReference(tracedDigitalPinEClass, TRACED_DIGITAL_PIN__ORIGINAL_OBJECT);
+
+ tracedExpressionEClass = createEClass(TRACED_EXPRESSION);
+
+ tracedIntegerExpressionEClass = createEClass(TRACED_INTEGER_EXPRESSION);
+
+ tracedIntegerVariableEClass = createEClass(TRACED_INTEGER_VARIABLE);
+ createEReference(tracedIntegerVariableEClass, TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE);
+ createEReference(tracedIntegerVariableEClass, TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE);
+
+ tracedNamedElementEClass = createEClass(TRACED_NAMED_ELEMENT);
+
+ tracedPinEClass = createEClass(TRACED_PIN);
+ createEReference(tracedPinEClass, TRACED_PIN__LEVEL_SEQUENCE);
+
+ tracedSharedResourceEClass = createEClass(TRACED_SHARED_RESOURCE);
+
+ tracedVariableEClass = createEClass(TRACED_VARIABLE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ fr.obeo.dsl.arduino.ArduinoPackage theArduinoPackage_1 = (fr.obeo.dsl.arduino.ArduinoPackage)EPackage.Registry.INSTANCE.getEPackage(fr.obeo.dsl.arduino.ArduinoPackage.eNS_URI);
+ StatesPackage theStatesPackage = (StatesPackage)EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ tracedAnalogPinEClass.getESuperTypes().add(this.getTracedPin());
+ tracedBooleanExpressionEClass.getESuperTypes().add(this.getTracedExpression());
+ tracedBooleanVariableEClass.getESuperTypes().add(this.getTracedBooleanExpression());
+ tracedBooleanVariableEClass.getESuperTypes().add(this.getTracedVariable());
+ tracedDigitalPinEClass.getESuperTypes().add(this.getTracedPin());
+ tracedIntegerExpressionEClass.getESuperTypes().add(this.getTracedExpression());
+ tracedIntegerVariableEClass.getESuperTypes().add(this.getTracedIntegerExpression());
+ tracedIntegerVariableEClass.getESuperTypes().add(this.getTracedVariable());
+ tracedSharedResourceEClass.getESuperTypes().add(this.getTracedIntegerVariable());
+ tracedVariableEClass.getESuperTypes().add(this.getTracedExpression());
+ tracedVariableEClass.getESuperTypes().add(this.getTracedNamedElement());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(tracedAnalogPinEClass, TracedAnalogPin.class, "TracedAnalogPin", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTracedAnalogPin_Module(), theArduinoPackage_1.getArduinoAnalogModule(), null, "module", null, 0, 1, TracedAnalogPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTracedAnalogPin_OriginalObject(), theArduinoPackage_1.getAnalogPin(), null, "originalObject", null, 0, 1, TracedAnalogPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(tracedBooleanExpressionEClass, TracedBooleanExpression.class, "TracedBooleanExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(tracedBooleanVariableEClass, TracedBooleanVariable.class, "TracedBooleanVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTracedBooleanVariable_OriginalObject(), theArduinoPackage_1.getBooleanVariable(), null, "originalObject", null, 0, 1, TracedBooleanVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTracedBooleanVariable_ValueSequence(), theStatesPackage.getBooleanVariable_value_Value(), theStatesPackage.getBooleanVariable_value_Value_Parent(), "valueSequence", null, 0, -1, TracedBooleanVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(tracedDigitalPinEClass, TracedDigitalPin.class, "TracedDigitalPin", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTracedDigitalPin_Module(), theArduinoPackage_1.getArduinoDigitalModule(), null, "module", null, 0, 1, TracedDigitalPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTracedDigitalPin_OriginalObject(), theArduinoPackage_1.getDigitalPin(), null, "originalObject", null, 0, 1, TracedDigitalPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(tracedExpressionEClass, TracedExpression.class, "TracedExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(tracedIntegerExpressionEClass, TracedIntegerExpression.class, "TracedIntegerExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(tracedIntegerVariableEClass, TracedIntegerVariable.class, "TracedIntegerVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTracedIntegerVariable_OriginalObject_IntegerVariable(), theArduinoPackage_1.getIntegerVariable(), null, "originalObject_IntegerVariable", null, 0, 1, TracedIntegerVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTracedIntegerVariable_ValueSequence(), theStatesPackage.getIntegerVariable_value_Value(), theStatesPackage.getIntegerVariable_value_Value_Parent(), "valueSequence", null, 0, -1, TracedIntegerVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(tracedNamedElementEClass, TracedNamedElement.class, "TracedNamedElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(tracedPinEClass, TracedPin.class, "TracedPin", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTracedPin_LevelSequence(), theStatesPackage.getPin_level_Value(), theStatesPackage.getPin_level_Value_Parent(), "levelSequence", null, 0, -1, TracedPin.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(tracedSharedResourceEClass, TracedSharedResource.class, "TracedSharedResource", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(tracedVariableEClass, TracedVariable.class, "TracedVariable", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ }
+
+} //ArduinoPackageImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedAnalogPinImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedAnalogPinImpl.java
new file mode 100644
index 00000000..857298d1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedAnalogPinImpl.java
@@ -0,0 +1,218 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedAnalogPin;
+
+import fr.obeo.dsl.arduino.AnalogPin;
+import fr.obeo.dsl.arduino.ArduinoAnalogModule;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Traced Analog Pin '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.arduino.impl.TracedAnalogPinImpl#getModule Module }
+ * {@link arduinoTrace.States.arduino.impl.TracedAnalogPinImpl#getOriginalObject Original Object }
+ *
+ *
+ *
+ * @generated
+ */
+public class TracedAnalogPinImpl extends TracedPinImpl implements TracedAnalogPin {
+ /**
+ * The cached value of the '{@link #getModule() Module }' reference.
+ *
+ *
+ * @see #getModule()
+ * @generated
+ * @ordered
+ */
+ protected ArduinoAnalogModule module;
+
+ /**
+ * The cached value of the '{@link #getOriginalObject() Original Object }' reference.
+ *
+ *
+ * @see #getOriginalObject()
+ * @generated
+ * @ordered
+ */
+ protected AnalogPin originalObject;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedAnalogPinImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_ANALOG_PIN;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoAnalogModule getModule() {
+ if (module != null && module.eIsProxy()) {
+ InternalEObject oldModule = (InternalEObject)module;
+ module = (ArduinoAnalogModule)eResolveProxy(oldModule);
+ if (module != oldModule) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.TRACED_ANALOG_PIN__MODULE, oldModule, module));
+ }
+ }
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoAnalogModule basicGetModule() {
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setModule(ArduinoAnalogModule newModule) {
+ ArduinoAnalogModule oldModule = module;
+ module = newModule;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.TRACED_ANALOG_PIN__MODULE, oldModule, module));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public AnalogPin getOriginalObject() {
+ if (originalObject != null && originalObject.eIsProxy()) {
+ InternalEObject oldOriginalObject = (InternalEObject)originalObject;
+ originalObject = (AnalogPin)eResolveProxy(oldOriginalObject);
+ if (originalObject != oldOriginalObject) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.TRACED_ANALOG_PIN__ORIGINAL_OBJECT, oldOriginalObject, originalObject));
+ }
+ }
+ return originalObject;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public AnalogPin basicGetOriginalObject() {
+ return originalObject;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOriginalObject(AnalogPin newOriginalObject) {
+ AnalogPin oldOriginalObject = originalObject;
+ originalObject = newOriginalObject;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.TRACED_ANALOG_PIN__ORIGINAL_OBJECT, oldOriginalObject, originalObject));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_ANALOG_PIN__MODULE:
+ if (resolve) return getModule();
+ return basicGetModule();
+ case ArduinoPackage.TRACED_ANALOG_PIN__ORIGINAL_OBJECT:
+ if (resolve) return getOriginalObject();
+ return basicGetOriginalObject();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_ANALOG_PIN__MODULE:
+ setModule((ArduinoAnalogModule)newValue);
+ return;
+ case ArduinoPackage.TRACED_ANALOG_PIN__ORIGINAL_OBJECT:
+ setOriginalObject((AnalogPin)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_ANALOG_PIN__MODULE:
+ setModule((ArduinoAnalogModule)null);
+ return;
+ case ArduinoPackage.TRACED_ANALOG_PIN__ORIGINAL_OBJECT:
+ setOriginalObject((AnalogPin)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_ANALOG_PIN__MODULE:
+ return module != null;
+ case ArduinoPackage.TRACED_ANALOG_PIN__ORIGINAL_OBJECT:
+ return originalObject != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //TracedAnalogPinImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedBooleanExpressionImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedBooleanExpressionImpl.java
new file mode 100644
index 00000000..24ae8b93
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedBooleanExpressionImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedBooleanExpression;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Traced Boolean Expression '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class TracedBooleanExpressionImpl extends TracedExpressionImpl implements TracedBooleanExpression {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedBooleanExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_BOOLEAN_EXPRESSION;
+ }
+
+} //TracedBooleanExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedBooleanVariableImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedBooleanVariableImpl.java
new file mode 100644
index 00000000..d6f7c8c6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedBooleanVariableImpl.java
@@ -0,0 +1,232 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.BooleanVariable_value_Value;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedBooleanVariable;
+
+import fr.obeo.dsl.arduino.BooleanVariable;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Traced Boolean Variable '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.arduino.impl.TracedBooleanVariableImpl#getOriginalObject Original Object }
+ * {@link arduinoTrace.States.arduino.impl.TracedBooleanVariableImpl#getValueSequence Value Sequence }
+ *
+ *
+ *
+ * @generated
+ */
+public class TracedBooleanVariableImpl extends TracedBooleanExpressionImpl implements TracedBooleanVariable {
+ /**
+ * The cached value of the '{@link #getOriginalObject() Original Object }' reference.
+ *
+ *
+ * @see #getOriginalObject()
+ * @generated
+ * @ordered
+ */
+ protected BooleanVariable originalObject;
+
+ /**
+ * The cached value of the '{@link #getValueSequence() Value Sequence }' containment reference list.
+ *
+ *
+ * @see #getValueSequence()
+ * @generated
+ * @ordered
+ */
+ protected EList valueSequence;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedBooleanVariableImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_BOOLEAN_VARIABLE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanVariable getOriginalObject() {
+ if (originalObject != null && originalObject.eIsProxy()) {
+ InternalEObject oldOriginalObject = (InternalEObject)originalObject;
+ originalObject = (BooleanVariable)eResolveProxy(oldOriginalObject);
+ if (originalObject != oldOriginalObject) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT, oldOriginalObject, originalObject));
+ }
+ }
+ return originalObject;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanVariable basicGetOriginalObject() {
+ return originalObject;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOriginalObject(BooleanVariable newOriginalObject) {
+ BooleanVariable oldOriginalObject = originalObject;
+ originalObject = newOriginalObject;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT, oldOriginalObject, originalObject));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getValueSequence() {
+ if (valueSequence == null) {
+ valueSequence = new EObjectContainmentWithInverseEList(BooleanVariable_value_Value.class, this, ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE, StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT);
+ }
+ return valueSequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE:
+ return ((InternalEList)(InternalEList>)getValueSequence()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE:
+ return ((InternalEList>)getValueSequence()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT:
+ if (resolve) return getOriginalObject();
+ return basicGetOriginalObject();
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE:
+ return getValueSequence();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT:
+ setOriginalObject((BooleanVariable)newValue);
+ return;
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE:
+ getValueSequence().clear();
+ getValueSequence().addAll((Collection extends BooleanVariable_value_Value>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT:
+ setOriginalObject((BooleanVariable)null);
+ return;
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE:
+ getValueSequence().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__ORIGINAL_OBJECT:
+ return originalObject != null;
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE:
+ return valueSequence != null && !valueSequence.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //TracedBooleanVariableImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedDigitalPinImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedDigitalPinImpl.java
new file mode 100644
index 00000000..514cc4e2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedDigitalPinImpl.java
@@ -0,0 +1,218 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedDigitalPin;
+
+import fr.obeo.dsl.arduino.ArduinoDigitalModule;
+import fr.obeo.dsl.arduino.DigitalPin;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+/**
+ *
+ * An implementation of the model object 'Traced Digital Pin '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.arduino.impl.TracedDigitalPinImpl#getModule Module }
+ * {@link arduinoTrace.States.arduino.impl.TracedDigitalPinImpl#getOriginalObject Original Object }
+ *
+ *
+ *
+ * @generated
+ */
+public class TracedDigitalPinImpl extends TracedPinImpl implements TracedDigitalPin {
+ /**
+ * The cached value of the '{@link #getModule() Module }' reference.
+ *
+ *
+ * @see #getModule()
+ * @generated
+ * @ordered
+ */
+ protected ArduinoDigitalModule module;
+
+ /**
+ * The cached value of the '{@link #getOriginalObject() Original Object }' reference.
+ *
+ *
+ * @see #getOriginalObject()
+ * @generated
+ * @ordered
+ */
+ protected DigitalPin originalObject;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedDigitalPinImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_DIGITAL_PIN;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoDigitalModule getModule() {
+ if (module != null && module.eIsProxy()) {
+ InternalEObject oldModule = (InternalEObject)module;
+ module = (ArduinoDigitalModule)eResolveProxy(oldModule);
+ if (module != oldModule) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.TRACED_DIGITAL_PIN__MODULE, oldModule, module));
+ }
+ }
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoDigitalModule basicGetModule() {
+ return module;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setModule(ArduinoDigitalModule newModule) {
+ ArduinoDigitalModule oldModule = module;
+ module = newModule;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.TRACED_DIGITAL_PIN__MODULE, oldModule, module));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public DigitalPin getOriginalObject() {
+ if (originalObject != null && originalObject.eIsProxy()) {
+ InternalEObject oldOriginalObject = (InternalEObject)originalObject;
+ originalObject = (DigitalPin)eResolveProxy(oldOriginalObject);
+ if (originalObject != oldOriginalObject) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.TRACED_DIGITAL_PIN__ORIGINAL_OBJECT, oldOriginalObject, originalObject));
+ }
+ }
+ return originalObject;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public DigitalPin basicGetOriginalObject() {
+ return originalObject;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOriginalObject(DigitalPin newOriginalObject) {
+ DigitalPin oldOriginalObject = originalObject;
+ originalObject = newOriginalObject;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.TRACED_DIGITAL_PIN__ORIGINAL_OBJECT, oldOriginalObject, originalObject));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_DIGITAL_PIN__MODULE:
+ if (resolve) return getModule();
+ return basicGetModule();
+ case ArduinoPackage.TRACED_DIGITAL_PIN__ORIGINAL_OBJECT:
+ if (resolve) return getOriginalObject();
+ return basicGetOriginalObject();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_DIGITAL_PIN__MODULE:
+ setModule((ArduinoDigitalModule)newValue);
+ return;
+ case ArduinoPackage.TRACED_DIGITAL_PIN__ORIGINAL_OBJECT:
+ setOriginalObject((DigitalPin)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_DIGITAL_PIN__MODULE:
+ setModule((ArduinoDigitalModule)null);
+ return;
+ case ArduinoPackage.TRACED_DIGITAL_PIN__ORIGINAL_OBJECT:
+ setOriginalObject((DigitalPin)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_DIGITAL_PIN__MODULE:
+ return module != null;
+ case ArduinoPackage.TRACED_DIGITAL_PIN__ORIGINAL_OBJECT:
+ return originalObject != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //TracedDigitalPinImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedExpressionImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedExpressionImpl.java
new file mode 100644
index 00000000..e8b10658
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedExpressionImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedExpression;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Traced Expression '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class TracedExpressionImpl extends MinimalEObjectImpl.Container implements TracedExpression {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_EXPRESSION;
+ }
+
+} //TracedExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedIntegerExpressionImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedIntegerExpressionImpl.java
new file mode 100644
index 00000000..fabb9e04
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedIntegerExpressionImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedIntegerExpression;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Traced Integer Expression '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class TracedIntegerExpressionImpl extends TracedExpressionImpl implements TracedIntegerExpression {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedIntegerExpressionImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_INTEGER_EXPRESSION;
+ }
+
+} //TracedIntegerExpressionImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedIntegerVariableImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedIntegerVariableImpl.java
new file mode 100644
index 00000000..2c79df5f
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedIntegerVariableImpl.java
@@ -0,0 +1,232 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.IntegerVariable_value_Value;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedIntegerVariable;
+
+import fr.obeo.dsl.arduino.IntegerVariable;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Traced Integer Variable '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.arduino.impl.TracedIntegerVariableImpl#getOriginalObject_IntegerVariable Original Object Integer Variable }
+ * {@link arduinoTrace.States.arduino.impl.TracedIntegerVariableImpl#getValueSequence Value Sequence }
+ *
+ *
+ *
+ * @generated
+ */
+public class TracedIntegerVariableImpl extends TracedIntegerExpressionImpl implements TracedIntegerVariable {
+ /**
+ * The cached value of the '{@link #getOriginalObject_IntegerVariable() Original Object Integer Variable }' reference.
+ *
+ *
+ * @see #getOriginalObject_IntegerVariable()
+ * @generated
+ * @ordered
+ */
+ protected IntegerVariable originalObject_IntegerVariable;
+
+ /**
+ * The cached value of the '{@link #getValueSequence() Value Sequence }' containment reference list.
+ *
+ *
+ * @see #getValueSequence()
+ * @generated
+ * @ordered
+ */
+ protected EList valueSequence;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedIntegerVariableImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_INTEGER_VARIABLE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IntegerVariable getOriginalObject_IntegerVariable() {
+ if (originalObject_IntegerVariable != null && originalObject_IntegerVariable.eIsProxy()) {
+ InternalEObject oldOriginalObject_IntegerVariable = (InternalEObject)originalObject_IntegerVariable;
+ originalObject_IntegerVariable = (IntegerVariable)eResolveProxy(oldOriginalObject_IntegerVariable);
+ if (originalObject_IntegerVariable != oldOriginalObject_IntegerVariable) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ArduinoPackage.TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE, oldOriginalObject_IntegerVariable, originalObject_IntegerVariable));
+ }
+ }
+ return originalObject_IntegerVariable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IntegerVariable basicGetOriginalObject_IntegerVariable() {
+ return originalObject_IntegerVariable;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setOriginalObject_IntegerVariable(IntegerVariable newOriginalObject_IntegerVariable) {
+ IntegerVariable oldOriginalObject_IntegerVariable = originalObject_IntegerVariable;
+ originalObject_IntegerVariable = newOriginalObject_IntegerVariable;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ArduinoPackage.TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE, oldOriginalObject_IntegerVariable, originalObject_IntegerVariable));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getValueSequence() {
+ if (valueSequence == null) {
+ valueSequence = new EObjectContainmentWithInverseEList(IntegerVariable_value_Value.class, this, ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE, StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT);
+ }
+ return valueSequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE:
+ return ((InternalEList)(InternalEList>)getValueSequence()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE:
+ return ((InternalEList>)getValueSequence()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE:
+ if (resolve) return getOriginalObject_IntegerVariable();
+ return basicGetOriginalObject_IntegerVariable();
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE:
+ return getValueSequence();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE:
+ setOriginalObject_IntegerVariable((IntegerVariable)newValue);
+ return;
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE:
+ getValueSequence().clear();
+ getValueSequence().addAll((Collection extends IntegerVariable_value_Value>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE:
+ setOriginalObject_IntegerVariable((IntegerVariable)null);
+ return;
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE:
+ getValueSequence().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__ORIGINAL_OBJECT_INTEGER_VARIABLE:
+ return originalObject_IntegerVariable != null;
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE:
+ return valueSequence != null && !valueSequence.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //TracedIntegerVariableImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedNamedElementImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedNamedElementImpl.java
new file mode 100644
index 00000000..5ec44160
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedNamedElementImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedNamedElement;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Traced Named Element '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class TracedNamedElementImpl extends MinimalEObjectImpl.Container implements TracedNamedElement {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedNamedElementImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_NAMED_ELEMENT;
+ }
+
+} //TracedNamedElementImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedPinImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedPinImpl.java
new file mode 100644
index 00000000..5d81353b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedPinImpl.java
@@ -0,0 +1,169 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.Pin_level_Value;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedPin;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Traced Pin '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.arduino.impl.TracedPinImpl#getLevelSequence Level Sequence }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class TracedPinImpl extends MinimalEObjectImpl.Container implements TracedPin {
+ /**
+ * The cached value of the '{@link #getLevelSequence() Level Sequence }' containment reference list.
+ *
+ *
+ * @see #getLevelSequence()
+ * @generated
+ * @ordered
+ */
+ protected EList levelSequence;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedPinImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_PIN;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getLevelSequence() {
+ if (levelSequence == null) {
+ levelSequence = new EObjectContainmentWithInverseEList(Pin_level_Value.class, this, ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE, StatesPackage.PIN_LEVEL_VALUE__PARENT);
+ }
+ return levelSequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE:
+ return ((InternalEList)(InternalEList>)getLevelSequence()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE:
+ return ((InternalEList>)getLevelSequence()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE:
+ return getLevelSequence();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE:
+ getLevelSequence().clear();
+ getLevelSequence().addAll((Collection extends Pin_level_Value>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE:
+ getLevelSequence().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE:
+ return levelSequence != null && !levelSequence.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //TracedPinImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedSharedResourceImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedSharedResourceImpl.java
new file mode 100644
index 00000000..f919b73a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedSharedResourceImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedSharedResource;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Traced Shared Resource '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class TracedSharedResourceImpl extends TracedIntegerVariableImpl implements TracedSharedResource {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedSharedResourceImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_SHARED_RESOURCE;
+ }
+
+} //TracedSharedResourceImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedVariableImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedVariableImpl.java
new file mode 100644
index 00000000..e97bcb01
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/impl/TracedVariableImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.States.arduino.impl;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedVariable;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Traced Variable '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class TracedVariableImpl extends TracedExpressionImpl implements TracedVariable {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TracedVariableImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoPackage.Literals.TRACED_VARIABLE;
+ }
+
+} //TracedVariableImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/util/ArduinoAdapterFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/util/ArduinoAdapterFactory.java
new file mode 100644
index 00000000..fe3f1ee4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/util/ArduinoAdapterFactory.java
@@ -0,0 +1,300 @@
+/**
+ */
+package arduinoTrace.States.arduino.util;
+
+import arduinoTrace.States.arduino.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * The Adapter Factory for the model.
+ * It provides an adapter createXXX
method for each class of the model.
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage
+ * @generated
+ */
+public class ArduinoAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ *
+ *
+ * @generated
+ */
+ protected static ArduinoPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ *
+ * @generated
+ */
+ public ArduinoAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ArduinoPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ *
+ * This implementation returns true
if the object is either the model's package or is an instance object of the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoSwitch modelSwitch =
+ new ArduinoSwitch() {
+ @Override
+ public Adapter caseTracedAnalogPin(TracedAnalogPin object) {
+ return createTracedAnalogPinAdapter();
+ }
+ @Override
+ public Adapter caseTracedBooleanExpression(TracedBooleanExpression object) {
+ return createTracedBooleanExpressionAdapter();
+ }
+ @Override
+ public Adapter caseTracedBooleanVariable(TracedBooleanVariable object) {
+ return createTracedBooleanVariableAdapter();
+ }
+ @Override
+ public Adapter caseTracedDigitalPin(TracedDigitalPin object) {
+ return createTracedDigitalPinAdapter();
+ }
+ @Override
+ public Adapter caseTracedExpression(TracedExpression object) {
+ return createTracedExpressionAdapter();
+ }
+ @Override
+ public Adapter caseTracedIntegerExpression(TracedIntegerExpression object) {
+ return createTracedIntegerExpressionAdapter();
+ }
+ @Override
+ public Adapter caseTracedIntegerVariable(TracedIntegerVariable object) {
+ return createTracedIntegerVariableAdapter();
+ }
+ @Override
+ public Adapter caseTracedNamedElement(TracedNamedElement object) {
+ return createTracedNamedElementAdapter();
+ }
+ @Override
+ public Adapter caseTracedPin(TracedPin object) {
+ return createTracedPinAdapter();
+ }
+ @Override
+ public Adapter caseTracedSharedResource(TracedSharedResource object) {
+ return createTracedSharedResourceAdapter();
+ }
+ @Override
+ public Adapter caseTracedVariable(TracedVariable object) {
+ return createTracedVariableAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ *
+ * @param target the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedAnalogPin Traced Analog Pin }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedAnalogPin
+ * @generated
+ */
+ public Adapter createTracedAnalogPinAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedBooleanExpression Traced Boolean Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedBooleanExpression
+ * @generated
+ */
+ public Adapter createTracedBooleanExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedBooleanVariable Traced Boolean Variable }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedBooleanVariable
+ * @generated
+ */
+ public Adapter createTracedBooleanVariableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedDigitalPin Traced Digital Pin }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedDigitalPin
+ * @generated
+ */
+ public Adapter createTracedDigitalPinAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedExpression Traced Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedExpression
+ * @generated
+ */
+ public Adapter createTracedExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedIntegerExpression Traced Integer Expression }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedIntegerExpression
+ * @generated
+ */
+ public Adapter createTracedIntegerExpressionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedIntegerVariable Traced Integer Variable }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedIntegerVariable
+ * @generated
+ */
+ public Adapter createTracedIntegerVariableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedNamedElement Traced Named Element }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedNamedElement
+ * @generated
+ */
+ public Adapter createTracedNamedElementAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedPin Traced Pin }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedPin
+ * @generated
+ */
+ public Adapter createTracedPinAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedSharedResource Traced Shared Resource }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedSharedResource
+ * @generated
+ */
+ public Adapter createTracedSharedResourceAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.arduino.TracedVariable Traced Variable }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.arduino.TracedVariable
+ * @generated
+ */
+ public Adapter createTracedVariableAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ *
+ * This default implementation returns null.
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //ArduinoAdapterFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/util/ArduinoSwitch.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/util/ArduinoSwitch.java
new file mode 100644
index 00000000..8b91bfdf
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/arduino/util/ArduinoSwitch.java
@@ -0,0 +1,339 @@
+/**
+ */
+package arduinoTrace.States.arduino.util;
+
+import arduinoTrace.States.arduino.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ *
+ * The Switch for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ *
+ * @see arduinoTrace.States.arduino.ArduinoPackage
+ * @generated
+ */
+public class ArduinoSwitch extends Switch {
+ /**
+ * The cached model package
+ *
+ *
+ * @generated
+ */
+ protected static ArduinoPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ *
+ * @generated
+ */
+ public ArduinoSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ArduinoPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ *
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that result.
+ *
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ArduinoPackage.TRACED_ANALOG_PIN: {
+ TracedAnalogPin tracedAnalogPin = (TracedAnalogPin)theEObject;
+ T result = caseTracedAnalogPin(tracedAnalogPin);
+ if (result == null) result = caseTracedPin(tracedAnalogPin);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_BOOLEAN_EXPRESSION: {
+ TracedBooleanExpression tracedBooleanExpression = (TracedBooleanExpression)theEObject;
+ T result = caseTracedBooleanExpression(tracedBooleanExpression);
+ if (result == null) result = caseTracedExpression(tracedBooleanExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_BOOLEAN_VARIABLE: {
+ TracedBooleanVariable tracedBooleanVariable = (TracedBooleanVariable)theEObject;
+ T result = caseTracedBooleanVariable(tracedBooleanVariable);
+ if (result == null) result = caseTracedBooleanExpression(tracedBooleanVariable);
+ if (result == null) result = caseTracedVariable(tracedBooleanVariable);
+ if (result == null) result = caseTracedExpression(tracedBooleanVariable);
+ if (result == null) result = caseTracedNamedElement(tracedBooleanVariable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_DIGITAL_PIN: {
+ TracedDigitalPin tracedDigitalPin = (TracedDigitalPin)theEObject;
+ T result = caseTracedDigitalPin(tracedDigitalPin);
+ if (result == null) result = caseTracedPin(tracedDigitalPin);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_EXPRESSION: {
+ TracedExpression tracedExpression = (TracedExpression)theEObject;
+ T result = caseTracedExpression(tracedExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_INTEGER_EXPRESSION: {
+ TracedIntegerExpression tracedIntegerExpression = (TracedIntegerExpression)theEObject;
+ T result = caseTracedIntegerExpression(tracedIntegerExpression);
+ if (result == null) result = caseTracedExpression(tracedIntegerExpression);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_INTEGER_VARIABLE: {
+ TracedIntegerVariable tracedIntegerVariable = (TracedIntegerVariable)theEObject;
+ T result = caseTracedIntegerVariable(tracedIntegerVariable);
+ if (result == null) result = caseTracedIntegerExpression(tracedIntegerVariable);
+ if (result == null) result = caseTracedVariable(tracedIntegerVariable);
+ if (result == null) result = caseTracedExpression(tracedIntegerVariable);
+ if (result == null) result = caseTracedNamedElement(tracedIntegerVariable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_NAMED_ELEMENT: {
+ TracedNamedElement tracedNamedElement = (TracedNamedElement)theEObject;
+ T result = caseTracedNamedElement(tracedNamedElement);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_PIN: {
+ TracedPin tracedPin = (TracedPin)theEObject;
+ T result = caseTracedPin(tracedPin);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_SHARED_RESOURCE: {
+ TracedSharedResource tracedSharedResource = (TracedSharedResource)theEObject;
+ T result = caseTracedSharedResource(tracedSharedResource);
+ if (result == null) result = caseTracedIntegerVariable(tracedSharedResource);
+ if (result == null) result = caseTracedIntegerExpression(tracedSharedResource);
+ if (result == null) result = caseTracedVariable(tracedSharedResource);
+ if (result == null) result = caseTracedExpression(tracedSharedResource);
+ if (result == null) result = caseTracedNamedElement(tracedSharedResource);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ArduinoPackage.TRACED_VARIABLE: {
+ TracedVariable tracedVariable = (TracedVariable)theEObject;
+ T result = caseTracedVariable(tracedVariable);
+ if (result == null) result = caseTracedExpression(tracedVariable);
+ if (result == null) result = caseTracedNamedElement(tracedVariable);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Analog Pin '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Analog Pin '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedAnalogPin(TracedAnalogPin object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Boolean Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Boolean Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedBooleanExpression(TracedBooleanExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Boolean Variable '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Boolean Variable '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedBooleanVariable(TracedBooleanVariable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Digital Pin '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Digital Pin '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedDigitalPin(TracedDigitalPin object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedExpression(TracedExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Integer Expression '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Integer Expression '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedIntegerExpression(TracedIntegerExpression object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Integer Variable '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Integer Variable '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedIntegerVariable(TracedIntegerVariable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Named Element '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Named Element '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedNamedElement(TracedNamedElement object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Pin '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Pin '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedPin(TracedPin object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Shared Resource '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Shared Resource '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedSharedResource(TracedSharedResource object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Traced Variable '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Traced Variable '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTracedVariable(TracedVariable object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //ArduinoSwitch
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/BooleanVariable_value_ValueImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/BooleanVariable_value_ValueImpl.java
new file mode 100644
index 00000000..b2f8d5fd
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/BooleanVariable_value_ValueImpl.java
@@ -0,0 +1,313 @@
+/**
+ */
+package arduinoTrace.States.impl;
+
+import arduinoTrace.States.BooleanVariable_value_Value;
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedBooleanVariable;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Boolean Variable value Value '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.impl.BooleanVariable_value_ValueImpl#getParent Parent }
+ * {@link arduinoTrace.States.impl.BooleanVariable_value_ValueImpl#getStates States }
+ * {@link arduinoTrace.States.impl.BooleanVariable_value_ValueImpl#getValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class BooleanVariable_value_ValueImpl extends MinimalEObjectImpl.Container implements BooleanVariable_value_Value {
+ /**
+ * The cached value of the '{@link #getStates() States }' reference list.
+ *
+ *
+ * @see #getStates()
+ * @generated
+ * @ordered
+ */
+ protected EList states;
+
+ /**
+ * The default value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final Boolean VALUE_EDEFAULT = Boolean.FALSE;
+
+ /**
+ * The cached value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected Boolean value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BooleanVariable_value_ValueImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StatesPackage.Literals.BOOLEAN_VARIABLE_VALUE_VALUE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedBooleanVariable getParent() {
+ if (eContainerFeatureID() != StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT) return null;
+ return (TracedBooleanVariable)eInternalContainer();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetParent(TracedBooleanVariable newParent, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newParent, StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT, msgs);
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setParent(TracedBooleanVariable newParent) {
+ if (newParent != eInternalContainer() || (eContainerFeatureID() != StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT && newParent != null)) {
+ if (EcoreUtil.isAncestor(this, newParent))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newParent != null)
+ msgs = ((InternalEObject)newParent).eInverseAdd(this, ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE, TracedBooleanVariable.class, msgs);
+ msgs = basicSetParent(newParent, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT, newParent, newParent));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getStates() {
+ if (states == null) {
+ states = new EObjectWithInverseResolvingEList.ManyInverse(State.class, this, StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES, StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES);
+ }
+ return states;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Boolean getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(Boolean newValue) {
+ Boolean oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetParent((TracedBooleanVariable)otherEnd, msgs);
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES:
+ return ((InternalEList)(InternalEList>)getStates()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ return basicSetParent(null, msgs);
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES:
+ return ((InternalEList>)getStates()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ return eInternalContainer().eInverseRemove(this, ArduinoPackage.TRACED_BOOLEAN_VARIABLE__VALUE_SEQUENCE, TracedBooleanVariable.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ return getParent();
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES:
+ return getStates();
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ setParent((TracedBooleanVariable)newValue);
+ return;
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES:
+ getStates().clear();
+ getStates().addAll((Collection extends State>)newValue);
+ return;
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__VALUE:
+ setValue((Boolean)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ setParent((TracedBooleanVariable)null);
+ return;
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES:
+ getStates().clear();
+ return;
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__PARENT:
+ return getParent() != null;
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES:
+ return states != null && !states.isEmpty();
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //BooleanVariable_value_ValueImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/IntegerVariable_value_ValueImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/IntegerVariable_value_ValueImpl.java
new file mode 100644
index 00000000..cf221131
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/IntegerVariable_value_ValueImpl.java
@@ -0,0 +1,313 @@
+/**
+ */
+package arduinoTrace.States.impl;
+
+import arduinoTrace.States.IntegerVariable_value_Value;
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedIntegerVariable;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Integer Variable value Value '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.impl.IntegerVariable_value_ValueImpl#getParent Parent }
+ * {@link arduinoTrace.States.impl.IntegerVariable_value_ValueImpl#getStates States }
+ * {@link arduinoTrace.States.impl.IntegerVariable_value_ValueImpl#getValue Value }
+ *
+ *
+ *
+ * @generated
+ */
+public class IntegerVariable_value_ValueImpl extends MinimalEObjectImpl.Container implements IntegerVariable_value_Value {
+ /**
+ * The cached value of the '{@link #getStates() States }' reference list.
+ *
+ *
+ * @see #getStates()
+ * @generated
+ * @ordered
+ */
+ protected EList states;
+
+ /**
+ * The default value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer VALUE_EDEFAULT = new Integer(0);
+
+ /**
+ * The cached value of the '{@link #getValue() Value }' attribute.
+ *
+ *
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected Integer value = VALUE_EDEFAULT;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected IntegerVariable_value_ValueImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StatesPackage.Literals.INTEGER_VARIABLE_VALUE_VALUE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedIntegerVariable getParent() {
+ if (eContainerFeatureID() != StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT) return null;
+ return (TracedIntegerVariable)eInternalContainer();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetParent(TracedIntegerVariable newParent, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newParent, StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT, msgs);
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setParent(TracedIntegerVariable newParent) {
+ if (newParent != eInternalContainer() || (eContainerFeatureID() != StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT && newParent != null)) {
+ if (EcoreUtil.isAncestor(this, newParent))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newParent != null)
+ msgs = ((InternalEObject)newParent).eInverseAdd(this, ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE, TracedIntegerVariable.class, msgs);
+ msgs = basicSetParent(newParent, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT, newParent, newParent));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getStates() {
+ if (states == null) {
+ states = new EObjectWithInverseResolvingEList.ManyInverse(State.class, this, StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES, StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES);
+ }
+ return states;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Integer getValue() {
+ return value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setValue(Integer newValue) {
+ Integer oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__VALUE, oldValue, value));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetParent((TracedIntegerVariable)otherEnd, msgs);
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES:
+ return ((InternalEList)(InternalEList>)getStates()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ return basicSetParent(null, msgs);
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES:
+ return ((InternalEList>)getStates()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ return eInternalContainer().eInverseRemove(this, ArduinoPackage.TRACED_INTEGER_VARIABLE__VALUE_SEQUENCE, TracedIntegerVariable.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ return getParent();
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES:
+ return getStates();
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ setParent((TracedIntegerVariable)newValue);
+ return;
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES:
+ getStates().clear();
+ getStates().addAll((Collection extends State>)newValue);
+ return;
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__VALUE:
+ setValue((Integer)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ setParent((TracedIntegerVariable)null);
+ return;
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES:
+ getStates().clear();
+ return;
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__PARENT:
+ return getParent() != null;
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES:
+ return states != null && !states.isEmpty();
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //IntegerVariable_value_ValueImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/Pin_level_ValueImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/Pin_level_ValueImpl.java
new file mode 100644
index 00000000..df44e28c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/Pin_level_ValueImpl.java
@@ -0,0 +1,313 @@
+/**
+ */
+package arduinoTrace.States.impl;
+
+import arduinoTrace.States.Pin_level_Value;
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.ArduinoPackage;
+import arduinoTrace.States.arduino.TracedPin;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Pin level Value '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.impl.Pin_level_ValueImpl#getLevel Level }
+ * {@link arduinoTrace.States.impl.Pin_level_ValueImpl#getParent Parent }
+ * {@link arduinoTrace.States.impl.Pin_level_ValueImpl#getStates States }
+ *
+ *
+ *
+ * @generated
+ */
+public class Pin_level_ValueImpl extends MinimalEObjectImpl.Container implements Pin_level_Value {
+ /**
+ * The default value of the '{@link #getLevel() Level }' attribute.
+ *
+ *
+ * @see #getLevel()
+ * @generated
+ * @ordered
+ */
+ protected static final Integer LEVEL_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLevel() Level }' attribute.
+ *
+ *
+ * @see #getLevel()
+ * @generated
+ * @ordered
+ */
+ protected Integer level = LEVEL_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getStates() States }' reference list.
+ *
+ *
+ * @see #getStates()
+ * @generated
+ * @ordered
+ */
+ protected EList states;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Pin_level_ValueImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StatesPackage.Literals.PIN_LEVEL_VALUE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Integer getLevel() {
+ return level;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLevel(Integer newLevel) {
+ Integer oldLevel = level;
+ level = newLevel;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.PIN_LEVEL_VALUE__LEVEL, oldLevel, level));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public TracedPin getParent() {
+ if (eContainerFeatureID() != StatesPackage.PIN_LEVEL_VALUE__PARENT) return null;
+ return (TracedPin)eInternalContainer();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetParent(TracedPin newParent, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newParent, StatesPackage.PIN_LEVEL_VALUE__PARENT, msgs);
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setParent(TracedPin newParent) {
+ if (newParent != eInternalContainer() || (eContainerFeatureID() != StatesPackage.PIN_LEVEL_VALUE__PARENT && newParent != null)) {
+ if (EcoreUtil.isAncestor(this, newParent))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newParent != null)
+ msgs = ((InternalEObject)newParent).eInverseAdd(this, ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE, TracedPin.class, msgs);
+ msgs = basicSetParent(newParent, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StatesPackage.PIN_LEVEL_VALUE__PARENT, newParent, newParent));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getStates() {
+ if (states == null) {
+ states = new EObjectWithInverseResolvingEList.ManyInverse(State.class, this, StatesPackage.PIN_LEVEL_VALUE__STATES, StatesPackage.STATE__PIN_LEVEL_VALUES);
+ }
+ return states;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetParent((TracedPin)otherEnd, msgs);
+ case StatesPackage.PIN_LEVEL_VALUE__STATES:
+ return ((InternalEList)(InternalEList>)getStates()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ return basicSetParent(null, msgs);
+ case StatesPackage.PIN_LEVEL_VALUE__STATES:
+ return ((InternalEList>)getStates()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ return eInternalContainer().eInverseRemove(this, ArduinoPackage.TRACED_PIN__LEVEL_SEQUENCE, TracedPin.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StatesPackage.PIN_LEVEL_VALUE__LEVEL:
+ return getLevel();
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ return getParent();
+ case StatesPackage.PIN_LEVEL_VALUE__STATES:
+ return getStates();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StatesPackage.PIN_LEVEL_VALUE__LEVEL:
+ setLevel((Integer)newValue);
+ return;
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ setParent((TracedPin)newValue);
+ return;
+ case StatesPackage.PIN_LEVEL_VALUE__STATES:
+ getStates().clear();
+ getStates().addAll((Collection extends State>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StatesPackage.PIN_LEVEL_VALUE__LEVEL:
+ setLevel(LEVEL_EDEFAULT);
+ return;
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ setParent((TracedPin)null);
+ return;
+ case StatesPackage.PIN_LEVEL_VALUE__STATES:
+ getStates().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StatesPackage.PIN_LEVEL_VALUE__LEVEL:
+ return LEVEL_EDEFAULT == null ? level != null : !LEVEL_EDEFAULT.equals(level);
+ case StatesPackage.PIN_LEVEL_VALUE__PARENT:
+ return getParent() != null;
+ case StatesPackage.PIN_LEVEL_VALUE__STATES:
+ return states != null && !states.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (level: ");
+ result.append(level);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Pin_level_ValueImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StateImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StateImpl.java
new file mode 100644
index 00000000..1321bbd2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StateImpl.java
@@ -0,0 +1,324 @@
+/**
+ */
+package arduinoTrace.States.impl;
+
+import arduinoTrace.States.BooleanVariable_value_Value;
+import arduinoTrace.States.IntegerVariable_value_Value;
+import arduinoTrace.States.Pin_level_Value;
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'State '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.States.impl.StateImpl#getBooleanVariable_value_Values Boolean Variable value Values }
+ * {@link arduinoTrace.States.impl.StateImpl#getEndedSteps Ended Steps }
+ * {@link arduinoTrace.States.impl.StateImpl#getIntegerVariable_value_Values Integer Variable value Values }
+ * {@link arduinoTrace.States.impl.StateImpl#getPin_level_Values Pin level Values }
+ * {@link arduinoTrace.States.impl.StateImpl#getStartedSteps Started Steps }
+ *
+ *
+ *
+ * @generated
+ */
+public class StateImpl extends MinimalEObjectImpl.Container implements State {
+ /**
+ * The cached value of the '{@link #getBooleanVariable_value_Values() Boolean Variable value Values }' reference list.
+ *
+ *
+ * @see #getBooleanVariable_value_Values()
+ * @generated
+ * @ordered
+ */
+ protected EList booleanVariable_value_Values;
+
+ /**
+ * The cached value of the '{@link #getEndedSteps() Ended Steps }' reference list.
+ *
+ *
+ * @see #getEndedSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList endedSteps;
+
+ /**
+ * The cached value of the '{@link #getIntegerVariable_value_Values() Integer Variable value Values }' reference list.
+ *
+ *
+ * @see #getIntegerVariable_value_Values()
+ * @generated
+ * @ordered
+ */
+ protected EList integerVariable_value_Values;
+
+ /**
+ * The cached value of the '{@link #getPin_level_Values() Pin level Values }' reference list.
+ *
+ *
+ * @see #getPin_level_Values()
+ * @generated
+ * @ordered
+ */
+ protected EList pin_level_Values;
+
+ /**
+ * The cached value of the '{@link #getStartedSteps() Started Steps }' reference list.
+ *
+ *
+ * @see #getStartedSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList startedSteps;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected StateImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StatesPackage.Literals.STATE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getBooleanVariable_value_Values() {
+ if (booleanVariable_value_Values == null) {
+ booleanVariable_value_Values = new EObjectWithInverseResolvingEList.ManyInverse(BooleanVariable_value_Value.class, this, StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES, StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE__STATES);
+ }
+ return booleanVariable_value_Values;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getEndedSteps() {
+ if (endedSteps == null) {
+ endedSteps = new EObjectWithInverseResolvingEList(Step.class, this, StatesPackage.STATE__ENDED_STEPS, StepsPackage.STEP__ENDING_STATE);
+ }
+ return endedSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getIntegerVariable_value_Values() {
+ if (integerVariable_value_Values == null) {
+ integerVariable_value_Values = new EObjectWithInverseResolvingEList.ManyInverse(IntegerVariable_value_Value.class, this, StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES, StatesPackage.INTEGER_VARIABLE_VALUE_VALUE__STATES);
+ }
+ return integerVariable_value_Values;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getPin_level_Values() {
+ if (pin_level_Values == null) {
+ pin_level_Values = new EObjectWithInverseResolvingEList.ManyInverse(Pin_level_Value.class, this, StatesPackage.STATE__PIN_LEVEL_VALUES, StatesPackage.PIN_LEVEL_VALUE__STATES);
+ }
+ return pin_level_Values;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getStartedSteps() {
+ if (startedSteps == null) {
+ startedSteps = new EObjectWithInverseResolvingEList(Step.class, this, StatesPackage.STATE__STARTED_STEPS, StepsPackage.STEP__STARTING_STATE);
+ }
+ return startedSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES:
+ return ((InternalEList)(InternalEList>)getBooleanVariable_value_Values()).basicAdd(otherEnd, msgs);
+ case StatesPackage.STATE__ENDED_STEPS:
+ return ((InternalEList)(InternalEList>)getEndedSteps()).basicAdd(otherEnd, msgs);
+ case StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES:
+ return ((InternalEList)(InternalEList>)getIntegerVariable_value_Values()).basicAdd(otherEnd, msgs);
+ case StatesPackage.STATE__PIN_LEVEL_VALUES:
+ return ((InternalEList)(InternalEList>)getPin_level_Values()).basicAdd(otherEnd, msgs);
+ case StatesPackage.STATE__STARTED_STEPS:
+ return ((InternalEList)(InternalEList>)getStartedSteps()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES:
+ return ((InternalEList>)getBooleanVariable_value_Values()).basicRemove(otherEnd, msgs);
+ case StatesPackage.STATE__ENDED_STEPS:
+ return ((InternalEList>)getEndedSteps()).basicRemove(otherEnd, msgs);
+ case StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES:
+ return ((InternalEList>)getIntegerVariable_value_Values()).basicRemove(otherEnd, msgs);
+ case StatesPackage.STATE__PIN_LEVEL_VALUES:
+ return ((InternalEList>)getPin_level_Values()).basicRemove(otherEnd, msgs);
+ case StatesPackage.STATE__STARTED_STEPS:
+ return ((InternalEList>)getStartedSteps()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES:
+ return getBooleanVariable_value_Values();
+ case StatesPackage.STATE__ENDED_STEPS:
+ return getEndedSteps();
+ case StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES:
+ return getIntegerVariable_value_Values();
+ case StatesPackage.STATE__PIN_LEVEL_VALUES:
+ return getPin_level_Values();
+ case StatesPackage.STATE__STARTED_STEPS:
+ return getStartedSteps();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES:
+ getBooleanVariable_value_Values().clear();
+ getBooleanVariable_value_Values().addAll((Collection extends BooleanVariable_value_Value>)newValue);
+ return;
+ case StatesPackage.STATE__ENDED_STEPS:
+ getEndedSteps().clear();
+ getEndedSteps().addAll((Collection extends Step>)newValue);
+ return;
+ case StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES:
+ getIntegerVariable_value_Values().clear();
+ getIntegerVariable_value_Values().addAll((Collection extends IntegerVariable_value_Value>)newValue);
+ return;
+ case StatesPackage.STATE__PIN_LEVEL_VALUES:
+ getPin_level_Values().clear();
+ getPin_level_Values().addAll((Collection extends Pin_level_Value>)newValue);
+ return;
+ case StatesPackage.STATE__STARTED_STEPS:
+ getStartedSteps().clear();
+ getStartedSteps().addAll((Collection extends Step>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES:
+ getBooleanVariable_value_Values().clear();
+ return;
+ case StatesPackage.STATE__ENDED_STEPS:
+ getEndedSteps().clear();
+ return;
+ case StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES:
+ getIntegerVariable_value_Values().clear();
+ return;
+ case StatesPackage.STATE__PIN_LEVEL_VALUES:
+ getPin_level_Values().clear();
+ return;
+ case StatesPackage.STATE__STARTED_STEPS:
+ getStartedSteps().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StatesPackage.STATE__BOOLEAN_VARIABLE_VALUE_VALUES:
+ return booleanVariable_value_Values != null && !booleanVariable_value_Values.isEmpty();
+ case StatesPackage.STATE__ENDED_STEPS:
+ return endedSteps != null && !endedSteps.isEmpty();
+ case StatesPackage.STATE__INTEGER_VARIABLE_VALUE_VALUES:
+ return integerVariable_value_Values != null && !integerVariable_value_Values.isEmpty();
+ case StatesPackage.STATE__PIN_LEVEL_VALUES:
+ return pin_level_Values != null && !pin_level_Values.isEmpty();
+ case StatesPackage.STATE__STARTED_STEPS:
+ return startedSteps != null && !startedSteps.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //StateImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StatesFactoryImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StatesFactoryImpl.java
new file mode 100644
index 00000000..7aec7902
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StatesFactoryImpl.java
@@ -0,0 +1,128 @@
+/**
+ */
+package arduinoTrace.States.impl;
+
+import arduinoTrace.States.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ *
+ * An implementation of the model Factory .
+ *
+ * @generated
+ */
+public class StatesFactoryImpl extends EFactoryImpl implements StatesFactory {
+ /**
+ * Creates the default factory implementation.
+ *
+ *
+ * @generated
+ */
+ public static StatesFactory init() {
+ try {
+ StatesFactory theStatesFactory = (StatesFactory)EPackage.Registry.INSTANCE.getEFactory(StatesPackage.eNS_URI);
+ if (theStatesFactory != null) {
+ return theStatesFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new StatesFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ *
+ *
+ * @generated
+ */
+ public StatesFactoryImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE: return createBooleanVariable_value_Value();
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE: return createIntegerVariable_value_Value();
+ case StatesPackage.PIN_LEVEL_VALUE: return createPin_level_Value();
+ case StatesPackage.STATE: return createState();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public BooleanVariable_value_Value createBooleanVariable_value_Value() {
+ BooleanVariable_value_ValueImpl booleanVariable_value_Value = new BooleanVariable_value_ValueImpl();
+ return booleanVariable_value_Value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public IntegerVariable_value_Value createIntegerVariable_value_Value() {
+ IntegerVariable_value_ValueImpl integerVariable_value_Value = new IntegerVariable_value_ValueImpl();
+ return integerVariable_value_Value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Pin_level_Value createPin_level_Value() {
+ Pin_level_ValueImpl pin_level_Value = new Pin_level_ValueImpl();
+ return pin_level_Value;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State createState() {
+ StateImpl state = new StateImpl();
+ return state;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public StatesPackage getStatesPackage() {
+ return (StatesPackage)getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static StatesPackage getPackage() {
+ return StatesPackage.eINSTANCE;
+ }
+
+} //StatesFactoryImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StatesPackageImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StatesPackageImpl.java
new file mode 100644
index 00000000..6eaff525
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/impl/StatesPackageImpl.java
@@ -0,0 +1,476 @@
+/**
+ */
+package arduinoTrace.States.impl;
+
+import arduinoTrace.ArduinoTracePackage;
+
+import arduinoTrace.States.BooleanVariable_value_Value;
+import arduinoTrace.States.IntegerVariable_value_Value;
+import arduinoTrace.States.Pin_level_Value;
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesFactory;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.impl.ArduinoPackageImpl;
+
+import arduinoTrace.Steps.StepsPackage;
+
+import arduinoTrace.Steps.impl.StepsPackageImpl;
+
+import arduinoTrace.impl.ArduinoTracePackageImpl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model Package .
+ *
+ * @generated
+ */
+public class StatesPackageImpl extends EPackageImpl implements StatesPackage {
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass booleanVariable_value_ValueEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass integerVariable_value_ValueEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass pin_level_ValueEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass stateEClass = null;
+
+ /**
+ * Creates an instance of the model Package , registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ *
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see arduinoTrace.States.StatesPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private StatesPackageImpl() {
+ super(eNS_URI, StatesFactory.eINSTANCE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
This method is used to initialize {@link StatesPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static StatesPackage init() {
+ if (isInited) return (StatesPackage)EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI);
+
+ // Obtain or create and register package
+ StatesPackageImpl theStatesPackage = (StatesPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof StatesPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new StatesPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ ArduinoPackage.eINSTANCE.eClass();
+ MsePackage.eINSTANCE.eClass();
+
+ // Obtain or create and register interdependencies
+ ArduinoTracePackageImpl theArduinoTracePackage = (ArduinoTracePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI) instanceof ArduinoTracePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI) : ArduinoTracePackage.eINSTANCE);
+ StepsPackageImpl theStepsPackage = (StepsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI) instanceof StepsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI) : StepsPackage.eINSTANCE);
+ ArduinoPackageImpl theArduinoPackage_1 = (ArduinoPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI) instanceof ArduinoPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI) : arduinoTrace.States.arduino.ArduinoPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ theStatesPackage.createPackageContents();
+ theArduinoTracePackage.createPackageContents();
+ theStepsPackage.createPackageContents();
+ theArduinoPackage_1.createPackageContents();
+
+ // Initialize created meta-data
+ theStatesPackage.initializePackageContents();
+ theArduinoTracePackage.initializePackageContents();
+ theStepsPackage.initializePackageContents();
+ theArduinoPackage_1.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theStatesPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(StatesPackage.eNS_URI, theStatesPackage);
+ return theStatesPackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBooleanVariable_value_Value() {
+ return booleanVariable_value_ValueEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getBooleanVariable_value_Value_Parent() {
+ return (EReference)booleanVariable_value_ValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getBooleanVariable_value_Value_States() {
+ return (EReference)booleanVariable_value_ValueEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getBooleanVariable_value_Value_Value() {
+ return (EAttribute)booleanVariable_value_ValueEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getIntegerVariable_value_Value() {
+ return integerVariable_value_ValueEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getIntegerVariable_value_Value_Parent() {
+ return (EReference)integerVariable_value_ValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getIntegerVariable_value_Value_States() {
+ return (EReference)integerVariable_value_ValueEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getIntegerVariable_value_Value_Value() {
+ return (EAttribute)integerVariable_value_ValueEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getPin_level_Value() {
+ return pin_level_ValueEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EAttribute getPin_level_Value_Level() {
+ return (EAttribute)pin_level_ValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getPin_level_Value_Parent() {
+ return (EReference)pin_level_ValueEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getPin_level_Value_States() {
+ return (EReference)pin_level_ValueEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getState() {
+ return stateEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getState_BooleanVariable_value_Values() {
+ return (EReference)stateEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getState_EndedSteps() {
+ return (EReference)stateEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getState_IntegerVariable_value_Values() {
+ return (EReference)stateEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getState_Pin_level_Values() {
+ return (EReference)stateEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getState_StartedSteps() {
+ return (EReference)stateEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public StatesFactory getStatesFactory() {
+ return (StatesFactory)getEFactoryInstance();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ booleanVariable_value_ValueEClass = createEClass(BOOLEAN_VARIABLE_VALUE_VALUE);
+ createEReference(booleanVariable_value_ValueEClass, BOOLEAN_VARIABLE_VALUE_VALUE__PARENT);
+ createEReference(booleanVariable_value_ValueEClass, BOOLEAN_VARIABLE_VALUE_VALUE__STATES);
+ createEAttribute(booleanVariable_value_ValueEClass, BOOLEAN_VARIABLE_VALUE_VALUE__VALUE);
+
+ integerVariable_value_ValueEClass = createEClass(INTEGER_VARIABLE_VALUE_VALUE);
+ createEReference(integerVariable_value_ValueEClass, INTEGER_VARIABLE_VALUE_VALUE__PARENT);
+ createEReference(integerVariable_value_ValueEClass, INTEGER_VARIABLE_VALUE_VALUE__STATES);
+ createEAttribute(integerVariable_value_ValueEClass, INTEGER_VARIABLE_VALUE_VALUE__VALUE);
+
+ pin_level_ValueEClass = createEClass(PIN_LEVEL_VALUE);
+ createEAttribute(pin_level_ValueEClass, PIN_LEVEL_VALUE__LEVEL);
+ createEReference(pin_level_ValueEClass, PIN_LEVEL_VALUE__PARENT);
+ createEReference(pin_level_ValueEClass, PIN_LEVEL_VALUE__STATES);
+
+ stateEClass = createEClass(STATE);
+ createEReference(stateEClass, STATE__BOOLEAN_VARIABLE_VALUE_VALUES);
+ createEReference(stateEClass, STATE__ENDED_STEPS);
+ createEReference(stateEClass, STATE__INTEGER_VARIABLE_VALUE_VALUES);
+ createEReference(stateEClass, STATE__PIN_LEVEL_VALUES);
+ createEReference(stateEClass, STATE__STARTED_STEPS);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ arduinoTrace.States.arduino.ArduinoPackage theArduinoPackage_1 = (arduinoTrace.States.arduino.ArduinoPackage)EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI);
+ StepsPackage theStepsPackage = (StepsPackage)EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI);
+
+ // Add subpackages
+ getESubpackages().add(theArduinoPackage_1);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(booleanVariable_value_ValueEClass, BooleanVariable_value_Value.class, "BooleanVariable_value_Value", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getBooleanVariable_value_Value_Parent(), theArduinoPackage_1.getTracedBooleanVariable(), theArduinoPackage_1.getTracedBooleanVariable_ValueSequence(), "parent", null, 1, 1, BooleanVariable_value_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getBooleanVariable_value_Value_States(), this.getState(), this.getState_BooleanVariable_value_Values(), "states", null, 1, -1, BooleanVariable_value_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getBooleanVariable_value_Value_Value(), ecorePackage.getEBooleanObject(), "value", "false", 0, 1, BooleanVariable_value_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(integerVariable_value_ValueEClass, IntegerVariable_value_Value.class, "IntegerVariable_value_Value", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getIntegerVariable_value_Value_Parent(), theArduinoPackage_1.getTracedIntegerVariable(), theArduinoPackage_1.getTracedIntegerVariable_ValueSequence(), "parent", null, 1, 1, IntegerVariable_value_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getIntegerVariable_value_Value_States(), this.getState(), this.getState_IntegerVariable_value_Values(), "states", null, 1, -1, IntegerVariable_value_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getIntegerVariable_value_Value_Value(), ecorePackage.getEIntegerObject(), "value", "0", 0, 1, IntegerVariable_value_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(pin_level_ValueEClass, Pin_level_Value.class, "Pin_level_Value", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getPin_level_Value_Level(), ecorePackage.getEIntegerObject(), "level", null, 0, 1, Pin_level_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getPin_level_Value_Parent(), theArduinoPackage_1.getTracedPin(), theArduinoPackage_1.getTracedPin_LevelSequence(), "parent", null, 1, 1, Pin_level_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getPin_level_Value_States(), this.getState(), this.getState_Pin_level_Values(), "states", null, 1, -1, Pin_level_Value.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(stateEClass, State.class, "State", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getState_BooleanVariable_value_Values(), this.getBooleanVariable_value_Value(), this.getBooleanVariable_value_Value_States(), "booleanVariable_value_Values", null, 0, -1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getState_EndedSteps(), theStepsPackage.getStep(), theStepsPackage.getStep_EndingState(), "endedSteps", null, 0, -1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getState_IntegerVariable_value_Values(), this.getIntegerVariable_value_Value(), this.getIntegerVariable_value_Value_States(), "integerVariable_value_Values", null, 0, -1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getState_Pin_level_Values(), this.getPin_level_Value(), this.getPin_level_Value_States(), "pin_level_Values", null, 0, -1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getState_StartedSteps(), theStepsPackage.getStep(), theStepsPackage.getStep_StartingState(), "startedSteps", null, 0, -1, State.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create annotations
+ // http://www.modelexecution.org/trace/XMOF
+ createXMOFAnnotations();
+ // dynamic
+ createDynamicAnnotations();
+ }
+
+ /**
+ * Initializes the annotations for http://www.modelexecution.org/trace/XMOF .
+ *
+ *
+ * @generated
+ */
+ protected void createXMOFAnnotations() {
+ String source = "http://www.modelexecution.org/trace/XMOF";
+ addAnnotation
+ (booleanVariable_value_ValueEClass,
+ source,
+ new String[] {
+ "executionMetamodelElement", null
+ });
+ addAnnotation
+ (integerVariable_value_ValueEClass,
+ source,
+ new String[] {
+ "executionMetamodelElement", null
+ });
+ addAnnotation
+ (pin_level_ValueEClass,
+ source,
+ new String[] {
+ "executionMetamodelElement", null
+ });
+ }
+
+ /**
+ * Initializes the annotations for dynamic .
+ *
+ *
+ * @generated
+ */
+ protected void createDynamicAnnotations() {
+ String source = "dynamic";
+ addAnnotation
+ (getBooleanVariable_value_Value_Value(),
+ source,
+ new String[] {
+ });
+ addAnnotation
+ (getIntegerVariable_value_Value_Value(),
+ source,
+ new String[] {
+ });
+ addAnnotation
+ (getPin_level_Value_Level(),
+ source,
+ new String[] {
+ });
+ }
+
+} //StatesPackageImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/util/StatesAdapterFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/util/StatesAdapterFactory.java
new file mode 100644
index 00000000..d3e702a2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/util/StatesAdapterFactory.java
@@ -0,0 +1,174 @@
+/**
+ */
+package arduinoTrace.States.util;
+
+import arduinoTrace.States.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * The Adapter Factory for the model.
+ * It provides an adapter createXXX
method for each class of the model.
+ *
+ * @see arduinoTrace.States.StatesPackage
+ * @generated
+ */
+public class StatesAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ *
+ *
+ * @generated
+ */
+ protected static StatesPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ *
+ * @generated
+ */
+ public StatesAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = StatesPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ *
+ * This implementation returns true
if the object is either the model's package or is an instance object of the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ *
+ * @generated
+ */
+ protected StatesSwitch modelSwitch =
+ new StatesSwitch() {
+ @Override
+ public Adapter caseBooleanVariable_value_Value(BooleanVariable_value_Value object) {
+ return createBooleanVariable_value_ValueAdapter();
+ }
+ @Override
+ public Adapter caseIntegerVariable_value_Value(IntegerVariable_value_Value object) {
+ return createIntegerVariable_value_ValueAdapter();
+ }
+ @Override
+ public Adapter casePin_level_Value(Pin_level_Value object) {
+ return createPin_level_ValueAdapter();
+ }
+ @Override
+ public Adapter caseState(State object) {
+ return createStateAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ *
+ * @param target the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.BooleanVariable_value_Value Boolean Variable value Value }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.BooleanVariable_value_Value
+ * @generated
+ */
+ public Adapter createBooleanVariable_value_ValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.IntegerVariable_value_Value Integer Variable value Value }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.IntegerVariable_value_Value
+ * @generated
+ */
+ public Adapter createIntegerVariable_value_ValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.Pin_level_Value Pin level Value }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.Pin_level_Value
+ * @generated
+ */
+ public Adapter createPin_level_ValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.States.State State }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.States.State
+ * @generated
+ */
+ public Adapter createStateAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ *
+ * This default implementation returns null.
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //StatesAdapterFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/util/StatesSwitch.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/util/StatesSwitch.java
new file mode 100644
index 00000000..c8ca7301
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/States/util/StatesSwitch.java
@@ -0,0 +1,173 @@
+/**
+ */
+package arduinoTrace.States.util;
+
+import arduinoTrace.States.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ *
+ * The Switch for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ *
+ * @see arduinoTrace.States.StatesPackage
+ * @generated
+ */
+public class StatesSwitch extends Switch {
+ /**
+ * The cached model package
+ *
+ *
+ * @generated
+ */
+ protected static StatesPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ *
+ * @generated
+ */
+ public StatesSwitch() {
+ if (modelPackage == null) {
+ modelPackage = StatesPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ *
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that result.
+ *
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case StatesPackage.BOOLEAN_VARIABLE_VALUE_VALUE: {
+ BooleanVariable_value_Value booleanVariable_value_Value = (BooleanVariable_value_Value)theEObject;
+ T result = caseBooleanVariable_value_Value(booleanVariable_value_Value);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StatesPackage.INTEGER_VARIABLE_VALUE_VALUE: {
+ IntegerVariable_value_Value integerVariable_value_Value = (IntegerVariable_value_Value)theEObject;
+ T result = caseIntegerVariable_value_Value(integerVariable_value_Value);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StatesPackage.PIN_LEVEL_VALUE: {
+ Pin_level_Value pin_level_Value = (Pin_level_Value)theEObject;
+ T result = casePin_level_Value(pin_level_Value);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StatesPackage.STATE: {
+ State state = (State)theEObject;
+ T result = caseState(state);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Boolean Variable value Value '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Boolean Variable value Value '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBooleanVariable_value_Value(BooleanVariable_value_Value object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Integer Variable value Value '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Integer Variable value Value '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIntegerVariable_value_Value(IntegerVariable_value_Value object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Pin level Value '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Pin level Value '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePin_level_Value(Pin_level_Value object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'State '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'State '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseState(State object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //StatesSwitch
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute.java
new file mode 100644
index 00000000..695e13cf
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute.java
@@ -0,0 +1,51 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import fr.obeo.dsl.arduino.Delay;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Arduino Delay Execute '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Steps.Arduino_Delay_Execute#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_Delay_Execute()
+ * @model
+ * @generated
+ */
+public interface Arduino_Delay_Execute extends Arduino_Delay_Execute_AbstractSubStep, Arduino_If_Execute_AbstractSubStep, Arduino_ModuleAssignment_Execute_AbstractSubStep, Arduino_VariableAssignment_Execute_AbstractSubStep, Arduino_VariableDeclaration_Execute_AbstractSubStep, BigStep {
+ /**
+ * Returns the value of the 'Sub Steps ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep}.
+ *
+ *
+ * If the meaning of the 'Sub Steps ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Sub Steps ' containment reference list.
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_Delay_Execute_SubSteps()
+ * @model containment="true"
+ * @generated
+ */
+ EList getSubSteps();
+
+ /**
+ *
+ *
+ * @model kind="operation" required="true"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel body='return (Delay) this.getMse().getCaller();\r\n'"
+ * @generated
+ */
+ Delay getCaller();
+
+} // Arduino_Delay_Execute
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute_AbstractSubStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute_AbstractSubStep.java
new file mode 100644
index 00000000..a6265ae4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute_AbstractSubStep.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Arduino Delay Execute Abstract Sub Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_Delay_Execute_AbstractSubStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Arduino_Delay_Execute_AbstractSubStep extends EObject {
+} // Arduino_Delay_Execute_AbstractSubStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute_ImplicitStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute_ImplicitStep.java
new file mode 100644
index 00000000..10944748
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Delay_Execute_ImplicitStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Arduino Delay Execute Implicit Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_Delay_Execute_ImplicitStep()
+ * @model
+ * @generated
+ */
+public interface Arduino_Delay_Execute_ImplicitStep extends Arduino_Delay_Execute_AbstractSubStep, SmallStep {
+} // Arduino_Delay_Execute_ImplicitStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute.java
new file mode 100644
index 00000000..0fef29d5
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute.java
@@ -0,0 +1,51 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import fr.obeo.dsl.arduino.If;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Arduino If Execute '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Steps.Arduino_If_Execute#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_If_Execute()
+ * @model
+ * @generated
+ */
+public interface Arduino_If_Execute extends Arduino_Delay_Execute_AbstractSubStep, Arduino_If_Execute_AbstractSubStep, Arduino_ModuleAssignment_Execute_AbstractSubStep, Arduino_VariableAssignment_Execute_AbstractSubStep, Arduino_VariableDeclaration_Execute_AbstractSubStep, BigStep {
+ /**
+ * Returns the value of the 'Sub Steps ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep}.
+ *
+ *
+ * If the meaning of the 'Sub Steps ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Sub Steps ' containment reference list.
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_If_Execute_SubSteps()
+ * @model containment="true"
+ * @generated
+ */
+ EList getSubSteps();
+
+ /**
+ *
+ *
+ * @model kind="operation" required="true"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel body='return (If) this.getMse().getCaller();\r\n'"
+ * @generated
+ */
+ If getCaller();
+
+} // Arduino_If_Execute
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute_AbstractSubStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute_AbstractSubStep.java
new file mode 100644
index 00000000..1dc29c8d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute_AbstractSubStep.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Arduino If Execute Abstract Sub Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_If_Execute_AbstractSubStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Arduino_If_Execute_AbstractSubStep extends EObject {
+} // Arduino_If_Execute_AbstractSubStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute_ImplicitStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute_ImplicitStep.java
new file mode 100644
index 00000000..5ebb2e57
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_If_Execute_ImplicitStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Arduino If Execute Implicit Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_If_Execute_ImplicitStep()
+ * @model
+ * @generated
+ */
+public interface Arduino_If_Execute_ImplicitStep extends Arduino_If_Execute_AbstractSubStep, SmallStep {
+} // Arduino_If_Execute_ImplicitStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute.java
new file mode 100644
index 00000000..2513e931
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute.java
@@ -0,0 +1,51 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import fr.obeo.dsl.arduino.ModuleAssignment;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Arduino Module Assignment Execute '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_ModuleAssignment_Execute()
+ * @model
+ * @generated
+ */
+public interface Arduino_ModuleAssignment_Execute extends Arduino_Delay_Execute_AbstractSubStep, Arduino_If_Execute_AbstractSubStep, Arduino_ModuleAssignment_Execute_AbstractSubStep, Arduino_VariableAssignment_Execute_AbstractSubStep, Arduino_VariableDeclaration_Execute_AbstractSubStep, BigStep {
+ /**
+ * Returns the value of the 'Sub Steps ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep}.
+ *
+ *
+ * If the meaning of the 'Sub Steps ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Sub Steps ' containment reference list.
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_ModuleAssignment_Execute_SubSteps()
+ * @model containment="true"
+ * @generated
+ */
+ EList getSubSteps();
+
+ /**
+ *
+ *
+ * @model kind="operation" required="true"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel body='return (ModuleAssignment) this.getMse().getCaller();\r\n'"
+ * @generated
+ */
+ ModuleAssignment getCaller();
+
+} // Arduino_ModuleAssignment_Execute
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute_AbstractSubStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute_AbstractSubStep.java
new file mode 100644
index 00000000..67361f11
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute_AbstractSubStep.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Arduino Module Assignment Execute Abstract Sub Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_ModuleAssignment_Execute_AbstractSubStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Arduino_ModuleAssignment_Execute_AbstractSubStep extends EObject {
+} // Arduino_ModuleAssignment_Execute_AbstractSubStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute_ImplicitStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute_ImplicitStep.java
new file mode 100644
index 00000000..a0d0b290
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_ModuleAssignment_Execute_ImplicitStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Arduino Module Assignment Execute Implicit Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_ModuleAssignment_Execute_ImplicitStep()
+ * @model
+ * @generated
+ */
+public interface Arduino_ModuleAssignment_Execute_ImplicitStep extends Arduino_ModuleAssignment_Execute_AbstractSubStep, SmallStep {
+} // Arduino_ModuleAssignment_Execute_ImplicitStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Project_Setup.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Project_Setup.java
new file mode 100644
index 00000000..afdfe798
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_Project_Setup.java
@@ -0,0 +1,27 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import fr.obeo.dsl.arduino.Project;
+
+/**
+ *
+ * A representation of the model object 'Arduino Project Setup '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_Project_Setup()
+ * @model
+ * @generated
+ */
+public interface Arduino_Project_Setup extends SmallStep {
+ /**
+ *
+ *
+ * @model kind="operation" required="true"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel body='return (Project) this.getMse().getCaller();\r\n'"
+ * @generated
+ */
+ Project getCaller();
+
+} // Arduino_Project_Setup
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute.java
new file mode 100644
index 00000000..f1255a7a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute.java
@@ -0,0 +1,51 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import fr.obeo.dsl.arduino.VariableAssignment;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Arduino Variable Assignment Execute '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableAssignment_Execute()
+ * @model
+ * @generated
+ */
+public interface Arduino_VariableAssignment_Execute extends Arduino_Delay_Execute_AbstractSubStep, Arduino_If_Execute_AbstractSubStep, Arduino_ModuleAssignment_Execute_AbstractSubStep, Arduino_VariableAssignment_Execute_AbstractSubStep, Arduino_VariableDeclaration_Execute_AbstractSubStep, BigStep {
+ /**
+ * Returns the value of the 'Sub Steps ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep}.
+ *
+ *
+ * If the meaning of the 'Sub Steps ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Sub Steps ' containment reference list.
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableAssignment_Execute_SubSteps()
+ * @model containment="true"
+ * @generated
+ */
+ EList getSubSteps();
+
+ /**
+ *
+ *
+ * @model kind="operation" required="true"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel body='return (VariableAssignment) this.getMse().getCaller();\r\n'"
+ * @generated
+ */
+ VariableAssignment getCaller();
+
+} // Arduino_VariableAssignment_Execute
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute_AbstractSubStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute_AbstractSubStep.java
new file mode 100644
index 00000000..6fb190b9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute_AbstractSubStep.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Arduino Variable Assignment Execute Abstract Sub Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableAssignment_Execute_AbstractSubStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Arduino_VariableAssignment_Execute_AbstractSubStep extends EObject {
+} // Arduino_VariableAssignment_Execute_AbstractSubStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute_ImplicitStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute_ImplicitStep.java
new file mode 100644
index 00000000..57483287
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableAssignment_Execute_ImplicitStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Arduino Variable Assignment Execute Implicit Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableAssignment_Execute_ImplicitStep()
+ * @model
+ * @generated
+ */
+public interface Arduino_VariableAssignment_Execute_ImplicitStep extends Arduino_VariableAssignment_Execute_AbstractSubStep, SmallStep {
+} // Arduino_VariableAssignment_Execute_ImplicitStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute.java
new file mode 100644
index 00000000..3f194832
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute.java
@@ -0,0 +1,51 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import fr.obeo.dsl.arduino.VariableDeclaration;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ *
+ * A representation of the model object 'Arduino Variable Declaration Execute '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableDeclaration_Execute()
+ * @model
+ * @generated
+ */
+public interface Arduino_VariableDeclaration_Execute extends Arduino_Delay_Execute_AbstractSubStep, Arduino_If_Execute_AbstractSubStep, Arduino_ModuleAssignment_Execute_AbstractSubStep, Arduino_VariableAssignment_Execute_AbstractSubStep, Arduino_VariableDeclaration_Execute_AbstractSubStep, BigStep {
+ /**
+ * Returns the value of the 'Sub Steps ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep}.
+ *
+ *
+ * If the meaning of the 'Sub Steps ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Sub Steps ' containment reference list.
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableDeclaration_Execute_SubSteps()
+ * @model containment="true"
+ * @generated
+ */
+ EList getSubSteps();
+
+ /**
+ *
+ *
+ * @model kind="operation" required="true"
+ * annotation="http://www.eclipse.org/emf/2002/GenModel body='return (VariableDeclaration) this.getMse().getCaller();\r\n'"
+ * @generated
+ */
+ VariableDeclaration getCaller();
+
+} // Arduino_VariableDeclaration_Execute
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute_AbstractSubStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute_AbstractSubStep.java
new file mode 100644
index 00000000..00de3617
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute_AbstractSubStep.java
@@ -0,0 +1,18 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Arduino Variable Declaration Execute Abstract Sub Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableDeclaration_Execute_AbstractSubStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Arduino_VariableDeclaration_Execute_AbstractSubStep extends EObject {
+} // Arduino_VariableDeclaration_Execute_AbstractSubStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute_ImplicitStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute_ImplicitStep.java
new file mode 100644
index 00000000..bef21f05
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Arduino_VariableDeclaration_Execute_ImplicitStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Arduino Variable Declaration Execute Implicit Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getArduino_VariableDeclaration_Execute_ImplicitStep()
+ * @model
+ * @generated
+ */
+public interface Arduino_VariableDeclaration_Execute_ImplicitStep extends Arduino_VariableDeclaration_Execute_AbstractSubStep, SmallStep {
+} // Arduino_VariableDeclaration_Execute_ImplicitStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/BigStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/BigStep.java
new file mode 100644
index 00000000..ec72549e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/BigStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Big Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getBigStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface BigStep extends Step {
+} // BigStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/RootImplicitStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/RootImplicitStep.java
new file mode 100644
index 00000000..922a170d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/RootImplicitStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Root Implicit Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getRootImplicitStep()
+ * @model
+ * @generated
+ */
+public interface RootImplicitStep extends SmallStep {
+} // RootImplicitStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/SmallStep.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/SmallStep.java
new file mode 100644
index 00000000..6722e38e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/SmallStep.java
@@ -0,0 +1,17 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+
+/**
+ *
+ * A representation of the model object 'Small Step '.
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getSmallStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface SmallStep extends Step {
+} // SmallStep
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Step.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Step.java
new file mode 100644
index 00000000..7cdb598b
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/Step.java
@@ -0,0 +1,83 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import arduinoTrace.States.State;
+
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+
+/**
+ *
+ * A representation of the model object 'Step '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Steps.Step#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.Step#getStartingState Starting State }
+ *
+ *
+ *
+ * @see arduinoTrace.Steps.StepsPackage#getStep()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Step extends MSEOccurrence {
+ /**
+ * Returns the value of the 'Ending State ' reference.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.State#getEndedSteps Ended Steps }'.
+ *
+ *
+ * If the meaning of the 'Ending State ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Ending State ' reference.
+ * @see #setEndingState(State)
+ * @see arduinoTrace.Steps.StepsPackage#getStep_EndingState()
+ * @see arduinoTrace.States.State#getEndedSteps
+ * @model opposite="endedSteps"
+ * @generated
+ */
+ State getEndingState();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.Steps.Step#getEndingState Ending State }' reference.
+ *
+ *
+ * @param value the new value of the 'Ending State ' reference.
+ * @see #getEndingState()
+ * @generated
+ */
+ void setEndingState(State value);
+
+ /**
+ * Returns the value of the 'Starting State ' reference.
+ * It is bidirectional and its opposite is '{@link arduinoTrace.States.State#getStartedSteps Started Steps }'.
+ *
+ *
+ * If the meaning of the 'Starting State ' reference isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Starting State ' reference.
+ * @see #setStartingState(State)
+ * @see arduinoTrace.Steps.StepsPackage#getStep_StartingState()
+ * @see arduinoTrace.States.State#getStartedSteps
+ * @model opposite="startedSteps" required="true"
+ * @generated
+ */
+ State getStartingState();
+
+ /**
+ * Sets the value of the '{@link arduinoTrace.Steps.Step#getStartingState Starting State }' reference.
+ *
+ *
+ * @param value the new value of the 'Starting State ' reference.
+ * @see #getStartingState()
+ * @generated
+ */
+ void setStartingState(State value);
+
+} // Step
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/StepsFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/StepsFactory.java
new file mode 100644
index 00000000..bd5cd8b4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/StepsFactory.java
@@ -0,0 +1,141 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ *
+ * The Factory for the model.
+ * It provides a create method for each non-abstract class of the model.
+ *
+ * @see arduinoTrace.Steps.StepsPackage
+ * @generated
+ */
+public interface StepsFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ *
+ *
+ * @generated
+ */
+ StepsFactory eINSTANCE = arduinoTrace.Steps.impl.StepsFactoryImpl.init();
+
+ /**
+ * Returns a new object of class 'Arduino Delay Execute '.
+ *
+ *
+ * @return a new object of class 'Arduino Delay Execute '.
+ * @generated
+ */
+ Arduino_Delay_Execute createArduino_Delay_Execute();
+
+ /**
+ * Returns a new object of class 'Arduino Delay Execute Implicit Step '.
+ *
+ *
+ * @return a new object of class 'Arduino Delay Execute Implicit Step '.
+ * @generated
+ */
+ Arduino_Delay_Execute_ImplicitStep createArduino_Delay_Execute_ImplicitStep();
+
+ /**
+ * Returns a new object of class 'Arduino If Execute '.
+ *
+ *
+ * @return a new object of class 'Arduino If Execute '.
+ * @generated
+ */
+ Arduino_If_Execute createArduino_If_Execute();
+
+ /**
+ * Returns a new object of class 'Arduino If Execute Implicit Step '.
+ *
+ *
+ * @return a new object of class 'Arduino If Execute Implicit Step '.
+ * @generated
+ */
+ Arduino_If_Execute_ImplicitStep createArduino_If_Execute_ImplicitStep();
+
+ /**
+ * Returns a new object of class 'Arduino Module Assignment Execute '.
+ *
+ *
+ * @return a new object of class 'Arduino Module Assignment Execute '.
+ * @generated
+ */
+ Arduino_ModuleAssignment_Execute createArduino_ModuleAssignment_Execute();
+
+ /**
+ * Returns a new object of class 'Arduino Module Assignment Execute Implicit Step '.
+ *
+ *
+ * @return a new object of class 'Arduino Module Assignment Execute Implicit Step '.
+ * @generated
+ */
+ Arduino_ModuleAssignment_Execute_ImplicitStep createArduino_ModuleAssignment_Execute_ImplicitStep();
+
+ /**
+ * Returns a new object of class 'Arduino Project Setup '.
+ *
+ *
+ * @return a new object of class 'Arduino Project Setup '.
+ * @generated
+ */
+ Arduino_Project_Setup createArduino_Project_Setup();
+
+ /**
+ * Returns a new object of class 'Arduino Variable Assignment Execute '.
+ *
+ *
+ * @return a new object of class 'Arduino Variable Assignment Execute '.
+ * @generated
+ */
+ Arduino_VariableAssignment_Execute createArduino_VariableAssignment_Execute();
+
+ /**
+ * Returns a new object of class 'Arduino Variable Assignment Execute Implicit Step '.
+ *
+ *
+ * @return a new object of class 'Arduino Variable Assignment Execute Implicit Step '.
+ * @generated
+ */
+ Arduino_VariableAssignment_Execute_ImplicitStep createArduino_VariableAssignment_Execute_ImplicitStep();
+
+ /**
+ * Returns a new object of class 'Arduino Variable Declaration Execute '.
+ *
+ *
+ * @return a new object of class 'Arduino Variable Declaration Execute '.
+ * @generated
+ */
+ Arduino_VariableDeclaration_Execute createArduino_VariableDeclaration_Execute();
+
+ /**
+ * Returns a new object of class 'Arduino Variable Declaration Execute Implicit Step '.
+ *
+ *
+ * @return a new object of class 'Arduino Variable Declaration Execute Implicit Step '.
+ * @generated
+ */
+ Arduino_VariableDeclaration_Execute_ImplicitStep createArduino_VariableDeclaration_Execute_ImplicitStep();
+
+ /**
+ * Returns a new object of class 'Root Implicit Step '.
+ *
+ *
+ * @return a new object of class 'Root Implicit Step '.
+ * @generated
+ */
+ RootImplicitStep createRootImplicitStep();
+
+ /**
+ * Returns the package supported by this factory.
+ *
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ StepsPackage getStepsPackage();
+
+} //StepsFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/StepsPackage.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/StepsPackage.java
new file mode 100644
index 00000000..f1ab12f4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/StepsPackage.java
@@ -0,0 +1,2197 @@
+/**
+ */
+package arduinoTrace.Steps;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * The Package for the model.
+ * It contains accessors for the meta objects to represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @see arduinoTrace.Steps.StepsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface StepsPackage extends EPackage {
+ /**
+ * The package name.
+ *
+ *
+ * @generated
+ */
+ String eNAME = "Steps";
+
+ /**
+ * The package namespace URI.
+ *
+ *
+ * @generated
+ */
+ String eNS_URI = "arduinoTrace_Steps";
+
+ /**
+ * The package namespace name.
+ *
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "events";
+
+ /**
+ * The singleton instance of the package.
+ *
+ *
+ * @generated
+ */
+ StepsPackage eINSTANCE = arduinoTrace.Steps.impl.StepsPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_AbstractSubStepImpl Arduino Delay Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Delay_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Delay_Execute_AbstractSubStep()
+ * @generated
+ */
+ int ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP = 1;
+
+ /**
+ * The number of structural features of the 'Arduino Delay Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Arduino Delay Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl Arduino Delay Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Delay_Execute()
+ * @generated
+ */
+ int ARDUINO_DELAY_EXECUTE = 0;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__MSE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__PARAMETERS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__RESULT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__LOGICAL_STEP = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__ENDING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__STARTING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the 'Sub Steps ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE__SUB_STEPS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the 'Arduino Delay Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_FEATURE_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 7;
+
+ /**
+ * The operation id for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE___GET_CALLER = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Arduino Delay Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_OPERATION_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl Arduino Delay Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Delay_Execute_ImplicitStep()
+ * @generated
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP = 2;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Arduino Delay Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP_FEATURE_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the 'Arduino Delay Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP_OPERATION_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl Arduino If Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_If_Execute()
+ * @generated
+ */
+ int ARDUINO_IF_EXECUTE = 3;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__MSE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__PARAMETERS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__RESULT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__LOGICAL_STEP = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__ENDING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__STARTING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the 'Sub Steps ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE__SUB_STEPS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the 'Arduino If Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_FEATURE_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 7;
+
+ /**
+ * The operation id for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE___GET_CALLER = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Arduino If Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_OPERATION_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_If_Execute_AbstractSubStepImpl Arduino If Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_If_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_If_Execute_AbstractSubStep()
+ * @generated
+ */
+ int ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP = 4;
+
+ /**
+ * The number of structural features of the 'Arduino If Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Arduino If Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl Arduino If Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_If_Execute_ImplicitStep()
+ * @generated
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP = 5;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Arduino If Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP_FEATURE_COUNT = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the 'Arduino If Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_IF_EXECUTE_IMPLICIT_STEP_OPERATION_COUNT = ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl Arduino Module Assignment Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_ModuleAssignment_Execute()
+ * @generated
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE = 6;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the 'Sub Steps ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the 'Arduino Module Assignment Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_FEATURE_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 7;
+
+ /**
+ * The operation id for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE___GET_CALLER = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Arduino Module Assignment Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_OPERATION_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_AbstractSubStepImpl Arduino Module Assignment Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_ModuleAssignment_Execute_AbstractSubStep()
+ * @generated
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP = 7;
+
+ /**
+ * The number of structural features of the 'Arduino Module Assignment Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Arduino Module Assignment Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl Arduino Module Assignment Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_ModuleAssignment_Execute_ImplicitStep()
+ * @generated
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP = 8;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Arduino Module Assignment Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP_FEATURE_COUNT = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the 'Arduino Module Assignment Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP_OPERATION_COUNT = ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.StepImpl Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.StepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getStep()
+ * @generated
+ */
+ int STEP = 19;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP__MSE = MsePackage.MSE_OCCURRENCE__MSE;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP__PARAMETERS = MsePackage.MSE_OCCURRENCE__PARAMETERS;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP__RESULT = MsePackage.MSE_OCCURRENCE__RESULT;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP__LOGICAL_STEP = MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP__ENDING_STATE = MsePackage.MSE_OCCURRENCE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP__STARTING_STATE = MsePackage.MSE_OCCURRENCE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the 'Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP_FEATURE_COUNT = MsePackage.MSE_OCCURRENCE_FEATURE_COUNT + 2;
+
+ /**
+ * The number of operations of the 'Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int STEP_OPERATION_COUNT = MsePackage.MSE_OCCURRENCE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.SmallStepImpl Small Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.SmallStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getSmallStep()
+ * @generated
+ */
+ int SMALL_STEP = 18;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP__MSE = STEP__MSE;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP__PARAMETERS = STEP__PARAMETERS;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP__RESULT = STEP__RESULT;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP__LOGICAL_STEP = STEP__LOGICAL_STEP;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP__ENDING_STATE = STEP__ENDING_STATE;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP__STARTING_STATE = STEP__STARTING_STATE;
+
+ /**
+ * The number of structural features of the 'Small Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP_FEATURE_COUNT = STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Small Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int SMALL_STEP_OPERATION_COUNT = STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_Project_SetupImpl Arduino Project Setup }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Project_SetupImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Project_Setup()
+ * @generated
+ */
+ int ARDUINO_PROJECT_SETUP = 9;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP__MSE = SMALL_STEP__MSE;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP__PARAMETERS = SMALL_STEP__PARAMETERS;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP__RESULT = SMALL_STEP__RESULT;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP__LOGICAL_STEP = SMALL_STEP__LOGICAL_STEP;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP__ENDING_STATE = SMALL_STEP__ENDING_STATE;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP__STARTING_STATE = SMALL_STEP__STARTING_STATE;
+
+ /**
+ * The number of structural features of the 'Arduino Project Setup ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP_FEATURE_COUNT = SMALL_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The operation id for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP___GET_CALLER = SMALL_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Arduino Project Setup ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_PROJECT_SETUP_OPERATION_COUNT = SMALL_STEP_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl Arduino Variable Assignment Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableAssignment_Execute()
+ * @generated
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE = 10;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the 'Sub Steps ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the 'Arduino Variable Assignment Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_FEATURE_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 7;
+
+ /**
+ * The operation id for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE___GET_CALLER = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Arduino Variable Assignment Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_OPERATION_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_AbstractSubStepImpl Arduino Variable Assignment Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableAssignment_Execute_AbstractSubStep()
+ * @generated
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP = 11;
+
+ /**
+ * The number of structural features of the 'Arduino Variable Assignment Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Arduino Variable Assignment Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl Arduino Variable Assignment Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableAssignment_Execute_ImplicitStep()
+ * @generated
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP = 12;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Arduino Variable Assignment Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP_FEATURE_COUNT = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the 'Arduino Variable Assignment Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP_OPERATION_COUNT = ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl Arduino Variable Declaration Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableDeclaration_Execute()
+ * @generated
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE = 13;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The feature id for the 'Sub Steps ' containment reference list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of structural features of the 'Arduino Variable Declaration Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_FEATURE_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 7;
+
+ /**
+ * The operation id for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE___GET_CALLER = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Arduino Variable Declaration Execute ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_OPERATION_COUNT = ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_AbstractSubStepImpl Arduino Variable Declaration Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableDeclaration_Execute_AbstractSubStep()
+ * @generated
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP = 14;
+
+ /**
+ * The number of structural features of the 'Arduino Variable Declaration Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT = 0;
+
+ /**
+ * The number of operations of the 'Arduino Variable Declaration Execute Abstract Sub Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl Arduino Variable Declaration Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableDeclaration_Execute_ImplicitStep()
+ * @generated
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP = 15;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 3;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 4;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 5;
+
+ /**
+ * The number of structural features of the 'Arduino Variable Declaration Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP_FEATURE_COUNT = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_FEATURE_COUNT + 6;
+
+ /**
+ * The number of operations of the 'Arduino Variable Declaration Execute Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP_OPERATION_COUNT = ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.BigStepImpl Big Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.BigStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getBigStep()
+ * @generated
+ */
+ int BIG_STEP = 16;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP__MSE = STEP__MSE;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP__PARAMETERS = STEP__PARAMETERS;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP__RESULT = STEP__RESULT;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP__LOGICAL_STEP = STEP__LOGICAL_STEP;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP__ENDING_STATE = STEP__ENDING_STATE;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP__STARTING_STATE = STEP__STARTING_STATE;
+
+ /**
+ * The number of structural features of the 'Big Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP_FEATURE_COUNT = STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Big Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int BIG_STEP_OPERATION_COUNT = STEP_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link arduinoTrace.Steps.impl.RootImplicitStepImpl Root Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.RootImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getRootImplicitStep()
+ * @generated
+ */
+ int ROOT_IMPLICIT_STEP = 17;
+
+ /**
+ * The feature id for the 'Mse ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP__MSE = SMALL_STEP__MSE;
+
+ /**
+ * The feature id for the 'Parameters ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP__PARAMETERS = SMALL_STEP__PARAMETERS;
+
+ /**
+ * The feature id for the 'Result ' attribute list.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP__RESULT = SMALL_STEP__RESULT;
+
+ /**
+ * The feature id for the 'Logical Step ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP__LOGICAL_STEP = SMALL_STEP__LOGICAL_STEP;
+
+ /**
+ * The feature id for the 'Ending State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP__ENDING_STATE = SMALL_STEP__ENDING_STATE;
+
+ /**
+ * The feature id for the 'Starting State ' reference.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP__STARTING_STATE = SMALL_STEP__STARTING_STATE;
+
+ /**
+ * The number of structural features of the 'Root Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP_FEATURE_COUNT = SMALL_STEP_FEATURE_COUNT + 0;
+
+ /**
+ * The number of operations of the 'Root Implicit Step ' class.
+ *
+ *
+ * @generated
+ * @ordered
+ */
+ int ROOT_IMPLICIT_STEP_OPERATION_COUNT = SMALL_STEP_OPERATION_COUNT + 0;
+
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_Delay_Execute Arduino Delay Execute }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Delay Execute '.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute
+ * @generated
+ */
+ EClass getArduino_Delay_Execute();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Steps.Arduino_Delay_Execute#getSubSteps Sub Steps }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Sub Steps '.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute#getSubSteps()
+ * @see #getArduino_Delay_Execute()
+ * @generated
+ */
+ EReference getArduino_Delay_Execute_SubSteps();
+
+ /**
+ * Returns the meta object for the '{@link arduinoTrace.Steps.Arduino_Delay_Execute#getCaller() Get Caller }' operation.
+ *
+ *
+ * @return the meta object for the 'Get Caller ' operation.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute#getCaller()
+ * @generated
+ */
+ EOperation getArduino_Delay_Execute__GetCaller();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep Arduino Delay Execute Abstract Sub Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Delay Execute Abstract Sub Step '.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep
+ * @generated
+ */
+ EClass getArduino_Delay_Execute_AbstractSubStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_Delay_Execute_ImplicitStep Arduino Delay Execute Implicit Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Delay Execute Implicit Step '.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute_ImplicitStep
+ * @generated
+ */
+ EClass getArduino_Delay_Execute_ImplicitStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_If_Execute Arduino If Execute }'.
+ *
+ *
+ * @return the meta object for class 'Arduino If Execute '.
+ * @see arduinoTrace.Steps.Arduino_If_Execute
+ * @generated
+ */
+ EClass getArduino_If_Execute();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Steps.Arduino_If_Execute#getSubSteps Sub Steps }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Sub Steps '.
+ * @see arduinoTrace.Steps.Arduino_If_Execute#getSubSteps()
+ * @see #getArduino_If_Execute()
+ * @generated
+ */
+ EReference getArduino_If_Execute_SubSteps();
+
+ /**
+ * Returns the meta object for the '{@link arduinoTrace.Steps.Arduino_If_Execute#getCaller() Get Caller }' operation.
+ *
+ *
+ * @return the meta object for the 'Get Caller ' operation.
+ * @see arduinoTrace.Steps.Arduino_If_Execute#getCaller()
+ * @generated
+ */
+ EOperation getArduino_If_Execute__GetCaller();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep Arduino If Execute Abstract Sub Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino If Execute Abstract Sub Step '.
+ * @see arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep
+ * @generated
+ */
+ EClass getArduino_If_Execute_AbstractSubStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_If_Execute_ImplicitStep Arduino If Execute Implicit Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino If Execute Implicit Step '.
+ * @see arduinoTrace.Steps.Arduino_If_Execute_ImplicitStep
+ * @generated
+ */
+ EClass getArduino_If_Execute_ImplicitStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute Arduino Module Assignment Execute }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Module Assignment Execute '.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute
+ * @generated
+ */
+ EClass getArduino_ModuleAssignment_Execute();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute#getSubSteps Sub Steps }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Sub Steps '.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute#getSubSteps()
+ * @see #getArduino_ModuleAssignment_Execute()
+ * @generated
+ */
+ EReference getArduino_ModuleAssignment_Execute_SubSteps();
+
+ /**
+ * Returns the meta object for the '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute#getCaller() Get Caller }' operation.
+ *
+ *
+ * @return the meta object for the 'Get Caller ' operation.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute#getCaller()
+ * @generated
+ */
+ EOperation getArduino_ModuleAssignment_Execute__GetCaller();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep Arduino Module Assignment Execute Abstract Sub Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Module Assignment Execute Abstract Sub Step '.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep
+ * @generated
+ */
+ EClass getArduino_ModuleAssignment_Execute_AbstractSubStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_ImplicitStep Arduino Module Assignment Execute Implicit Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Module Assignment Execute Implicit Step '.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_ImplicitStep
+ * @generated
+ */
+ EClass getArduino_ModuleAssignment_Execute_ImplicitStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_Project_Setup Arduino Project Setup }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Project Setup '.
+ * @see arduinoTrace.Steps.Arduino_Project_Setup
+ * @generated
+ */
+ EClass getArduino_Project_Setup();
+
+ /**
+ * Returns the meta object for the '{@link arduinoTrace.Steps.Arduino_Project_Setup#getCaller() Get Caller }' operation.
+ *
+ *
+ * @return the meta object for the 'Get Caller ' operation.
+ * @see arduinoTrace.Steps.Arduino_Project_Setup#getCaller()
+ * @generated
+ */
+ EOperation getArduino_Project_Setup__GetCaller();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute Arduino Variable Assignment Execute }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Variable Assignment Execute '.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute
+ * @generated
+ */
+ EClass getArduino_VariableAssignment_Execute();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute#getSubSteps Sub Steps }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Sub Steps '.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute#getSubSteps()
+ * @see #getArduino_VariableAssignment_Execute()
+ * @generated
+ */
+ EReference getArduino_VariableAssignment_Execute_SubSteps();
+
+ /**
+ * Returns the meta object for the '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute#getCaller() Get Caller }' operation.
+ *
+ *
+ * @return the meta object for the 'Get Caller ' operation.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute#getCaller()
+ * @generated
+ */
+ EOperation getArduino_VariableAssignment_Execute__GetCaller();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep Arduino Variable Assignment Execute Abstract Sub Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Variable Assignment Execute Abstract Sub Step '.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep
+ * @generated
+ */
+ EClass getArduino_VariableAssignment_Execute_AbstractSubStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute_ImplicitStep Arduino Variable Assignment Execute Implicit Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Variable Assignment Execute Implicit Step '.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute_ImplicitStep
+ * @generated
+ */
+ EClass getArduino_VariableAssignment_Execute_ImplicitStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute Arduino Variable Declaration Execute }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Variable Declaration Execute '.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute
+ * @generated
+ */
+ EClass getArduino_VariableDeclaration_Execute();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute#getSubSteps Sub Steps }'.
+ *
+ *
+ * @return the meta object for the containment reference list 'Sub Steps '.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute#getSubSteps()
+ * @see #getArduino_VariableDeclaration_Execute()
+ * @generated
+ */
+ EReference getArduino_VariableDeclaration_Execute_SubSteps();
+
+ /**
+ * Returns the meta object for the '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute#getCaller() Get Caller }' operation.
+ *
+ *
+ * @return the meta object for the 'Get Caller ' operation.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute#getCaller()
+ * @generated
+ */
+ EOperation getArduino_VariableDeclaration_Execute__GetCaller();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep Arduino Variable Declaration Execute Abstract Sub Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Variable Declaration Execute Abstract Sub Step '.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep
+ * @generated
+ */
+ EClass getArduino_VariableDeclaration_Execute_AbstractSubStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_ImplicitStep Arduino Variable Declaration Execute Implicit Step }'.
+ *
+ *
+ * @return the meta object for class 'Arduino Variable Declaration Execute Implicit Step '.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_ImplicitStep
+ * @generated
+ */
+ EClass getArduino_VariableDeclaration_Execute_ImplicitStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.BigStep Big Step }'.
+ *
+ *
+ * @return the meta object for class 'Big Step '.
+ * @see arduinoTrace.Steps.BigStep
+ * @generated
+ */
+ EClass getBigStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.RootImplicitStep Root Implicit Step }'.
+ *
+ *
+ * @return the meta object for class 'Root Implicit Step '.
+ * @see arduinoTrace.Steps.RootImplicitStep
+ * @generated
+ */
+ EClass getRootImplicitStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.SmallStep Small Step }'.
+ *
+ *
+ * @return the meta object for class 'Small Step '.
+ * @see arduinoTrace.Steps.SmallStep
+ * @generated
+ */
+ EClass getSmallStep();
+
+ /**
+ * Returns the meta object for class '{@link arduinoTrace.Steps.Step Step }'.
+ *
+ *
+ * @return the meta object for class 'Step '.
+ * @see arduinoTrace.Steps.Step
+ * @generated
+ */
+ EClass getStep();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.Steps.Step#getEndingState Ending State }'.
+ *
+ *
+ * @return the meta object for the reference 'Ending State '.
+ * @see arduinoTrace.Steps.Step#getEndingState()
+ * @see #getStep()
+ * @generated
+ */
+ EReference getStep_EndingState();
+
+ /**
+ * Returns the meta object for the reference '{@link arduinoTrace.Steps.Step#getStartingState Starting State }'.
+ *
+ *
+ * @return the meta object for the reference 'Starting State '.
+ * @see arduinoTrace.Steps.Step#getStartingState()
+ * @see #getStep()
+ * @generated
+ */
+ EReference getStep_StartingState();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ *
+ *
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ StepsFactory getStepsFactory();
+
+ /**
+ *
+ * Defines literals for the meta objects that represent
+ *
+ * each class,
+ * each feature of each class,
+ * each operation of each class,
+ * each enum,
+ * and each data type
+ *
+ *
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl Arduino Delay Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Delay_Execute()
+ * @generated
+ */
+ EClass ARDUINO_DELAY_EXECUTE = eINSTANCE.getArduino_Delay_Execute();
+
+ /**
+ * The meta object literal for the 'Sub Steps ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_DELAY_EXECUTE__SUB_STEPS = eINSTANCE.getArduino_Delay_Execute_SubSteps();
+
+ /**
+ * The meta object literal for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ */
+ EOperation ARDUINO_DELAY_EXECUTE___GET_CALLER = eINSTANCE.getArduino_Delay_Execute__GetCaller();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_AbstractSubStepImpl Arduino Delay Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Delay_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Delay_Execute_AbstractSubStep()
+ * @generated
+ */
+ EClass ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP = eINSTANCE.getArduino_Delay_Execute_AbstractSubStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl Arduino Delay Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Delay_Execute_ImplicitStep()
+ * @generated
+ */
+ EClass ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP = eINSTANCE.getArduino_Delay_Execute_ImplicitStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl Arduino If Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_If_Execute()
+ * @generated
+ */
+ EClass ARDUINO_IF_EXECUTE = eINSTANCE.getArduino_If_Execute();
+
+ /**
+ * The meta object literal for the 'Sub Steps ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_IF_EXECUTE__SUB_STEPS = eINSTANCE.getArduino_If_Execute_SubSteps();
+
+ /**
+ * The meta object literal for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ */
+ EOperation ARDUINO_IF_EXECUTE___GET_CALLER = eINSTANCE.getArduino_If_Execute__GetCaller();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_If_Execute_AbstractSubStepImpl Arduino If Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_If_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_If_Execute_AbstractSubStep()
+ * @generated
+ */
+ EClass ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP = eINSTANCE.getArduino_If_Execute_AbstractSubStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl Arduino If Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_If_Execute_ImplicitStep()
+ * @generated
+ */
+ EClass ARDUINO_IF_EXECUTE_IMPLICIT_STEP = eINSTANCE.getArduino_If_Execute_ImplicitStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl Arduino Module Assignment Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_ModuleAssignment_Execute()
+ * @generated
+ */
+ EClass ARDUINO_MODULE_ASSIGNMENT_EXECUTE = eINSTANCE.getArduino_ModuleAssignment_Execute();
+
+ /**
+ * The meta object literal for the 'Sub Steps ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS = eINSTANCE.getArduino_ModuleAssignment_Execute_SubSteps();
+
+ /**
+ * The meta object literal for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ */
+ EOperation ARDUINO_MODULE_ASSIGNMENT_EXECUTE___GET_CALLER = eINSTANCE.getArduino_ModuleAssignment_Execute__GetCaller();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_AbstractSubStepImpl Arduino Module Assignment Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_ModuleAssignment_Execute_AbstractSubStep()
+ * @generated
+ */
+ EClass ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP = eINSTANCE.getArduino_ModuleAssignment_Execute_AbstractSubStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl Arduino Module Assignment Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_ModuleAssignment_Execute_ImplicitStep()
+ * @generated
+ */
+ EClass ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP = eINSTANCE.getArduino_ModuleAssignment_Execute_ImplicitStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_Project_SetupImpl Arduino Project Setup }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_Project_SetupImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_Project_Setup()
+ * @generated
+ */
+ EClass ARDUINO_PROJECT_SETUP = eINSTANCE.getArduino_Project_Setup();
+
+ /**
+ * The meta object literal for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ */
+ EOperation ARDUINO_PROJECT_SETUP___GET_CALLER = eINSTANCE.getArduino_Project_Setup__GetCaller();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl Arduino Variable Assignment Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableAssignment_Execute()
+ * @generated
+ */
+ EClass ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE = eINSTANCE.getArduino_VariableAssignment_Execute();
+
+ /**
+ * The meta object literal for the 'Sub Steps ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS = eINSTANCE.getArduino_VariableAssignment_Execute_SubSteps();
+
+ /**
+ * The meta object literal for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ */
+ EOperation ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE___GET_CALLER = eINSTANCE.getArduino_VariableAssignment_Execute__GetCaller();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_AbstractSubStepImpl Arduino Variable Assignment Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableAssignment_Execute_AbstractSubStep()
+ * @generated
+ */
+ EClass ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP = eINSTANCE.getArduino_VariableAssignment_Execute_AbstractSubStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl Arduino Variable Assignment Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableAssignment_Execute_ImplicitStep()
+ * @generated
+ */
+ EClass ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP = eINSTANCE.getArduino_VariableAssignment_Execute_ImplicitStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl Arduino Variable Declaration Execute }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableDeclaration_Execute()
+ * @generated
+ */
+ EClass ARDUINO_VARIABLE_DECLARATION_EXECUTE = eINSTANCE.getArduino_VariableDeclaration_Execute();
+
+ /**
+ * The meta object literal for the 'Sub Steps ' containment reference list feature.
+ *
+ *
+ * @generated
+ */
+ EReference ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS = eINSTANCE.getArduino_VariableDeclaration_Execute_SubSteps();
+
+ /**
+ * The meta object literal for the 'Get Caller ' operation.
+ *
+ *
+ * @generated
+ */
+ EOperation ARDUINO_VARIABLE_DECLARATION_EXECUTE___GET_CALLER = eINSTANCE.getArduino_VariableDeclaration_Execute__GetCaller();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_AbstractSubStepImpl Arduino Variable Declaration Execute Abstract Sub Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_AbstractSubStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableDeclaration_Execute_AbstractSubStep()
+ * @generated
+ */
+ EClass ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP = eINSTANCE.getArduino_VariableDeclaration_Execute_AbstractSubStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl Arduino Variable Declaration Execute Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getArduino_VariableDeclaration_Execute_ImplicitStep()
+ * @generated
+ */
+ EClass ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP = eINSTANCE.getArduino_VariableDeclaration_Execute_ImplicitStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.BigStepImpl Big Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.BigStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getBigStep()
+ * @generated
+ */
+ EClass BIG_STEP = eINSTANCE.getBigStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.RootImplicitStepImpl Root Implicit Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.RootImplicitStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getRootImplicitStep()
+ * @generated
+ */
+ EClass ROOT_IMPLICIT_STEP = eINSTANCE.getRootImplicitStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.SmallStepImpl Small Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.SmallStepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getSmallStep()
+ * @generated
+ */
+ EClass SMALL_STEP = eINSTANCE.getSmallStep();
+
+ /**
+ * The meta object literal for the '{@link arduinoTrace.Steps.impl.StepImpl Step }' class.
+ *
+ *
+ * @see arduinoTrace.Steps.impl.StepImpl
+ * @see arduinoTrace.Steps.impl.StepsPackageImpl#getStep()
+ * @generated
+ */
+ EClass STEP = eINSTANCE.getStep();
+
+ /**
+ * The meta object literal for the 'Ending State ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference STEP__ENDING_STATE = eINSTANCE.getStep_EndingState();
+
+ /**
+ * The meta object literal for the 'Starting State ' reference feature.
+ *
+ *
+ * @generated
+ */
+ EReference STEP__STARTING_STATE = eINSTANCE.getStep_StartingState();
+
+ }
+
+} //StepsPackage
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_ExecuteImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_ExecuteImpl.java
new file mode 100644
index 00000000..f19632cb
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_ExecuteImpl.java
@@ -0,0 +1,720 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_Delay_Execute;
+import arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import fr.obeo.dsl.arduino.Delay;
+
+import java.lang.reflect.InvocationTargetException;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Delay Execute '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getStartingState Starting State }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_ExecuteImpl#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_Delay_ExecuteImpl extends Arduino_Delay_Execute_AbstractSubStepImpl implements Arduino_Delay_Execute {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ * The cached value of the '{@link #getSubSteps() Sub Steps }' containment reference list.
+ *
+ *
+ * @see #getSubSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList subSteps;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_Delay_ExecuteImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_DELAY_EXECUTE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getSubSteps() {
+ if (subSteps == null) {
+ subSteps = new EObjectContainmentEList(Arduino_Delay_Execute_AbstractSubStep.class, this, StepsPackage.ARDUINO_DELAY_EXECUTE__SUB_STEPS);
+ }
+ return subSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Delay getCaller() {
+ return (Delay) this.getMse().getCaller();
+
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__SUB_STEPS:
+ return ((InternalEList>)getSubSteps()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__SUB_STEPS:
+ return getSubSteps();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ getSubSteps().addAll((Collection extends Arduino_Delay_Execute_AbstractSubStep>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE:
+ return startingState != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__SUB_STEPS:
+ return subSteps != null && !subSteps.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_DELAY_EXECUTE__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_DELAY_EXECUTE__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_DELAY_EXECUTE__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_DELAY_EXECUTE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_DELAY_EXECUTE__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_DELAY_EXECUTE__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList> arguments) throws InvocationTargetException {
+ switch (operationID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE___GET_CALLER:
+ return getCaller();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_Delay_ExecuteImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_Execute_AbstractSubStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_Execute_AbstractSubStepImpl.java
new file mode 100644
index 00000000..077eb794
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_Execute_AbstractSubStepImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Delay Execute Abstract Sub Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class Arduino_Delay_Execute_AbstractSubStepImpl extends MinimalEObjectImpl.Container implements Arduino_Delay_Execute_AbstractSubStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_Delay_Execute_AbstractSubStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP;
+ }
+
+} //Arduino_Delay_Execute_AbstractSubStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_Execute_ImplicitStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_Execute_ImplicitStepImpl.java
new file mode 100644
index 00000000..7e3f0881
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Delay_Execute_ImplicitStepImpl.java
@@ -0,0 +1,609 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_Delay_Execute_ImplicitStep;
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Delay Execute Implicit Step '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_Delay_Execute_ImplicitStepImpl#getStartingState Starting State }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_Delay_Execute_ImplicitStepImpl extends Arduino_Delay_Execute_AbstractSubStepImpl implements Arduino_Delay_Execute_ImplicitStep {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_Delay_Execute_ImplicitStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return startingState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_Delay_Execute_ImplicitStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_ExecuteImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_ExecuteImpl.java
new file mode 100644
index 00000000..c8c813df
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_ExecuteImpl.java
@@ -0,0 +1,719 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_If_Execute;
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import fr.obeo.dsl.arduino.If;
+
+import java.lang.reflect.InvocationTargetException;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino If Execute '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getStartingState Starting State }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_ExecuteImpl#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_If_ExecuteImpl extends Arduino_Delay_Execute_AbstractSubStepImpl implements Arduino_If_Execute {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ * The cached value of the '{@link #getSubSteps() Sub Steps }' containment reference list.
+ *
+ *
+ * @see #getSubSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList subSteps;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_If_ExecuteImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_IF_EXECUTE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_IF_EXECUTE__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getSubSteps() {
+ if (subSteps == null) {
+ subSteps = new EObjectContainmentEList(Arduino_If_Execute_AbstractSubStep.class, this, StepsPackage.ARDUINO_IF_EXECUTE__SUB_STEPS);
+ }
+ return subSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public If getCaller() {
+ return (If) this.getMse().getCaller();
+
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE__SUB_STEPS:
+ return ((InternalEList>)getSubSteps()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_IF_EXECUTE__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ case StepsPackage.ARDUINO_IF_EXECUTE__SUB_STEPS:
+ return getSubSteps();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ getSubSteps().addAll((Collection extends Arduino_If_Execute_AbstractSubStep>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_IF_EXECUTE__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE:
+ return startingState != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE__SUB_STEPS:
+ return subSteps != null && !subSteps.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_IF_EXECUTE__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_IF_EXECUTE__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_IF_EXECUTE__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_IF_EXECUTE__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_IF_EXECUTE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_IF_EXECUTE__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_IF_EXECUTE__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList> arguments) throws InvocationTargetException {
+ switch (operationID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE___GET_CALLER:
+ return getCaller();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_If_ExecuteImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_Execute_AbstractSubStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_Execute_AbstractSubStepImpl.java
new file mode 100644
index 00000000..46754a1c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_Execute_AbstractSubStepImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Arduino If Execute Abstract Sub Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class Arduino_If_Execute_AbstractSubStepImpl extends MinimalEObjectImpl.Container implements Arduino_If_Execute_AbstractSubStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_If_Execute_AbstractSubStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP;
+ }
+
+} //Arduino_If_Execute_AbstractSubStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_Execute_ImplicitStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_Execute_ImplicitStepImpl.java
new file mode 100644
index 00000000..6b1015fe
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_If_Execute_ImplicitStepImpl.java
@@ -0,0 +1,609 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_If_Execute_ImplicitStep;
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino If Execute Implicit Step '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_If_Execute_ImplicitStepImpl#getStartingState Starting State }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_If_Execute_ImplicitStepImpl extends Arduino_If_Execute_AbstractSubStepImpl implements Arduino_If_Execute_ImplicitStep {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_If_Execute_ImplicitStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_IF_EXECUTE_IMPLICIT_STEP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return startingState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_If_Execute_ImplicitStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_ExecuteImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_ExecuteImpl.java
new file mode 100644
index 00000000..2d90edb9
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_ExecuteImpl.java
@@ -0,0 +1,719 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import fr.obeo.dsl.arduino.ModuleAssignment;
+
+import java.lang.reflect.InvocationTargetException;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Module Assignment Execute '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getStartingState Starting State }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_ExecuteImpl#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_ModuleAssignment_ExecuteImpl extends Arduino_Delay_Execute_AbstractSubStepImpl implements Arduino_ModuleAssignment_Execute {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ * The cached value of the '{@link #getSubSteps() Sub Steps }' containment reference list.
+ *
+ *
+ * @see #getSubSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList subSteps;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_ModuleAssignment_ExecuteImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_MODULE_ASSIGNMENT_EXECUTE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getSubSteps() {
+ if (subSteps == null) {
+ subSteps = new EObjectContainmentEList(Arduino_ModuleAssignment_Execute_AbstractSubStep.class, this, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS);
+ }
+ return subSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ModuleAssignment getCaller() {
+ return (ModuleAssignment) this.getMse().getCaller();
+
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ return ((InternalEList>)getSubSteps()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ return getSubSteps();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ getSubSteps().addAll((Collection extends Arduino_ModuleAssignment_Execute_AbstractSubStep>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ return startingState != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ return subSteps != null && !subSteps.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList> arguments) throws InvocationTargetException {
+ switch (operationID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE___GET_CALLER:
+ return getCaller();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_ModuleAssignment_ExecuteImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_Execute_AbstractSubStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_Execute_AbstractSubStepImpl.java
new file mode 100644
index 00000000..673a3f78
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_Execute_AbstractSubStepImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Module Assignment Execute Abstract Sub Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class Arduino_ModuleAssignment_Execute_AbstractSubStepImpl extends MinimalEObjectImpl.Container implements Arduino_ModuleAssignment_Execute_AbstractSubStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_ModuleAssignment_Execute_AbstractSubStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP;
+ }
+
+} //Arduino_ModuleAssignment_Execute_AbstractSubStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_Execute_ImplicitStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_Execute_ImplicitStepImpl.java
new file mode 100644
index 00000000..f1cfce96
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_ModuleAssignment_Execute_ImplicitStepImpl.java
@@ -0,0 +1,609 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_ImplicitStep;
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Module Assignment Execute Implicit Step '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_ModuleAssignment_Execute_ImplicitStepImpl#getStartingState Starting State }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_ModuleAssignment_Execute_ImplicitStepImpl extends Arduino_ModuleAssignment_Execute_AbstractSubStepImpl implements Arduino_ModuleAssignment_Execute_ImplicitStep {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_ModuleAssignment_Execute_ImplicitStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return startingState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_ModuleAssignment_Execute_ImplicitStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Project_SetupImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Project_SetupImpl.java
new file mode 100644
index 00000000..662147ad
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_Project_SetupImpl.java
@@ -0,0 +1,69 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.Arduino_Project_Setup;
+import arduinoTrace.Steps.StepsPackage;
+
+import fr.obeo.dsl.arduino.Project;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Project Setup '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_Project_SetupImpl extends SmallStepImpl implements Arduino_Project_Setup {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_Project_SetupImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_PROJECT_SETUP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Project getCaller() {
+ return (Project) this.getMse().getCaller();
+
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList> arguments) throws InvocationTargetException {
+ switch (operationID) {
+ case StepsPackage.ARDUINO_PROJECT_SETUP___GET_CALLER:
+ return getCaller();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+} //Arduino_Project_SetupImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_ExecuteImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_ExecuteImpl.java
new file mode 100644
index 00000000..324e9fc0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_ExecuteImpl.java
@@ -0,0 +1,719 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import fr.obeo.dsl.arduino.VariableAssignment;
+
+import java.lang.reflect.InvocationTargetException;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Variable Assignment Execute '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getStartingState Starting State }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_ExecuteImpl#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_VariableAssignment_ExecuteImpl extends Arduino_Delay_Execute_AbstractSubStepImpl implements Arduino_VariableAssignment_Execute {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ * The cached value of the '{@link #getSubSteps() Sub Steps }' containment reference list.
+ *
+ *
+ * @see #getSubSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList subSteps;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_VariableAssignment_ExecuteImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getSubSteps() {
+ if (subSteps == null) {
+ subSteps = new EObjectContainmentEList(Arduino_VariableAssignment_Execute_AbstractSubStep.class, this, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS);
+ }
+ return subSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public VariableAssignment getCaller() {
+ return (VariableAssignment) this.getMse().getCaller();
+
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ return ((InternalEList>)getSubSteps()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ return getSubSteps();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ getSubSteps().addAll((Collection extends Arduino_VariableAssignment_Execute_AbstractSubStep>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE:
+ return startingState != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS:
+ return subSteps != null && !subSteps.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList> arguments) throws InvocationTargetException {
+ switch (operationID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE___GET_CALLER:
+ return getCaller();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_VariableAssignment_ExecuteImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_Execute_AbstractSubStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_Execute_AbstractSubStepImpl.java
new file mode 100644
index 00000000..b06e3ef0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_Execute_AbstractSubStepImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Variable Assignment Execute Abstract Sub Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class Arduino_VariableAssignment_Execute_AbstractSubStepImpl extends MinimalEObjectImpl.Container implements Arduino_VariableAssignment_Execute_AbstractSubStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_VariableAssignment_Execute_AbstractSubStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP;
+ }
+
+} //Arduino_VariableAssignment_Execute_AbstractSubStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_Execute_ImplicitStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_Execute_ImplicitStepImpl.java
new file mode 100644
index 00000000..63259258
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableAssignment_Execute_ImplicitStepImpl.java
@@ -0,0 +1,609 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_ImplicitStep;
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Variable Assignment Execute Implicit Step '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableAssignment_Execute_ImplicitStepImpl#getStartingState Starting State }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_VariableAssignment_Execute_ImplicitStepImpl extends Arduino_VariableAssignment_Execute_AbstractSubStepImpl implements Arduino_VariableAssignment_Execute_ImplicitStep {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_VariableAssignment_Execute_ImplicitStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return startingState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_VariableAssignment_Execute_ImplicitStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_ExecuteImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_ExecuteImpl.java
new file mode 100644
index 00000000..87e37cb1
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_ExecuteImpl.java
@@ -0,0 +1,719 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import fr.obeo.dsl.arduino.VariableDeclaration;
+
+import java.lang.reflect.InvocationTargetException;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Variable Declaration Execute '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getStartingState Starting State }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_ExecuteImpl#getSubSteps Sub Steps }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_VariableDeclaration_ExecuteImpl extends Arduino_Delay_Execute_AbstractSubStepImpl implements Arduino_VariableDeclaration_Execute {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ * The cached value of the '{@link #getSubSteps() Sub Steps }' containment reference list.
+ *
+ *
+ * @see #getSubSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList subSteps;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_VariableDeclaration_ExecuteImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_VARIABLE_DECLARATION_EXECUTE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getSubSteps() {
+ if (subSteps == null) {
+ subSteps = new EObjectContainmentEList(Arduino_VariableDeclaration_Execute_AbstractSubStep.class, this, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS);
+ }
+ return subSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public VariableDeclaration getCaller() {
+ return (VariableDeclaration) this.getMse().getCaller();
+
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS:
+ return ((InternalEList>)getSubSteps()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS:
+ return getSubSteps();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ getSubSteps().addAll((Collection extends Arduino_VariableDeclaration_Execute_AbstractSubStep>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS:
+ getSubSteps().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE:
+ return startingState != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS:
+ return subSteps != null && !subSteps.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == Arduino_If_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_ModuleAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableAssignment_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == Arduino_VariableDeclaration_Execute_AbstractSubStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == BigStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList> arguments) throws InvocationTargetException {
+ switch (operationID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE___GET_CALLER:
+ return getCaller();
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_VariableDeclaration_ExecuteImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_Execute_AbstractSubStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_Execute_AbstractSubStepImpl.java
new file mode 100644
index 00000000..c77bb7e2
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_Execute_AbstractSubStepImpl.java
@@ -0,0 +1,41 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Variable Declaration Execute Abstract Sub Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class Arduino_VariableDeclaration_Execute_AbstractSubStepImpl extends MinimalEObjectImpl.Container implements Arduino_VariableDeclaration_Execute_AbstractSubStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_VariableDeclaration_Execute_AbstractSubStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP;
+ }
+
+} //Arduino_VariableDeclaration_Execute_AbstractSubStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_Execute_ImplicitStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_Execute_ImplicitStepImpl.java
new file mode 100644
index 00000000..072826fa
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/Arduino_VariableDeclaration_Execute_ImplicitStepImpl.java
@@ -0,0 +1,609 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_ImplicitStep;
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+import org.gemoc.executionframework.engine.mse.LogicalStep;
+import org.gemoc.executionframework.engine.mse.MSE;
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model object 'Arduino Variable Declaration Execute Implicit Step '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl#getMse Mse }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl#getParameters Parameters }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl#getResult Result }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl#getLogicalStep Logical Step }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.Arduino_VariableDeclaration_Execute_ImplicitStepImpl#getStartingState Starting State }
+ *
+ *
+ *
+ * @generated
+ */
+public class Arduino_VariableDeclaration_Execute_ImplicitStepImpl extends Arduino_VariableDeclaration_Execute_AbstractSubStepImpl implements Arduino_VariableDeclaration_Execute_ImplicitStep {
+ /**
+ * The cached value of the '{@link #getMse() Mse }' reference.
+ *
+ *
+ * @see #getMse()
+ * @generated
+ * @ordered
+ */
+ protected MSE mse;
+
+ /**
+ * The cached value of the '{@link #getParameters() Parameters }' attribute list.
+ *
+ *
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList parameters;
+
+ /**
+ * The cached value of the '{@link #getResult() Result }' attribute list.
+ *
+ *
+ * @see #getResult()
+ * @generated
+ * @ordered
+ */
+ protected EList result;
+
+ /**
+ * The cached value of the '{@link #getLogicalStep() Logical Step }' reference.
+ *
+ *
+ * @see #getLogicalStep()
+ * @generated
+ * @ordered
+ */
+ protected LogicalStep logicalStep;
+
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected Arduino_VariableDeclaration_Execute_ImplicitStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE getMse() {
+ if (mse != null && mse.eIsProxy()) {
+ InternalEObject oldMse = (InternalEObject)mse;
+ mse = (MSE)eResolveProxy(oldMse);
+ if (mse != oldMse) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+ }
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public MSE basicGetMse() {
+ return mse;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setMse(MSE newMse) {
+ MSE oldMse = mse;
+ mse = newMse;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE, oldMse, mse));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getParameters() {
+ if (parameters == null) {
+ parameters = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getResult() {
+ if (result == null) {
+ result = new EDataTypeUniqueEList(Object.class, this, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT);
+ }
+ return result;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep getLogicalStep() {
+ if (logicalStep != null && logicalStep.eIsProxy()) {
+ InternalEObject oldLogicalStep = (InternalEObject)logicalStep;
+ logicalStep = (LogicalStep)eResolveProxy(oldLogicalStep);
+ if (logicalStep != oldLogicalStep) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, logicalStep));
+ }
+ }
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public LogicalStep basicGetLogicalStep() {
+ return logicalStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetLogicalStep(LogicalStep newLogicalStep, NotificationChain msgs) {
+ LogicalStep oldLogicalStep = logicalStep;
+ logicalStep = newLogicalStep;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, oldLogicalStep, newLogicalStep);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setLogicalStep(LogicalStep newLogicalStep) {
+ if (newLogicalStep != logicalStep) {
+ NotificationChain msgs = null;
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ if (newLogicalStep != null)
+ msgs = ((InternalEObject)newLogicalStep).eInverseAdd(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ msgs = basicSetLogicalStep(newLogicalStep, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP, newLogicalStep, newLogicalStep));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (logicalStep != null)
+ msgs = ((InternalEObject)logicalStep).eInverseRemove(this, MsePackage.LOGICAL_STEP__MSE_OCCURRENCES, LogicalStep.class, msgs);
+ return basicSetLogicalStep((LogicalStep)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return basicSetLogicalStep(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE:
+ if (resolve) return getMse();
+ return basicGetMse();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return getParameters();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT:
+ return getResult();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ if (resolve) return getLogicalStep();
+ return basicGetLogicalStep();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ getResult().addAll((Collection extends Object>)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE:
+ setMse((MSE)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ getParameters().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT:
+ getResult().clear();
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ setLogicalStep((LogicalStep)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE:
+ return mse != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT:
+ return result != null && !result.isEmpty();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP:
+ return logicalStep != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE:
+ return startingState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE: return MsePackage.MSE_OCCURRENCE__MSE;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS: return MsePackage.MSE_OCCURRENCE__PARAMETERS;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT: return MsePackage.MSE_OCCURRENCE__RESULT;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP: return MsePackage.MSE_OCCURRENCE__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (derivedFeatureID) {
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE: return StepsPackage.STEP__ENDING_STATE;
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE: return StepsPackage.STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (derivedFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class> baseClass) {
+ if (baseClass == MSEOccurrence.class) {
+ switch (baseFeatureID) {
+ case MsePackage.MSE_OCCURRENCE__MSE: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__MSE;
+ case MsePackage.MSE_OCCURRENCE__PARAMETERS: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__PARAMETERS;
+ case MsePackage.MSE_OCCURRENCE__RESULT: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__RESULT;
+ case MsePackage.MSE_OCCURRENCE__LOGICAL_STEP: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__LOGICAL_STEP;
+ default: return -1;
+ }
+ }
+ if (baseClass == Step.class) {
+ switch (baseFeatureID) {
+ case StepsPackage.STEP__ENDING_STATE: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__ENDING_STATE;
+ case StepsPackage.STEP__STARTING_STATE: return StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP__STARTING_STATE;
+ default: return -1;
+ }
+ }
+ if (baseClass == SmallStep.class) {
+ switch (baseFeatureID) {
+ default: return -1;
+ }
+ }
+ return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameters: ");
+ result.append(parameters);
+ result.append(", result: ");
+ result.append(result);
+ result.append(')');
+ return result.toString();
+ }
+
+} //Arduino_VariableDeclaration_Execute_ImplicitStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/BigStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/BigStepImpl.java
new file mode 100644
index 00000000..d99bcf8a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/BigStepImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Big Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class BigStepImpl extends StepImpl implements BigStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected BigStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.BIG_STEP;
+ }
+
+} //BigStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/RootImplicitStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/RootImplicitStepImpl.java
new file mode 100644
index 00000000..b9bc2b61
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/RootImplicitStepImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.RootImplicitStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Root Implicit Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public class RootImplicitStepImpl extends SmallStepImpl implements RootImplicitStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected RootImplicitStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.ROOT_IMPLICIT_STEP;
+ }
+
+} //RootImplicitStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/SmallStepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/SmallStepImpl.java
new file mode 100644
index 00000000..4ee5d674
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/SmallStepImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ *
+ * An implementation of the model object 'Small Step '.
+ *
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class SmallStepImpl extends StepImpl implements SmallStep {
+ /**
+ *
+ *
+ * @generated
+ */
+ protected SmallStepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.SMALL_STEP;
+ }
+
+} //SmallStepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepImpl.java
new file mode 100644
index 00000000..001cd55a
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepImpl.java
@@ -0,0 +1,301 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.States.State;
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.gemoc.executionframework.engine.mse.impl.MSEOccurrenceImpl;
+
+/**
+ *
+ * An implementation of the model object 'Step '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.Steps.impl.StepImpl#getEndingState Ending State }
+ * {@link arduinoTrace.Steps.impl.StepImpl#getStartingState Starting State }
+ *
+ *
+ *
+ * @generated
+ */
+public abstract class StepImpl extends MSEOccurrenceImpl implements Step {
+ /**
+ * The cached value of the '{@link #getEndingState() Ending State }' reference.
+ *
+ *
+ * @see #getEndingState()
+ * @generated
+ * @ordered
+ */
+ protected State endingState;
+
+ /**
+ * The cached value of the '{@link #getStartingState() Starting State }' reference.
+ *
+ *
+ * @see #getStartingState()
+ * @generated
+ * @ordered
+ */
+ protected State startingState;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected StepImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return StepsPackage.Literals.STEP;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getEndingState() {
+ if (endingState != null && endingState.eIsProxy()) {
+ InternalEObject oldEndingState = (InternalEObject)endingState;
+ endingState = (State)eResolveProxy(oldEndingState);
+ if (endingState != oldEndingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.STEP__ENDING_STATE, oldEndingState, endingState));
+ }
+ }
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetEndingState() {
+ return endingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetEndingState(State newEndingState, NotificationChain msgs) {
+ State oldEndingState = endingState;
+ endingState = newEndingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.STEP__ENDING_STATE, oldEndingState, newEndingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setEndingState(State newEndingState) {
+ if (newEndingState != endingState) {
+ NotificationChain msgs = null;
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ if (newEndingState != null)
+ msgs = ((InternalEObject)newEndingState).eInverseAdd(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ msgs = basicSetEndingState(newEndingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.STEP__ENDING_STATE, newEndingState, newEndingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State getStartingState() {
+ if (startingState != null && startingState.eIsProxy()) {
+ InternalEObject oldStartingState = (InternalEObject)startingState;
+ startingState = (State)eResolveProxy(oldStartingState);
+ if (startingState != oldStartingState) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, StepsPackage.STEP__STARTING_STATE, oldStartingState, startingState));
+ }
+ }
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public State basicGetStartingState() {
+ return startingState;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public NotificationChain basicSetStartingState(State newStartingState, NotificationChain msgs) {
+ State oldStartingState = startingState;
+ startingState = newStartingState;
+ if (eNotificationRequired()) {
+ ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, StepsPackage.STEP__STARTING_STATE, oldStartingState, newStartingState);
+ if (msgs == null) msgs = notification; else msgs.add(notification);
+ }
+ return msgs;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public void setStartingState(State newStartingState) {
+ if (newStartingState != startingState) {
+ NotificationChain msgs = null;
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ if (newStartingState != null)
+ msgs = ((InternalEObject)newStartingState).eInverseAdd(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ msgs = basicSetStartingState(newStartingState, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, StepsPackage.STEP__STARTING_STATE, newStartingState, newStartingState));
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.STEP__ENDING_STATE:
+ if (endingState != null)
+ msgs = ((InternalEObject)endingState).eInverseRemove(this, StatesPackage.STATE__ENDED_STEPS, State.class, msgs);
+ return basicSetEndingState((State)otherEnd, msgs);
+ case StepsPackage.STEP__STARTING_STATE:
+ if (startingState != null)
+ msgs = ((InternalEObject)startingState).eInverseRemove(this, StatesPackage.STATE__STARTED_STEPS, State.class, msgs);
+ return basicSetStartingState((State)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case StepsPackage.STEP__ENDING_STATE:
+ return basicSetEndingState(null, msgs);
+ case StepsPackage.STEP__STARTING_STATE:
+ return basicSetStartingState(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case StepsPackage.STEP__ENDING_STATE:
+ if (resolve) return getEndingState();
+ return basicGetEndingState();
+ case StepsPackage.STEP__STARTING_STATE:
+ if (resolve) return getStartingState();
+ return basicGetStartingState();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case StepsPackage.STEP__ENDING_STATE:
+ setEndingState((State)newValue);
+ return;
+ case StepsPackage.STEP__STARTING_STATE:
+ setStartingState((State)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case StepsPackage.STEP__ENDING_STATE:
+ setEndingState((State)null);
+ return;
+ case StepsPackage.STEP__STARTING_STATE:
+ setStartingState((State)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case StepsPackage.STEP__ENDING_STATE:
+ return endingState != null;
+ case StepsPackage.STEP__STARTING_STATE:
+ return startingState != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //StepImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepsFactoryImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepsFactoryImpl.java
new file mode 100644
index 00000000..0b99220e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepsFactoryImpl.java
@@ -0,0 +1,216 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.Steps.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ *
+ * An implementation of the model Factory .
+ *
+ * @generated
+ */
+public class StepsFactoryImpl extends EFactoryImpl implements StepsFactory {
+ /**
+ * Creates the default factory implementation.
+ *
+ *
+ * @generated
+ */
+ public static StepsFactory init() {
+ try {
+ StepsFactory theStepsFactory = (StepsFactory)EPackage.Registry.INSTANCE.getEFactory(StepsPackage.eNS_URI);
+ if (theStepsFactory != null) {
+ return theStepsFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new StepsFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ *
+ *
+ * @generated
+ */
+ public StepsFactoryImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE: return createArduino_Delay_Execute();
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP: return createArduino_Delay_Execute_ImplicitStep();
+ case StepsPackage.ARDUINO_IF_EXECUTE: return createArduino_If_Execute();
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP: return createArduino_If_Execute_ImplicitStep();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE: return createArduino_ModuleAssignment_Execute();
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP: return createArduino_ModuleAssignment_Execute_ImplicitStep();
+ case StepsPackage.ARDUINO_PROJECT_SETUP: return createArduino_Project_Setup();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE: return createArduino_VariableAssignment_Execute();
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP: return createArduino_VariableAssignment_Execute_ImplicitStep();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE: return createArduino_VariableDeclaration_Execute();
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP: return createArduino_VariableDeclaration_Execute_ImplicitStep();
+ case StepsPackage.ROOT_IMPLICIT_STEP: return createRootImplicitStep();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_Delay_Execute createArduino_Delay_Execute() {
+ Arduino_Delay_ExecuteImpl arduino_Delay_Execute = new Arduino_Delay_ExecuteImpl();
+ return arduino_Delay_Execute;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_Delay_Execute_ImplicitStep createArduino_Delay_Execute_ImplicitStep() {
+ Arduino_Delay_Execute_ImplicitStepImpl arduino_Delay_Execute_ImplicitStep = new Arduino_Delay_Execute_ImplicitStepImpl();
+ return arduino_Delay_Execute_ImplicitStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_If_Execute createArduino_If_Execute() {
+ Arduino_If_ExecuteImpl arduino_If_Execute = new Arduino_If_ExecuteImpl();
+ return arduino_If_Execute;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_If_Execute_ImplicitStep createArduino_If_Execute_ImplicitStep() {
+ Arduino_If_Execute_ImplicitStepImpl arduino_If_Execute_ImplicitStep = new Arduino_If_Execute_ImplicitStepImpl();
+ return arduino_If_Execute_ImplicitStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_ModuleAssignment_Execute createArduino_ModuleAssignment_Execute() {
+ Arduino_ModuleAssignment_ExecuteImpl arduino_ModuleAssignment_Execute = new Arduino_ModuleAssignment_ExecuteImpl();
+ return arduino_ModuleAssignment_Execute;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_ModuleAssignment_Execute_ImplicitStep createArduino_ModuleAssignment_Execute_ImplicitStep() {
+ Arduino_ModuleAssignment_Execute_ImplicitStepImpl arduino_ModuleAssignment_Execute_ImplicitStep = new Arduino_ModuleAssignment_Execute_ImplicitStepImpl();
+ return arduino_ModuleAssignment_Execute_ImplicitStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_Project_Setup createArduino_Project_Setup() {
+ Arduino_Project_SetupImpl arduino_Project_Setup = new Arduino_Project_SetupImpl();
+ return arduino_Project_Setup;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_VariableAssignment_Execute createArduino_VariableAssignment_Execute() {
+ Arduino_VariableAssignment_ExecuteImpl arduino_VariableAssignment_Execute = new Arduino_VariableAssignment_ExecuteImpl();
+ return arduino_VariableAssignment_Execute;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_VariableAssignment_Execute_ImplicitStep createArduino_VariableAssignment_Execute_ImplicitStep() {
+ Arduino_VariableAssignment_Execute_ImplicitStepImpl arduino_VariableAssignment_Execute_ImplicitStep = new Arduino_VariableAssignment_Execute_ImplicitStepImpl();
+ return arduino_VariableAssignment_Execute_ImplicitStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_VariableDeclaration_Execute createArduino_VariableDeclaration_Execute() {
+ Arduino_VariableDeclaration_ExecuteImpl arduino_VariableDeclaration_Execute = new Arduino_VariableDeclaration_ExecuteImpl();
+ return arduino_VariableDeclaration_Execute;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Arduino_VariableDeclaration_Execute_ImplicitStep createArduino_VariableDeclaration_Execute_ImplicitStep() {
+ Arduino_VariableDeclaration_Execute_ImplicitStepImpl arduino_VariableDeclaration_Execute_ImplicitStep = new Arduino_VariableDeclaration_Execute_ImplicitStepImpl();
+ return arduino_VariableDeclaration_Execute_ImplicitStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public RootImplicitStep createRootImplicitStep() {
+ RootImplicitStepImpl rootImplicitStep = new RootImplicitStepImpl();
+ return rootImplicitStep;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public StepsPackage getStepsPackage() {
+ return (StepsPackage)getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static StepsPackage getPackage() {
+ return StepsPackage.eINSTANCE;
+ }
+
+} //StepsFactoryImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepsPackageImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepsPackageImpl.java
new file mode 100644
index 00000000..cd8764ee
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/impl/StepsPackageImpl.java
@@ -0,0 +1,791 @@
+/**
+ */
+package arduinoTrace.Steps.impl;
+
+import arduinoTrace.ArduinoTracePackage;
+
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.impl.ArduinoPackageImpl;
+
+import arduinoTrace.States.impl.StatesPackageImpl;
+
+import arduinoTrace.Steps.Arduino_Delay_Execute;
+import arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_Delay_Execute_ImplicitStep;
+import arduinoTrace.Steps.Arduino_If_Execute;
+import arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_If_Execute_ImplicitStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_ImplicitStep;
+import arduinoTrace.Steps.Arduino_Project_Setup;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute_ImplicitStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_ImplicitStep;
+import arduinoTrace.Steps.BigStep;
+import arduinoTrace.Steps.RootImplicitStep;
+import arduinoTrace.Steps.SmallStep;
+import arduinoTrace.Steps.Step;
+import arduinoTrace.Steps.StepsFactory;
+import arduinoTrace.Steps.StepsPackage;
+
+import arduinoTrace.impl.ArduinoTracePackageImpl;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model Package .
+ *
+ * @generated
+ */
+public class StepsPackageImpl extends EPackageImpl implements StepsPackage {
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_Delay_ExecuteEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_Delay_Execute_AbstractSubStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_Delay_Execute_ImplicitStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_If_ExecuteEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_If_Execute_AbstractSubStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_If_Execute_ImplicitStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_ModuleAssignment_ExecuteEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_ModuleAssignment_Execute_AbstractSubStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_ModuleAssignment_Execute_ImplicitStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_Project_SetupEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_VariableAssignment_ExecuteEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_VariableAssignment_Execute_AbstractSubStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_VariableAssignment_Execute_ImplicitStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_VariableDeclaration_ExecuteEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_VariableDeclaration_Execute_AbstractSubStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass arduino_VariableDeclaration_Execute_ImplicitStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass bigStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass rootImplicitStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass smallStepEClass = null;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass stepEClass = null;
+
+ /**
+ * Creates an instance of the model Package , registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ *
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see arduinoTrace.Steps.StepsPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private StepsPackageImpl() {
+ super(eNS_URI, StepsFactory.eINSTANCE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
This method is used to initialize {@link StepsPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static StepsPackage init() {
+ if (isInited) return (StepsPackage)EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI);
+
+ // Obtain or create and register package
+ StepsPackageImpl theStepsPackage = (StepsPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof StepsPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new StepsPackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ ArduinoPackage.eINSTANCE.eClass();
+ MsePackage.eINSTANCE.eClass();
+
+ // Obtain or create and register interdependencies
+ ArduinoTracePackageImpl theArduinoTracePackage = (ArduinoTracePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI) instanceof ArduinoTracePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI) : ArduinoTracePackage.eINSTANCE);
+ StatesPackageImpl theStatesPackage = (StatesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI) instanceof StatesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI) : StatesPackage.eINSTANCE);
+ ArduinoPackageImpl theArduinoPackage_1 = (ArduinoPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI) instanceof ArduinoPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI) : arduinoTrace.States.arduino.ArduinoPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ theStepsPackage.createPackageContents();
+ theArduinoTracePackage.createPackageContents();
+ theStatesPackage.createPackageContents();
+ theArduinoPackage_1.createPackageContents();
+
+ // Initialize created meta-data
+ theStepsPackage.initializePackageContents();
+ theArduinoTracePackage.initializePackageContents();
+ theStatesPackage.initializePackageContents();
+ theArduinoPackage_1.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theStepsPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(StepsPackage.eNS_URI, theStepsPackage);
+ return theStepsPackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_Delay_Execute() {
+ return arduino_Delay_ExecuteEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduino_Delay_Execute_SubSteps() {
+ return (EReference)arduino_Delay_ExecuteEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EOperation getArduino_Delay_Execute__GetCaller() {
+ return arduino_Delay_ExecuteEClass.getEOperations().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_Delay_Execute_AbstractSubStep() {
+ return arduino_Delay_Execute_AbstractSubStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_Delay_Execute_ImplicitStep() {
+ return arduino_Delay_Execute_ImplicitStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_If_Execute() {
+ return arduino_If_ExecuteEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduino_If_Execute_SubSteps() {
+ return (EReference)arduino_If_ExecuteEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EOperation getArduino_If_Execute__GetCaller() {
+ return arduino_If_ExecuteEClass.getEOperations().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_If_Execute_AbstractSubStep() {
+ return arduino_If_Execute_AbstractSubStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_If_Execute_ImplicitStep() {
+ return arduino_If_Execute_ImplicitStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_ModuleAssignment_Execute() {
+ return arduino_ModuleAssignment_ExecuteEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduino_ModuleAssignment_Execute_SubSteps() {
+ return (EReference)arduino_ModuleAssignment_ExecuteEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EOperation getArduino_ModuleAssignment_Execute__GetCaller() {
+ return arduino_ModuleAssignment_ExecuteEClass.getEOperations().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_ModuleAssignment_Execute_AbstractSubStep() {
+ return arduino_ModuleAssignment_Execute_AbstractSubStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_ModuleAssignment_Execute_ImplicitStep() {
+ return arduino_ModuleAssignment_Execute_ImplicitStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_Project_Setup() {
+ return arduino_Project_SetupEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EOperation getArduino_Project_Setup__GetCaller() {
+ return arduino_Project_SetupEClass.getEOperations().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_VariableAssignment_Execute() {
+ return arduino_VariableAssignment_ExecuteEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduino_VariableAssignment_Execute_SubSteps() {
+ return (EReference)arduino_VariableAssignment_ExecuteEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EOperation getArduino_VariableAssignment_Execute__GetCaller() {
+ return arduino_VariableAssignment_ExecuteEClass.getEOperations().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_VariableAssignment_Execute_AbstractSubStep() {
+ return arduino_VariableAssignment_Execute_AbstractSubStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_VariableAssignment_Execute_ImplicitStep() {
+ return arduino_VariableAssignment_Execute_ImplicitStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_VariableDeclaration_Execute() {
+ return arduino_VariableDeclaration_ExecuteEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getArduino_VariableDeclaration_Execute_SubSteps() {
+ return (EReference)arduino_VariableDeclaration_ExecuteEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EOperation getArduino_VariableDeclaration_Execute__GetCaller() {
+ return arduino_VariableDeclaration_ExecuteEClass.getEOperations().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_VariableDeclaration_Execute_AbstractSubStep() {
+ return arduino_VariableDeclaration_Execute_AbstractSubStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getArduino_VariableDeclaration_Execute_ImplicitStep() {
+ return arduino_VariableDeclaration_Execute_ImplicitStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getBigStep() {
+ return bigStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getRootImplicitStep() {
+ return rootImplicitStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getSmallStep() {
+ return smallStepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getStep() {
+ return stepEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getStep_EndingState() {
+ return (EReference)stepEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getStep_StartingState() {
+ return (EReference)stepEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public StepsFactory getStepsFactory() {
+ return (StepsFactory)getEFactoryInstance();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ arduino_Delay_ExecuteEClass = createEClass(ARDUINO_DELAY_EXECUTE);
+ createEReference(arduino_Delay_ExecuteEClass, ARDUINO_DELAY_EXECUTE__SUB_STEPS);
+ createEOperation(arduino_Delay_ExecuteEClass, ARDUINO_DELAY_EXECUTE___GET_CALLER);
+
+ arduino_Delay_Execute_AbstractSubStepEClass = createEClass(ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP);
+
+ arduino_Delay_Execute_ImplicitStepEClass = createEClass(ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP);
+
+ arduino_If_ExecuteEClass = createEClass(ARDUINO_IF_EXECUTE);
+ createEReference(arduino_If_ExecuteEClass, ARDUINO_IF_EXECUTE__SUB_STEPS);
+ createEOperation(arduino_If_ExecuteEClass, ARDUINO_IF_EXECUTE___GET_CALLER);
+
+ arduino_If_Execute_AbstractSubStepEClass = createEClass(ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP);
+
+ arduino_If_Execute_ImplicitStepEClass = createEClass(ARDUINO_IF_EXECUTE_IMPLICIT_STEP);
+
+ arduino_ModuleAssignment_ExecuteEClass = createEClass(ARDUINO_MODULE_ASSIGNMENT_EXECUTE);
+ createEReference(arduino_ModuleAssignment_ExecuteEClass, ARDUINO_MODULE_ASSIGNMENT_EXECUTE__SUB_STEPS);
+ createEOperation(arduino_ModuleAssignment_ExecuteEClass, ARDUINO_MODULE_ASSIGNMENT_EXECUTE___GET_CALLER);
+
+ arduino_ModuleAssignment_Execute_AbstractSubStepEClass = createEClass(ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP);
+
+ arduino_ModuleAssignment_Execute_ImplicitStepEClass = createEClass(ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP);
+
+ arduino_Project_SetupEClass = createEClass(ARDUINO_PROJECT_SETUP);
+ createEOperation(arduino_Project_SetupEClass, ARDUINO_PROJECT_SETUP___GET_CALLER);
+
+ arduino_VariableAssignment_ExecuteEClass = createEClass(ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE);
+ createEReference(arduino_VariableAssignment_ExecuteEClass, ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE__SUB_STEPS);
+ createEOperation(arduino_VariableAssignment_ExecuteEClass, ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE___GET_CALLER);
+
+ arduino_VariableAssignment_Execute_AbstractSubStepEClass = createEClass(ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP);
+
+ arduino_VariableAssignment_Execute_ImplicitStepEClass = createEClass(ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP);
+
+ arduino_VariableDeclaration_ExecuteEClass = createEClass(ARDUINO_VARIABLE_DECLARATION_EXECUTE);
+ createEReference(arduino_VariableDeclaration_ExecuteEClass, ARDUINO_VARIABLE_DECLARATION_EXECUTE__SUB_STEPS);
+ createEOperation(arduino_VariableDeclaration_ExecuteEClass, ARDUINO_VARIABLE_DECLARATION_EXECUTE___GET_CALLER);
+
+ arduino_VariableDeclaration_Execute_AbstractSubStepEClass = createEClass(ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP);
+
+ arduino_VariableDeclaration_Execute_ImplicitStepEClass = createEClass(ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP);
+
+ bigStepEClass = createEClass(BIG_STEP);
+
+ rootImplicitStepEClass = createEClass(ROOT_IMPLICIT_STEP);
+
+ smallStepEClass = createEClass(SMALL_STEP);
+
+ stepEClass = createEClass(STEP);
+ createEReference(stepEClass, STEP__ENDING_STATE);
+ createEReference(stepEClass, STEP__STARTING_STATE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ ArduinoPackage theArduinoPackage = (ArduinoPackage)EPackage.Registry.INSTANCE.getEPackage(ArduinoPackage.eNS_URI);
+ MsePackage theMsePackage = (MsePackage)EPackage.Registry.INSTANCE.getEPackage(MsePackage.eNS_URI);
+ StatesPackage theStatesPackage = (StatesPackage)EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ arduino_Delay_ExecuteEClass.getESuperTypes().add(this.getArduino_Delay_Execute_AbstractSubStep());
+ arduino_Delay_ExecuteEClass.getESuperTypes().add(this.getArduino_If_Execute_AbstractSubStep());
+ arduino_Delay_ExecuteEClass.getESuperTypes().add(this.getArduino_ModuleAssignment_Execute_AbstractSubStep());
+ arduino_Delay_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableAssignment_Execute_AbstractSubStep());
+ arduino_Delay_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableDeclaration_Execute_AbstractSubStep());
+ arduino_Delay_ExecuteEClass.getESuperTypes().add(this.getBigStep());
+ arduino_Delay_Execute_ImplicitStepEClass.getESuperTypes().add(this.getArduino_Delay_Execute_AbstractSubStep());
+ arduino_Delay_Execute_ImplicitStepEClass.getESuperTypes().add(this.getSmallStep());
+ arduino_If_ExecuteEClass.getESuperTypes().add(this.getArduino_Delay_Execute_AbstractSubStep());
+ arduino_If_ExecuteEClass.getESuperTypes().add(this.getArduino_If_Execute_AbstractSubStep());
+ arduino_If_ExecuteEClass.getESuperTypes().add(this.getArduino_ModuleAssignment_Execute_AbstractSubStep());
+ arduino_If_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableAssignment_Execute_AbstractSubStep());
+ arduino_If_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableDeclaration_Execute_AbstractSubStep());
+ arduino_If_ExecuteEClass.getESuperTypes().add(this.getBigStep());
+ arduino_If_Execute_ImplicitStepEClass.getESuperTypes().add(this.getArduino_If_Execute_AbstractSubStep());
+ arduino_If_Execute_ImplicitStepEClass.getESuperTypes().add(this.getSmallStep());
+ arduino_ModuleAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_Delay_Execute_AbstractSubStep());
+ arduino_ModuleAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_If_Execute_AbstractSubStep());
+ arduino_ModuleAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_ModuleAssignment_Execute_AbstractSubStep());
+ arduino_ModuleAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableAssignment_Execute_AbstractSubStep());
+ arduino_ModuleAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableDeclaration_Execute_AbstractSubStep());
+ arduino_ModuleAssignment_ExecuteEClass.getESuperTypes().add(this.getBigStep());
+ arduino_ModuleAssignment_Execute_ImplicitStepEClass.getESuperTypes().add(this.getArduino_ModuleAssignment_Execute_AbstractSubStep());
+ arduino_ModuleAssignment_Execute_ImplicitStepEClass.getESuperTypes().add(this.getSmallStep());
+ arduino_Project_SetupEClass.getESuperTypes().add(this.getSmallStep());
+ arduino_VariableAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_Delay_Execute_AbstractSubStep());
+ arduino_VariableAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_If_Execute_AbstractSubStep());
+ arduino_VariableAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_ModuleAssignment_Execute_AbstractSubStep());
+ arduino_VariableAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableAssignment_Execute_AbstractSubStep());
+ arduino_VariableAssignment_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableDeclaration_Execute_AbstractSubStep());
+ arduino_VariableAssignment_ExecuteEClass.getESuperTypes().add(this.getBigStep());
+ arduino_VariableAssignment_Execute_ImplicitStepEClass.getESuperTypes().add(this.getArduino_VariableAssignment_Execute_AbstractSubStep());
+ arduino_VariableAssignment_Execute_ImplicitStepEClass.getESuperTypes().add(this.getSmallStep());
+ arduino_VariableDeclaration_ExecuteEClass.getESuperTypes().add(this.getArduino_Delay_Execute_AbstractSubStep());
+ arduino_VariableDeclaration_ExecuteEClass.getESuperTypes().add(this.getArduino_If_Execute_AbstractSubStep());
+ arduino_VariableDeclaration_ExecuteEClass.getESuperTypes().add(this.getArduino_ModuleAssignment_Execute_AbstractSubStep());
+ arduino_VariableDeclaration_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableAssignment_Execute_AbstractSubStep());
+ arduino_VariableDeclaration_ExecuteEClass.getESuperTypes().add(this.getArduino_VariableDeclaration_Execute_AbstractSubStep());
+ arduino_VariableDeclaration_ExecuteEClass.getESuperTypes().add(this.getBigStep());
+ arduino_VariableDeclaration_Execute_ImplicitStepEClass.getESuperTypes().add(this.getArduino_VariableDeclaration_Execute_AbstractSubStep());
+ arduino_VariableDeclaration_Execute_ImplicitStepEClass.getESuperTypes().add(this.getSmallStep());
+ bigStepEClass.getESuperTypes().add(this.getStep());
+ rootImplicitStepEClass.getESuperTypes().add(this.getSmallStep());
+ smallStepEClass.getESuperTypes().add(this.getStep());
+ stepEClass.getESuperTypes().add(theMsePackage.getMSEOccurrence());
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(arduino_Delay_ExecuteEClass, Arduino_Delay_Execute.class, "Arduino_Delay_Execute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getArduino_Delay_Execute_SubSteps(), this.getArduino_Delay_Execute_AbstractSubStep(), null, "subSteps", null, 0, -1, Arduino_Delay_Execute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getArduino_Delay_Execute__GetCaller(), theArduinoPackage.getDelay(), "getCaller", 1, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(arduino_Delay_Execute_AbstractSubStepEClass, Arduino_Delay_Execute_AbstractSubStep.class, "Arduino_Delay_Execute_AbstractSubStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_Delay_Execute_ImplicitStepEClass, Arduino_Delay_Execute_ImplicitStep.class, "Arduino_Delay_Execute_ImplicitStep", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_If_ExecuteEClass, Arduino_If_Execute.class, "Arduino_If_Execute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getArduino_If_Execute_SubSteps(), this.getArduino_If_Execute_AbstractSubStep(), null, "subSteps", null, 0, -1, Arduino_If_Execute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getArduino_If_Execute__GetCaller(), theArduinoPackage.getIf(), "getCaller", 1, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(arduino_If_Execute_AbstractSubStepEClass, Arduino_If_Execute_AbstractSubStep.class, "Arduino_If_Execute_AbstractSubStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_If_Execute_ImplicitStepEClass, Arduino_If_Execute_ImplicitStep.class, "Arduino_If_Execute_ImplicitStep", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_ModuleAssignment_ExecuteEClass, Arduino_ModuleAssignment_Execute.class, "Arduino_ModuleAssignment_Execute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getArduino_ModuleAssignment_Execute_SubSteps(), this.getArduino_ModuleAssignment_Execute_AbstractSubStep(), null, "subSteps", null, 0, -1, Arduino_ModuleAssignment_Execute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getArduino_ModuleAssignment_Execute__GetCaller(), theArduinoPackage.getModuleAssignment(), "getCaller", 1, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(arduino_ModuleAssignment_Execute_AbstractSubStepEClass, Arduino_ModuleAssignment_Execute_AbstractSubStep.class, "Arduino_ModuleAssignment_Execute_AbstractSubStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_ModuleAssignment_Execute_ImplicitStepEClass, Arduino_ModuleAssignment_Execute_ImplicitStep.class, "Arduino_ModuleAssignment_Execute_ImplicitStep", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_Project_SetupEClass, Arduino_Project_Setup.class, "Arduino_Project_Setup", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEOperation(getArduino_Project_Setup__GetCaller(), theArduinoPackage.getProject(), "getCaller", 1, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(arduino_VariableAssignment_ExecuteEClass, Arduino_VariableAssignment_Execute.class, "Arduino_VariableAssignment_Execute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getArduino_VariableAssignment_Execute_SubSteps(), this.getArduino_VariableAssignment_Execute_AbstractSubStep(), null, "subSteps", null, 0, -1, Arduino_VariableAssignment_Execute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getArduino_VariableAssignment_Execute__GetCaller(), theArduinoPackage.getVariableAssignment(), "getCaller", 1, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(arduino_VariableAssignment_Execute_AbstractSubStepEClass, Arduino_VariableAssignment_Execute_AbstractSubStep.class, "Arduino_VariableAssignment_Execute_AbstractSubStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_VariableAssignment_Execute_ImplicitStepEClass, Arduino_VariableAssignment_Execute_ImplicitStep.class, "Arduino_VariableAssignment_Execute_ImplicitStep", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_VariableDeclaration_ExecuteEClass, Arduino_VariableDeclaration_Execute.class, "Arduino_VariableDeclaration_Execute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getArduino_VariableDeclaration_Execute_SubSteps(), this.getArduino_VariableDeclaration_Execute_AbstractSubStep(), null, "subSteps", null, 0, -1, Arduino_VariableDeclaration_Execute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEOperation(getArduino_VariableDeclaration_Execute__GetCaller(), theArduinoPackage.getVariableDeclaration(), "getCaller", 1, 1, IS_UNIQUE, IS_ORDERED);
+
+ initEClass(arduino_VariableDeclaration_Execute_AbstractSubStepEClass, Arduino_VariableDeclaration_Execute_AbstractSubStep.class, "Arduino_VariableDeclaration_Execute_AbstractSubStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(arduino_VariableDeclaration_Execute_ImplicitStepEClass, Arduino_VariableDeclaration_Execute_ImplicitStep.class, "Arduino_VariableDeclaration_Execute_ImplicitStep", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(bigStepEClass, BigStep.class, "BigStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(rootImplicitStepEClass, RootImplicitStep.class, "RootImplicitStep", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(smallStepEClass, SmallStep.class, "SmallStep", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(stepEClass, Step.class, "Step", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getStep_EndingState(), theStatesPackage.getState(), theStatesPackage.getState_EndedSteps(), "endingState", null, 0, 1, Step.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getStep_StartingState(), theStatesPackage.getState(), theStatesPackage.getState_StartedSteps(), "startingState", null, 1, 1, Step.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ }
+
+} //StepsPackageImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/util/StepsAdapterFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/util/StepsAdapterFactory.java
new file mode 100644
index 00000000..65080fd6
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/util/StepsAdapterFactory.java
@@ -0,0 +1,482 @@
+/**
+ */
+package arduinoTrace.Steps.util;
+
+import arduinoTrace.Steps.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+
+/**
+ *
+ * The Adapter Factory for the model.
+ * It provides an adapter createXXX
method for each class of the model.
+ *
+ * @see arduinoTrace.Steps.StepsPackage
+ * @generated
+ */
+public class StepsAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ *
+ *
+ * @generated
+ */
+ protected static StepsPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ *
+ * @generated
+ */
+ public StepsAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = StepsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ *
+ * This implementation returns true
if the object is either the model's package or is an instance object of the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ *
+ * @generated
+ */
+ protected StepsSwitch modelSwitch =
+ new StepsSwitch() {
+ @Override
+ public Adapter caseArduino_Delay_Execute(Arduino_Delay_Execute object) {
+ return createArduino_Delay_ExecuteAdapter();
+ }
+ @Override
+ public Adapter caseArduino_Delay_Execute_AbstractSubStep(Arduino_Delay_Execute_AbstractSubStep object) {
+ return createArduino_Delay_Execute_AbstractSubStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_Delay_Execute_ImplicitStep(Arduino_Delay_Execute_ImplicitStep object) {
+ return createArduino_Delay_Execute_ImplicitStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_If_Execute(Arduino_If_Execute object) {
+ return createArduino_If_ExecuteAdapter();
+ }
+ @Override
+ public Adapter caseArduino_If_Execute_AbstractSubStep(Arduino_If_Execute_AbstractSubStep object) {
+ return createArduino_If_Execute_AbstractSubStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_If_Execute_ImplicitStep(Arduino_If_Execute_ImplicitStep object) {
+ return createArduino_If_Execute_ImplicitStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_ModuleAssignment_Execute(Arduino_ModuleAssignment_Execute object) {
+ return createArduino_ModuleAssignment_ExecuteAdapter();
+ }
+ @Override
+ public Adapter caseArduino_ModuleAssignment_Execute_AbstractSubStep(Arduino_ModuleAssignment_Execute_AbstractSubStep object) {
+ return createArduino_ModuleAssignment_Execute_AbstractSubStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_ModuleAssignment_Execute_ImplicitStep(Arduino_ModuleAssignment_Execute_ImplicitStep object) {
+ return createArduino_ModuleAssignment_Execute_ImplicitStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_Project_Setup(Arduino_Project_Setup object) {
+ return createArduino_Project_SetupAdapter();
+ }
+ @Override
+ public Adapter caseArduino_VariableAssignment_Execute(Arduino_VariableAssignment_Execute object) {
+ return createArduino_VariableAssignment_ExecuteAdapter();
+ }
+ @Override
+ public Adapter caseArduino_VariableAssignment_Execute_AbstractSubStep(Arduino_VariableAssignment_Execute_AbstractSubStep object) {
+ return createArduino_VariableAssignment_Execute_AbstractSubStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_VariableAssignment_Execute_ImplicitStep(Arduino_VariableAssignment_Execute_ImplicitStep object) {
+ return createArduino_VariableAssignment_Execute_ImplicitStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_VariableDeclaration_Execute(Arduino_VariableDeclaration_Execute object) {
+ return createArduino_VariableDeclaration_ExecuteAdapter();
+ }
+ @Override
+ public Adapter caseArduino_VariableDeclaration_Execute_AbstractSubStep(Arduino_VariableDeclaration_Execute_AbstractSubStep object) {
+ return createArduino_VariableDeclaration_Execute_AbstractSubStepAdapter();
+ }
+ @Override
+ public Adapter caseArduino_VariableDeclaration_Execute_ImplicitStep(Arduino_VariableDeclaration_Execute_ImplicitStep object) {
+ return createArduino_VariableDeclaration_Execute_ImplicitStepAdapter();
+ }
+ @Override
+ public Adapter caseBigStep(BigStep object) {
+ return createBigStepAdapter();
+ }
+ @Override
+ public Adapter caseRootImplicitStep(RootImplicitStep object) {
+ return createRootImplicitStepAdapter();
+ }
+ @Override
+ public Adapter caseSmallStep(SmallStep object) {
+ return createSmallStepAdapter();
+ }
+ @Override
+ public Adapter caseStep(Step object) {
+ return createStepAdapter();
+ }
+ @Override
+ public Adapter caseMSEOccurrence(MSEOccurrence object) {
+ return createMSEOccurrenceAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ *
+ * @param target the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_Delay_Execute Arduino Delay Execute }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute
+ * @generated
+ */
+ public Adapter createArduino_Delay_ExecuteAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep Arduino Delay Execute Abstract Sub Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute_AbstractSubStep
+ * @generated
+ */
+ public Adapter createArduino_Delay_Execute_AbstractSubStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_Delay_Execute_ImplicitStep Arduino Delay Execute Implicit Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_Delay_Execute_ImplicitStep
+ * @generated
+ */
+ public Adapter createArduino_Delay_Execute_ImplicitStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_If_Execute Arduino If Execute }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_If_Execute
+ * @generated
+ */
+ public Adapter createArduino_If_ExecuteAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep Arduino If Execute Abstract Sub Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_If_Execute_AbstractSubStep
+ * @generated
+ */
+ public Adapter createArduino_If_Execute_AbstractSubStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_If_Execute_ImplicitStep Arduino If Execute Implicit Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_If_Execute_ImplicitStep
+ * @generated
+ */
+ public Adapter createArduino_If_Execute_ImplicitStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute Arduino Module Assignment Execute }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute
+ * @generated
+ */
+ public Adapter createArduino_ModuleAssignment_ExecuteAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep Arduino Module Assignment Execute Abstract Sub Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_AbstractSubStep
+ * @generated
+ */
+ public Adapter createArduino_ModuleAssignment_Execute_AbstractSubStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_ImplicitStep Arduino Module Assignment Execute Implicit Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_ModuleAssignment_Execute_ImplicitStep
+ * @generated
+ */
+ public Adapter createArduino_ModuleAssignment_Execute_ImplicitStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_Project_Setup Arduino Project Setup }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_Project_Setup
+ * @generated
+ */
+ public Adapter createArduino_Project_SetupAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute Arduino Variable Assignment Execute }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute
+ * @generated
+ */
+ public Adapter createArduino_VariableAssignment_ExecuteAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep Arduino Variable Assignment Execute Abstract Sub Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute_AbstractSubStep
+ * @generated
+ */
+ public Adapter createArduino_VariableAssignment_Execute_AbstractSubStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute_ImplicitStep Arduino Variable Assignment Execute Implicit Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_VariableAssignment_Execute_ImplicitStep
+ * @generated
+ */
+ public Adapter createArduino_VariableAssignment_Execute_ImplicitStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute Arduino Variable Declaration Execute }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute
+ * @generated
+ */
+ public Adapter createArduino_VariableDeclaration_ExecuteAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep Arduino Variable Declaration Execute Abstract Sub Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_AbstractSubStep
+ * @generated
+ */
+ public Adapter createArduino_VariableDeclaration_Execute_AbstractSubStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_ImplicitStep Arduino Variable Declaration Execute Implicit Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Arduino_VariableDeclaration_Execute_ImplicitStep
+ * @generated
+ */
+ public Adapter createArduino_VariableDeclaration_Execute_ImplicitStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.BigStep Big Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.BigStep
+ * @generated
+ */
+ public Adapter createBigStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.RootImplicitStep Root Implicit Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.RootImplicitStep
+ * @generated
+ */
+ public Adapter createRootImplicitStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.SmallStep Small Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.SmallStep
+ * @generated
+ */
+ public Adapter createSmallStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Steps.Step Step }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Steps.Step
+ * @generated
+ */
+ public Adapter createStepAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.gemoc.executionframework.engine.mse.MSEOccurrence MSE Occurrence }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see org.gemoc.executionframework.engine.mse.MSEOccurrence
+ * @generated
+ */
+ public Adapter createMSEOccurrenceAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ *
+ * This default implementation returns null.
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //StepsAdapterFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/util/StepsSwitch.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/util/StepsSwitch.java
new file mode 100644
index 00000000..46dd6e46
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Steps/util/StepsSwitch.java
@@ -0,0 +1,597 @@
+/**
+ */
+package arduinoTrace.Steps.util;
+
+import arduinoTrace.Steps.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.gemoc.executionframework.engine.mse.MSEOccurrence;
+
+/**
+ *
+ * The Switch for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ *
+ * @see arduinoTrace.Steps.StepsPackage
+ * @generated
+ */
+public class StepsSwitch extends Switch {
+ /**
+ * The cached model package
+ *
+ *
+ * @generated
+ */
+ protected static StepsPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ *
+ * @generated
+ */
+ public StepsSwitch() {
+ if (modelPackage == null) {
+ modelPackage = StepsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ *
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that result.
+ *
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case StepsPackage.ARDUINO_DELAY_EXECUTE: {
+ Arduino_Delay_Execute arduino_Delay_Execute = (Arduino_Delay_Execute)theEObject;
+ T result = caseArduino_Delay_Execute(arduino_Delay_Execute);
+ if (result == null) result = caseArduino_Delay_Execute_AbstractSubStep(arduino_Delay_Execute);
+ if (result == null) result = caseArduino_If_Execute_AbstractSubStep(arduino_Delay_Execute);
+ if (result == null) result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_Delay_Execute);
+ if (result == null) result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_Delay_Execute);
+ if (result == null) result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_Delay_Execute);
+ if (result == null) result = caseBigStep(arduino_Delay_Execute);
+ if (result == null) result = caseStep(arduino_Delay_Execute);
+ if (result == null) result = caseMSEOccurrence(arduino_Delay_Execute);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_ABSTRACT_SUB_STEP: {
+ Arduino_Delay_Execute_AbstractSubStep arduino_Delay_Execute_AbstractSubStep = (Arduino_Delay_Execute_AbstractSubStep)theEObject;
+ T result = caseArduino_Delay_Execute_AbstractSubStep(arduino_Delay_Execute_AbstractSubStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_DELAY_EXECUTE_IMPLICIT_STEP: {
+ Arduino_Delay_Execute_ImplicitStep arduino_Delay_Execute_ImplicitStep = (Arduino_Delay_Execute_ImplicitStep)theEObject;
+ T result = caseArduino_Delay_Execute_ImplicitStep(arduino_Delay_Execute_ImplicitStep);
+ if (result == null) result = caseArduino_Delay_Execute_AbstractSubStep(arduino_Delay_Execute_ImplicitStep);
+ if (result == null) result = caseSmallStep(arduino_Delay_Execute_ImplicitStep);
+ if (result == null) result = caseStep(arduino_Delay_Execute_ImplicitStep);
+ if (result == null) result = caseMSEOccurrence(arduino_Delay_Execute_ImplicitStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_IF_EXECUTE: {
+ Arduino_If_Execute arduino_If_Execute = (Arduino_If_Execute)theEObject;
+ T result = caseArduino_If_Execute(arduino_If_Execute);
+ if (result == null) result = caseArduino_Delay_Execute_AbstractSubStep(arduino_If_Execute);
+ if (result == null) result = caseArduino_If_Execute_AbstractSubStep(arduino_If_Execute);
+ if (result == null) result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_If_Execute);
+ if (result == null) result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_If_Execute);
+ if (result == null) result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_If_Execute);
+ if (result == null) result = caseBigStep(arduino_If_Execute);
+ if (result == null) result = caseStep(arduino_If_Execute);
+ if (result == null) result = caseMSEOccurrence(arduino_If_Execute);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_IF_EXECUTE_ABSTRACT_SUB_STEP: {
+ Arduino_If_Execute_AbstractSubStep arduino_If_Execute_AbstractSubStep = (Arduino_If_Execute_AbstractSubStep)theEObject;
+ T result = caseArduino_If_Execute_AbstractSubStep(arduino_If_Execute_AbstractSubStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_IF_EXECUTE_IMPLICIT_STEP: {
+ Arduino_If_Execute_ImplicitStep arduino_If_Execute_ImplicitStep = (Arduino_If_Execute_ImplicitStep)theEObject;
+ T result = caseArduino_If_Execute_ImplicitStep(arduino_If_Execute_ImplicitStep);
+ if (result == null) result = caseArduino_If_Execute_AbstractSubStep(arduino_If_Execute_ImplicitStep);
+ if (result == null) result = caseSmallStep(arduino_If_Execute_ImplicitStep);
+ if (result == null) result = caseStep(arduino_If_Execute_ImplicitStep);
+ if (result == null) result = caseMSEOccurrence(arduino_If_Execute_ImplicitStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE: {
+ Arduino_ModuleAssignment_Execute arduino_ModuleAssignment_Execute = (Arduino_ModuleAssignment_Execute)theEObject;
+ T result = caseArduino_ModuleAssignment_Execute(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseArduino_Delay_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseArduino_If_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseBigStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseStep(arduino_ModuleAssignment_Execute);
+ if (result == null) result = caseMSEOccurrence(arduino_ModuleAssignment_Execute);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP: {
+ Arduino_ModuleAssignment_Execute_AbstractSubStep arduino_ModuleAssignment_Execute_AbstractSubStep = (Arduino_ModuleAssignment_Execute_AbstractSubStep)theEObject;
+ T result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute_AbstractSubStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_MODULE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP: {
+ Arduino_ModuleAssignment_Execute_ImplicitStep arduino_ModuleAssignment_Execute_ImplicitStep = (Arduino_ModuleAssignment_Execute_ImplicitStep)theEObject;
+ T result = caseArduino_ModuleAssignment_Execute_ImplicitStep(arduino_ModuleAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_ModuleAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseSmallStep(arduino_ModuleAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseStep(arduino_ModuleAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseMSEOccurrence(arduino_ModuleAssignment_Execute_ImplicitStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_PROJECT_SETUP: {
+ Arduino_Project_Setup arduino_Project_Setup = (Arduino_Project_Setup)theEObject;
+ T result = caseArduino_Project_Setup(arduino_Project_Setup);
+ if (result == null) result = caseSmallStep(arduino_Project_Setup);
+ if (result == null) result = caseStep(arduino_Project_Setup);
+ if (result == null) result = caseMSEOccurrence(arduino_Project_Setup);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE: {
+ Arduino_VariableAssignment_Execute arduino_VariableAssignment_Execute = (Arduino_VariableAssignment_Execute)theEObject;
+ T result = caseArduino_VariableAssignment_Execute(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseArduino_Delay_Execute_AbstractSubStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseArduino_If_Execute_AbstractSubStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseBigStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseStep(arduino_VariableAssignment_Execute);
+ if (result == null) result = caseMSEOccurrence(arduino_VariableAssignment_Execute);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_ABSTRACT_SUB_STEP: {
+ Arduino_VariableAssignment_Execute_AbstractSubStep arduino_VariableAssignment_Execute_AbstractSubStep = (Arduino_VariableAssignment_Execute_AbstractSubStep)theEObject;
+ T result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_VariableAssignment_Execute_AbstractSubStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_IMPLICIT_STEP: {
+ Arduino_VariableAssignment_Execute_ImplicitStep arduino_VariableAssignment_Execute_ImplicitStep = (Arduino_VariableAssignment_Execute_ImplicitStep)theEObject;
+ T result = caseArduino_VariableAssignment_Execute_ImplicitStep(arduino_VariableAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_VariableAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseSmallStep(arduino_VariableAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseStep(arduino_VariableAssignment_Execute_ImplicitStep);
+ if (result == null) result = caseMSEOccurrence(arduino_VariableAssignment_Execute_ImplicitStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE: {
+ Arduino_VariableDeclaration_Execute arduino_VariableDeclaration_Execute = (Arduino_VariableDeclaration_Execute)theEObject;
+ T result = caseArduino_VariableDeclaration_Execute(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseArduino_Delay_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseArduino_If_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseArduino_ModuleAssignment_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseArduino_VariableAssignment_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseBigStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseStep(arduino_VariableDeclaration_Execute);
+ if (result == null) result = caseMSEOccurrence(arduino_VariableDeclaration_Execute);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_ABSTRACT_SUB_STEP: {
+ Arduino_VariableDeclaration_Execute_AbstractSubStep arduino_VariableDeclaration_Execute_AbstractSubStep = (Arduino_VariableDeclaration_Execute_AbstractSubStep)theEObject;
+ T result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute_AbstractSubStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ARDUINO_VARIABLE_DECLARATION_EXECUTE_IMPLICIT_STEP: {
+ Arduino_VariableDeclaration_Execute_ImplicitStep arduino_VariableDeclaration_Execute_ImplicitStep = (Arduino_VariableDeclaration_Execute_ImplicitStep)theEObject;
+ T result = caseArduino_VariableDeclaration_Execute_ImplicitStep(arduino_VariableDeclaration_Execute_ImplicitStep);
+ if (result == null) result = caseArduino_VariableDeclaration_Execute_AbstractSubStep(arduino_VariableDeclaration_Execute_ImplicitStep);
+ if (result == null) result = caseSmallStep(arduino_VariableDeclaration_Execute_ImplicitStep);
+ if (result == null) result = caseStep(arduino_VariableDeclaration_Execute_ImplicitStep);
+ if (result == null) result = caseMSEOccurrence(arduino_VariableDeclaration_Execute_ImplicitStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.BIG_STEP: {
+ BigStep bigStep = (BigStep)theEObject;
+ T result = caseBigStep(bigStep);
+ if (result == null) result = caseStep(bigStep);
+ if (result == null) result = caseMSEOccurrence(bigStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.ROOT_IMPLICIT_STEP: {
+ RootImplicitStep rootImplicitStep = (RootImplicitStep)theEObject;
+ T result = caseRootImplicitStep(rootImplicitStep);
+ if (result == null) result = caseSmallStep(rootImplicitStep);
+ if (result == null) result = caseStep(rootImplicitStep);
+ if (result == null) result = caseMSEOccurrence(rootImplicitStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.SMALL_STEP: {
+ SmallStep smallStep = (SmallStep)theEObject;
+ T result = caseSmallStep(smallStep);
+ if (result == null) result = caseStep(smallStep);
+ if (result == null) result = caseMSEOccurrence(smallStep);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case StepsPackage.STEP: {
+ Step step = (Step)theEObject;
+ T result = caseStep(step);
+ if (result == null) result = caseMSEOccurrence(step);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Delay Execute '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Delay Execute '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_Delay_Execute(Arduino_Delay_Execute object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Delay Execute Abstract Sub Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Delay Execute Abstract Sub Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_Delay_Execute_AbstractSubStep(Arduino_Delay_Execute_AbstractSubStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Delay Execute Implicit Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Delay Execute Implicit Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_Delay_Execute_ImplicitStep(Arduino_Delay_Execute_ImplicitStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino If Execute '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino If Execute '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_If_Execute(Arduino_If_Execute object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino If Execute Abstract Sub Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino If Execute Abstract Sub Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_If_Execute_AbstractSubStep(Arduino_If_Execute_AbstractSubStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino If Execute Implicit Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino If Execute Implicit Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_If_Execute_ImplicitStep(Arduino_If_Execute_ImplicitStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Module Assignment Execute '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Module Assignment Execute '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_ModuleAssignment_Execute(Arduino_ModuleAssignment_Execute object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Module Assignment Execute Abstract Sub Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Module Assignment Execute Abstract Sub Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_ModuleAssignment_Execute_AbstractSubStep(Arduino_ModuleAssignment_Execute_AbstractSubStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Module Assignment Execute Implicit Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Module Assignment Execute Implicit Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_ModuleAssignment_Execute_ImplicitStep(Arduino_ModuleAssignment_Execute_ImplicitStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Project Setup '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Project Setup '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_Project_Setup(Arduino_Project_Setup object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Variable Assignment Execute '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Variable Assignment Execute '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_VariableAssignment_Execute(Arduino_VariableAssignment_Execute object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Variable Assignment Execute Abstract Sub Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Variable Assignment Execute Abstract Sub Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_VariableAssignment_Execute_AbstractSubStep(Arduino_VariableAssignment_Execute_AbstractSubStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Variable Assignment Execute Implicit Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Variable Assignment Execute Implicit Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_VariableAssignment_Execute_ImplicitStep(Arduino_VariableAssignment_Execute_ImplicitStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Variable Declaration Execute '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Variable Declaration Execute '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_VariableDeclaration_Execute(Arduino_VariableDeclaration_Execute object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Variable Declaration Execute Abstract Sub Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Variable Declaration Execute Abstract Sub Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_VariableDeclaration_Execute_AbstractSubStep(Arduino_VariableDeclaration_Execute_AbstractSubStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Arduino Variable Declaration Execute Implicit Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Arduino Variable Declaration Execute Implicit Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseArduino_VariableDeclaration_Execute_ImplicitStep(Arduino_VariableDeclaration_Execute_ImplicitStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Big Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Big Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseBigStep(BigStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Root Implicit Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Root Implicit Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRootImplicitStep(RootImplicitStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Small Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Small Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseSmallStep(SmallStep object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Step '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Step '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseStep(Step object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'MSE Occurrence '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'MSE Occurrence '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMSEOccurrence(MSEOccurrence object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //StepsSwitch
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Trace.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Trace.java
new file mode 100644
index 00000000..a749940e
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/Trace.java
@@ -0,0 +1,262 @@
+/**
+ */
+package arduinoTrace;
+
+import arduinoTrace.States.State;
+
+import arduinoTrace.States.arduino.TracedAnalogPin;
+import arduinoTrace.States.arduino.TracedBooleanVariable;
+import arduinoTrace.States.arduino.TracedDigitalPin;
+import arduinoTrace.States.arduino.TracedIntegerVariable;
+import arduinoTrace.States.arduino.TracedSharedResource;
+
+import arduinoTrace.Steps.Arduino_Delay_Execute;
+import arduinoTrace.Steps.Arduino_If_Execute;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute;
+import arduinoTrace.Steps.Arduino_Project_Setup;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute;
+import arduinoTrace.Steps.Step;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * A representation of the model object 'Trace '.
+ *
+ *
+ *
+ * The following features are supported:
+ *
+ * {@link arduinoTrace.Trace#getArduino_Delay_Execute_Sequence Arduino Delay Execute Sequence }
+ * {@link arduinoTrace.Trace#getArduino_If_Execute_Sequence Arduino If Execute Sequence }
+ * {@link arduinoTrace.Trace#getArduino_ModuleAssignment_Execute_Sequence Arduino Module Assignment Execute Sequence }
+ * {@link arduinoTrace.Trace#getArduino_Project_Setup_Sequence Arduino Project Setup Sequence }
+ * {@link arduinoTrace.Trace#getArduino_VariableAssignment_Execute_Sequence Arduino Variable Assignment Execute Sequence }
+ * {@link arduinoTrace.Trace#getArduino_VariableDeclaration_Execute_Sequence Arduino Variable Declaration Execute Sequence }
+ * {@link arduinoTrace.Trace#getArduino_tracedAnalogPins Arduino traced Analog Pins }
+ * {@link arduinoTrace.Trace#getArduino_tracedBooleanVariables Arduino traced Boolean Variables }
+ * {@link arduinoTrace.Trace#getArduino_tracedDigitalPins Arduino traced Digital Pins }
+ * {@link arduinoTrace.Trace#getArduino_tracedIntegerVariables Arduino traced Integer Variables }
+ * {@link arduinoTrace.Trace#getArduino_tracedSharedResources Arduino traced Shared Resources }
+ * {@link arduinoTrace.Trace#getRootSteps Root Steps }
+ * {@link arduinoTrace.Trace#getStatesTrace States Trace }
+ *
+ *
+ *
+ * @see arduinoTrace.ArduinoTracePackage#getTrace()
+ * @model
+ * @generated
+ */
+public interface Trace extends EObject {
+ /**
+ * Returns the value of the 'Arduino Delay Execute Sequence ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_Delay_Execute}.
+ *
+ *
+ * If the meaning of the 'Arduino Delay Execute Sequence ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino Delay Execute Sequence ' reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_Delay_Execute_Sequence()
+ * @model
+ * @generated
+ */
+ EList getArduino_Delay_Execute_Sequence();
+
+ /**
+ * Returns the value of the 'Arduino If Execute Sequence ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_If_Execute}.
+ *
+ *
+ * If the meaning of the 'Arduino If Execute Sequence ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino If Execute Sequence ' reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_If_Execute_Sequence()
+ * @model
+ * @generated
+ */
+ EList getArduino_If_Execute_Sequence();
+
+ /**
+ * Returns the value of the 'Arduino Module Assignment Execute Sequence ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_ModuleAssignment_Execute}.
+ *
+ *
+ * If the meaning of the 'Arduino Module Assignment Execute Sequence ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino Module Assignment Execute Sequence ' reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_ModuleAssignment_Execute_Sequence()
+ * @model
+ * @generated
+ */
+ EList getArduino_ModuleAssignment_Execute_Sequence();
+
+ /**
+ * Returns the value of the 'Arduino Project Setup Sequence ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_Project_Setup}.
+ *
+ *
+ * If the meaning of the 'Arduino Project Setup Sequence ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino Project Setup Sequence ' reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_Project_Setup_Sequence()
+ * @model
+ * @generated
+ */
+ EList getArduino_Project_Setup_Sequence();
+
+ /**
+ * Returns the value of the 'Arduino Variable Assignment Execute Sequence ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_VariableAssignment_Execute}.
+ *
+ *
+ * If the meaning of the 'Arduino Variable Assignment Execute Sequence ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino Variable Assignment Execute Sequence ' reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_VariableAssignment_Execute_Sequence()
+ * @model
+ * @generated
+ */
+ EList getArduino_VariableAssignment_Execute_Sequence();
+
+ /**
+ * Returns the value of the 'Arduino Variable Declaration Execute Sequence ' reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Arduino_VariableDeclaration_Execute}.
+ *
+ *
+ * If the meaning of the 'Arduino Variable Declaration Execute Sequence ' reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino Variable Declaration Execute Sequence ' reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_VariableDeclaration_Execute_Sequence()
+ * @model
+ * @generated
+ */
+ EList getArduino_VariableDeclaration_Execute_Sequence();
+
+ /**
+ * Returns the value of the 'Arduino traced Analog Pins ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.arduino.TracedAnalogPin}.
+ *
+ *
+ * If the meaning of the 'Arduino traced Analog Pins ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino traced Analog Pins ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_tracedAnalogPins()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList getArduino_tracedAnalogPins();
+
+ /**
+ * Returns the value of the 'Arduino traced Boolean Variables ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.arduino.TracedBooleanVariable}.
+ *
+ *
+ * If the meaning of the 'Arduino traced Boolean Variables ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino traced Boolean Variables ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_tracedBooleanVariables()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList getArduino_tracedBooleanVariables();
+
+ /**
+ * Returns the value of the 'Arduino traced Digital Pins ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.arduino.TracedDigitalPin}.
+ *
+ *
+ * If the meaning of the 'Arduino traced Digital Pins ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino traced Digital Pins ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_tracedDigitalPins()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList getArduino_tracedDigitalPins();
+
+ /**
+ * Returns the value of the 'Arduino traced Integer Variables ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.arduino.TracedIntegerVariable}.
+ *
+ *
+ * If the meaning of the 'Arduino traced Integer Variables ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino traced Integer Variables ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_tracedIntegerVariables()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList getArduino_tracedIntegerVariables();
+
+ /**
+ * Returns the value of the 'Arduino traced Shared Resources ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.arduino.TracedSharedResource}.
+ *
+ *
+ * If the meaning of the 'Arduino traced Shared Resources ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Arduino traced Shared Resources ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_Arduino_tracedSharedResources()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList getArduino_tracedSharedResources();
+
+ /**
+ * Returns the value of the 'Root Steps ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.Steps.Step}.
+ *
+ *
+ * If the meaning of the 'Root Steps ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'Root Steps ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_RootSteps()
+ * @model containment="true"
+ * @generated
+ */
+ EList getRootSteps();
+
+ /**
+ * Returns the value of the 'States Trace ' containment reference list.
+ * The list contents are of type {@link arduinoTrace.States.State}.
+ *
+ *
+ * If the meaning of the 'States Trace ' containment reference list isn't clear,
+ * there really should be more of a description here...
+ *
+ *
+ * @return the value of the 'States Trace ' containment reference list.
+ * @see arduinoTrace.ArduinoTracePackage#getTrace_StatesTrace()
+ * @model containment="true"
+ * @generated
+ */
+ EList getStatesTrace();
+
+} // Trace
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/ArduinoTraceFactoryImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/ArduinoTraceFactoryImpl.java
new file mode 100644
index 00000000..f05d3be0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/ArduinoTraceFactoryImpl.java
@@ -0,0 +1,95 @@
+/**
+ */
+package arduinoTrace.impl;
+
+import arduinoTrace.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ *
+ * An implementation of the model Factory .
+ *
+ * @generated
+ */
+public class ArduinoTraceFactoryImpl extends EFactoryImpl implements ArduinoTraceFactory {
+ /**
+ * Creates the default factory implementation.
+ *
+ *
+ * @generated
+ */
+ public static ArduinoTraceFactory init() {
+ try {
+ ArduinoTraceFactory theArduinoTraceFactory = (ArduinoTraceFactory)EPackage.Registry.INSTANCE.getEFactory(ArduinoTracePackage.eNS_URI);
+ if (theArduinoTraceFactory != null) {
+ return theArduinoTraceFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ArduinoTraceFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ *
+ *
+ * @generated
+ */
+ public ArduinoTraceFactoryImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ArduinoTracePackage.TRACE: return createTrace();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public Trace createTrace() {
+ TraceImpl trace = new TraceImpl();
+ return trace;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoTracePackage getArduinoTracePackage() {
+ return (ArduinoTracePackage)getEPackage();
+ }
+
+ /**
+ *
+ *
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ArduinoTracePackage getPackage() {
+ return ArduinoTracePackage.eINSTANCE;
+ }
+
+} //ArduinoTraceFactoryImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/ArduinoTracePackageImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/ArduinoTracePackageImpl.java
new file mode 100644
index 00000000..ac6b18d4
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/ArduinoTracePackageImpl.java
@@ -0,0 +1,348 @@
+/**
+ */
+package arduinoTrace.impl;
+
+import arduinoTrace.ArduinoTraceFactory;
+import arduinoTrace.ArduinoTracePackage;
+
+import arduinoTrace.States.StatesPackage;
+
+import arduinoTrace.States.arduino.impl.ArduinoPackageImpl;
+
+import arduinoTrace.States.impl.StatesPackageImpl;
+
+import arduinoTrace.Steps.StepsPackage;
+
+import arduinoTrace.Steps.impl.StepsPackageImpl;
+
+import arduinoTrace.Trace;
+
+import fr.obeo.dsl.arduino.ArduinoPackage;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.gemoc.executionframework.engine.mse.MsePackage;
+
+/**
+ *
+ * An implementation of the model Package .
+ *
+ * @generated
+ */
+public class ArduinoTracePackageImpl extends EPackageImpl implements ArduinoTracePackage {
+ /**
+ *
+ *
+ * @generated
+ */
+ private EClass traceEClass = null;
+
+ /**
+ * Creates an instance of the model Package , registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ *
+ *
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see arduinoTrace.ArduinoTracePackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ArduinoTracePackageImpl() {
+ super(eNS_URI, ArduinoTraceFactory.eINSTANCE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the Package for this model, and for any others upon which it depends.
+ *
+ *
This method is used to initialize {@link ArduinoTracePackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ *
+ *
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ArduinoTracePackage init() {
+ if (isInited) return (ArduinoTracePackage)EPackage.Registry.INSTANCE.getEPackage(ArduinoTracePackage.eNS_URI);
+
+ // Obtain or create and register package
+ ArduinoTracePackageImpl theArduinoTracePackage = (ArduinoTracePackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ArduinoTracePackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ArduinoTracePackageImpl());
+
+ isInited = true;
+
+ // Initialize simple dependencies
+ ArduinoPackage.eINSTANCE.eClass();
+ MsePackage.eINSTANCE.eClass();
+
+ // Obtain or create and register interdependencies
+ StepsPackageImpl theStepsPackage = (StepsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI) instanceof StepsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI) : StepsPackage.eINSTANCE);
+ StatesPackageImpl theStatesPackage = (StatesPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI) instanceof StatesPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI) : StatesPackage.eINSTANCE);
+ ArduinoPackageImpl theArduinoPackage_1 = (ArduinoPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI) instanceof ArduinoPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI) : arduinoTrace.States.arduino.ArduinoPackage.eINSTANCE);
+
+ // Create package meta-data objects
+ theArduinoTracePackage.createPackageContents();
+ theStepsPackage.createPackageContents();
+ theStatesPackage.createPackageContents();
+ theArduinoPackage_1.createPackageContents();
+
+ // Initialize created meta-data
+ theArduinoTracePackage.initializePackageContents();
+ theStepsPackage.initializePackageContents();
+ theStatesPackage.initializePackageContents();
+ theArduinoPackage_1.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theArduinoTracePackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ArduinoTracePackage.eNS_URI, theArduinoTracePackage);
+ return theArduinoTracePackage;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EClass getTrace() {
+ return traceEClass;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_Delay_Execute_Sequence() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_If_Execute_Sequence() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_ModuleAssignment_Execute_Sequence() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_Project_Setup_Sequence() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_VariableAssignment_Execute_Sequence() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_VariableDeclaration_Execute_Sequence() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_tracedAnalogPins() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_tracedBooleanVariables() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_tracedDigitalPins() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(8);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_tracedIntegerVariables() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(9);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_Arduino_tracedSharedResources() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(10);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_RootSteps() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(11);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EReference getTrace_StatesTrace() {
+ return (EReference)traceEClass.getEStructuralFeatures().get(12);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public ArduinoTraceFactory getArduinoTraceFactory() {
+ return (ArduinoTraceFactory)getEFactoryInstance();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ traceEClass = createEClass(TRACE);
+ createEReference(traceEClass, TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE);
+ createEReference(traceEClass, TRACE__ARDUINO_IF_EXECUTE_SEQUENCE);
+ createEReference(traceEClass, TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE);
+ createEReference(traceEClass, TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE);
+ createEReference(traceEClass, TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE);
+ createEReference(traceEClass, TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE);
+ createEReference(traceEClass, TRACE__ARDUINO_TRACED_ANALOG_PINS);
+ createEReference(traceEClass, TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES);
+ createEReference(traceEClass, TRACE__ARDUINO_TRACED_DIGITAL_PINS);
+ createEReference(traceEClass, TRACE__ARDUINO_TRACED_INTEGER_VARIABLES);
+ createEReference(traceEClass, TRACE__ARDUINO_TRACED_SHARED_RESOURCES);
+ createEReference(traceEClass, TRACE__ROOT_STEPS);
+ createEReference(traceEClass, TRACE__STATES_TRACE);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ *
+ *
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Obtain other dependent packages
+ StepsPackage theStepsPackage = (StepsPackage)EPackage.Registry.INSTANCE.getEPackage(StepsPackage.eNS_URI);
+ StatesPackage theStatesPackage = (StatesPackage)EPackage.Registry.INSTANCE.getEPackage(StatesPackage.eNS_URI);
+ arduinoTrace.States.arduino.ArduinoPackage theArduinoPackage_1 = (arduinoTrace.States.arduino.ArduinoPackage)EPackage.Registry.INSTANCE.getEPackage(arduinoTrace.States.arduino.ArduinoPackage.eNS_URI);
+
+ // Add subpackages
+ getESubpackages().add(theStepsPackage);
+ getESubpackages().add(theStatesPackage);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(traceEClass, Trace.class, "Trace", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getTrace_Arduino_Delay_Execute_Sequence(), theStepsPackage.getArduino_Delay_Execute(), null, "Arduino_Delay_Execute_Sequence", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_Arduino_If_Execute_Sequence(), theStepsPackage.getArduino_If_Execute(), null, "Arduino_If_Execute_Sequence", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_Arduino_ModuleAssignment_Execute_Sequence(), theStepsPackage.getArduino_ModuleAssignment_Execute(), null, "Arduino_ModuleAssignment_Execute_Sequence", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_Arduino_Project_Setup_Sequence(), theStepsPackage.getArduino_Project_Setup(), null, "Arduino_Project_Setup_Sequence", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_Arduino_VariableAssignment_Execute_Sequence(), theStepsPackage.getArduino_VariableAssignment_Execute(), null, "Arduino_VariableAssignment_Execute_Sequence", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_Arduino_VariableDeclaration_Execute_Sequence(), theStepsPackage.getArduino_VariableDeclaration_Execute(), null, "Arduino_VariableDeclaration_Execute_Sequence", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_Arduino_tracedAnalogPins(), theArduinoPackage_1.getTracedAnalogPin(), null, "arduino_tracedAnalogPins", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getTrace_Arduino_tracedBooleanVariables(), theArduinoPackage_1.getTracedBooleanVariable(), null, "arduino_tracedBooleanVariables", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getTrace_Arduino_tracedDigitalPins(), theArduinoPackage_1.getTracedDigitalPin(), null, "arduino_tracedDigitalPins", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getTrace_Arduino_tracedIntegerVariables(), theArduinoPackage_1.getTracedIntegerVariable(), null, "arduino_tracedIntegerVariables", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getTrace_Arduino_tracedSharedResources(), theArduinoPackage_1.getTracedSharedResource(), null, "arduino_tracedSharedResources", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getTrace_RootSteps(), theStepsPackage.getStep(), null, "rootSteps", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEReference(getTrace_StatesTrace(), theStatesPackage.getState(), null, "statesTrace", null, 0, -1, Trace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //ArduinoTracePackageImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/TraceImpl.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/TraceImpl.java
new file mode 100644
index 00000000..739ae65d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/impl/TraceImpl.java
@@ -0,0 +1,589 @@
+/**
+ */
+package arduinoTrace.impl;
+
+import arduinoTrace.ArduinoTracePackage;
+
+import arduinoTrace.States.State;
+
+import arduinoTrace.States.arduino.TracedAnalogPin;
+import arduinoTrace.States.arduino.TracedBooleanVariable;
+import arduinoTrace.States.arduino.TracedDigitalPin;
+import arduinoTrace.States.arduino.TracedIntegerVariable;
+import arduinoTrace.States.arduino.TracedSharedResource;
+
+import arduinoTrace.Steps.Arduino_Delay_Execute;
+import arduinoTrace.Steps.Arduino_If_Execute;
+import arduinoTrace.Steps.Arduino_ModuleAssignment_Execute;
+import arduinoTrace.Steps.Arduino_Project_Setup;
+import arduinoTrace.Steps.Arduino_VariableAssignment_Execute;
+import arduinoTrace.Steps.Arduino_VariableDeclaration_Execute;
+import arduinoTrace.Steps.Step;
+
+import arduinoTrace.Trace;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ *
+ * An implementation of the model object 'Trace '.
+ *
+ *
+ * The following features are implemented:
+ *
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_Delay_Execute_Sequence Arduino Delay Execute Sequence }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_If_Execute_Sequence Arduino If Execute Sequence }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_ModuleAssignment_Execute_Sequence Arduino Module Assignment Execute Sequence }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_Project_Setup_Sequence Arduino Project Setup Sequence }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_VariableAssignment_Execute_Sequence Arduino Variable Assignment Execute Sequence }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_VariableDeclaration_Execute_Sequence Arduino Variable Declaration Execute Sequence }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_tracedAnalogPins Arduino traced Analog Pins }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_tracedBooleanVariables Arduino traced Boolean Variables }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_tracedDigitalPins Arduino traced Digital Pins }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_tracedIntegerVariables Arduino traced Integer Variables }
+ * {@link arduinoTrace.impl.TraceImpl#getArduino_tracedSharedResources Arduino traced Shared Resources }
+ * {@link arduinoTrace.impl.TraceImpl#getRootSteps Root Steps }
+ * {@link arduinoTrace.impl.TraceImpl#getStatesTrace States Trace }
+ *
+ *
+ *
+ * @generated
+ */
+public class TraceImpl extends MinimalEObjectImpl.Container implements Trace {
+ /**
+ * The cached value of the '{@link #getArduino_Delay_Execute_Sequence() Arduino Delay Execute Sequence }' reference list.
+ *
+ *
+ * @see #getArduino_Delay_Execute_Sequence()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_Delay_Execute_Sequence;
+
+ /**
+ * The cached value of the '{@link #getArduino_If_Execute_Sequence() Arduino If Execute Sequence }' reference list.
+ *
+ *
+ * @see #getArduino_If_Execute_Sequence()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_If_Execute_Sequence;
+
+ /**
+ * The cached value of the '{@link #getArduino_ModuleAssignment_Execute_Sequence() Arduino Module Assignment Execute Sequence }' reference list.
+ *
+ *
+ * @see #getArduino_ModuleAssignment_Execute_Sequence()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_ModuleAssignment_Execute_Sequence;
+
+ /**
+ * The cached value of the '{@link #getArduino_Project_Setup_Sequence() Arduino Project Setup Sequence }' reference list.
+ *
+ *
+ * @see #getArduino_Project_Setup_Sequence()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_Project_Setup_Sequence;
+
+ /**
+ * The cached value of the '{@link #getArduino_VariableAssignment_Execute_Sequence() Arduino Variable Assignment Execute Sequence }' reference list.
+ *
+ *
+ * @see #getArduino_VariableAssignment_Execute_Sequence()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_VariableAssignment_Execute_Sequence;
+
+ /**
+ * The cached value of the '{@link #getArduino_VariableDeclaration_Execute_Sequence() Arduino Variable Declaration Execute Sequence }' reference list.
+ *
+ *
+ * @see #getArduino_VariableDeclaration_Execute_Sequence()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_VariableDeclaration_Execute_Sequence;
+
+ /**
+ * The cached value of the '{@link #getArduino_tracedAnalogPins() Arduino traced Analog Pins }' containment reference list.
+ *
+ *
+ * @see #getArduino_tracedAnalogPins()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_tracedAnalogPins;
+
+ /**
+ * The cached value of the '{@link #getArduino_tracedBooleanVariables() Arduino traced Boolean Variables }' containment reference list.
+ *
+ *
+ * @see #getArduino_tracedBooleanVariables()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_tracedBooleanVariables;
+
+ /**
+ * The cached value of the '{@link #getArduino_tracedDigitalPins() Arduino traced Digital Pins }' containment reference list.
+ *
+ *
+ * @see #getArduino_tracedDigitalPins()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_tracedDigitalPins;
+
+ /**
+ * The cached value of the '{@link #getArduino_tracedIntegerVariables() Arduino traced Integer Variables }' containment reference list.
+ *
+ *
+ * @see #getArduino_tracedIntegerVariables()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_tracedIntegerVariables;
+
+ /**
+ * The cached value of the '{@link #getArduino_tracedSharedResources() Arduino traced Shared Resources }' containment reference list.
+ *
+ *
+ * @see #getArduino_tracedSharedResources()
+ * @generated
+ * @ordered
+ */
+ protected EList arduino_tracedSharedResources;
+
+ /**
+ * The cached value of the '{@link #getRootSteps() Root Steps }' containment reference list.
+ *
+ *
+ * @see #getRootSteps()
+ * @generated
+ * @ordered
+ */
+ protected EList rootSteps;
+
+ /**
+ * The cached value of the '{@link #getStatesTrace() States Trace }' containment reference list.
+ *
+ *
+ * @see #getStatesTrace()
+ * @generated
+ * @ordered
+ */
+ protected EList statesTrace;
+
+ /**
+ *
+ *
+ * @generated
+ */
+ protected TraceImpl() {
+ super();
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ArduinoTracePackage.Literals.TRACE;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_Delay_Execute_Sequence() {
+ if (arduino_Delay_Execute_Sequence == null) {
+ arduino_Delay_Execute_Sequence = new EObjectResolvingEList(Arduino_Delay_Execute.class, this, ArduinoTracePackage.TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE);
+ }
+ return arduino_Delay_Execute_Sequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_If_Execute_Sequence() {
+ if (arduino_If_Execute_Sequence == null) {
+ arduino_If_Execute_Sequence = new EObjectResolvingEList(Arduino_If_Execute.class, this, ArduinoTracePackage.TRACE__ARDUINO_IF_EXECUTE_SEQUENCE);
+ }
+ return arduino_If_Execute_Sequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_ModuleAssignment_Execute_Sequence() {
+ if (arduino_ModuleAssignment_Execute_Sequence == null) {
+ arduino_ModuleAssignment_Execute_Sequence = new EObjectResolvingEList(Arduino_ModuleAssignment_Execute.class, this, ArduinoTracePackage.TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE);
+ }
+ return arduino_ModuleAssignment_Execute_Sequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_Project_Setup_Sequence() {
+ if (arduino_Project_Setup_Sequence == null) {
+ arduino_Project_Setup_Sequence = new EObjectResolvingEList(Arduino_Project_Setup.class, this, ArduinoTracePackage.TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE);
+ }
+ return arduino_Project_Setup_Sequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_VariableAssignment_Execute_Sequence() {
+ if (arduino_VariableAssignment_Execute_Sequence == null) {
+ arduino_VariableAssignment_Execute_Sequence = new EObjectResolvingEList(Arduino_VariableAssignment_Execute.class, this, ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE);
+ }
+ return arduino_VariableAssignment_Execute_Sequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_VariableDeclaration_Execute_Sequence() {
+ if (arduino_VariableDeclaration_Execute_Sequence == null) {
+ arduino_VariableDeclaration_Execute_Sequence = new EObjectResolvingEList(Arduino_VariableDeclaration_Execute.class, this, ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE);
+ }
+ return arduino_VariableDeclaration_Execute_Sequence;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_tracedAnalogPins() {
+ if (arduino_tracedAnalogPins == null) {
+ arduino_tracedAnalogPins = new EObjectContainmentEList(TracedAnalogPin.class, this, ArduinoTracePackage.TRACE__ARDUINO_TRACED_ANALOG_PINS);
+ }
+ return arduino_tracedAnalogPins;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_tracedBooleanVariables() {
+ if (arduino_tracedBooleanVariables == null) {
+ arduino_tracedBooleanVariables = new EObjectContainmentEList(TracedBooleanVariable.class, this, ArduinoTracePackage.TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES);
+ }
+ return arduino_tracedBooleanVariables;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_tracedDigitalPins() {
+ if (arduino_tracedDigitalPins == null) {
+ arduino_tracedDigitalPins = new EObjectContainmentEList(TracedDigitalPin.class, this, ArduinoTracePackage.TRACE__ARDUINO_TRACED_DIGITAL_PINS);
+ }
+ return arduino_tracedDigitalPins;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_tracedIntegerVariables() {
+ if (arduino_tracedIntegerVariables == null) {
+ arduino_tracedIntegerVariables = new EObjectContainmentEList(TracedIntegerVariable.class, this, ArduinoTracePackage.TRACE__ARDUINO_TRACED_INTEGER_VARIABLES);
+ }
+ return arduino_tracedIntegerVariables;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getArduino_tracedSharedResources() {
+ if (arduino_tracedSharedResources == null) {
+ arduino_tracedSharedResources = new EObjectContainmentEList(TracedSharedResource.class, this, ArduinoTracePackage.TRACE__ARDUINO_TRACED_SHARED_RESOURCES);
+ }
+ return arduino_tracedSharedResources;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getRootSteps() {
+ if (rootSteps == null) {
+ rootSteps = new EObjectContainmentEList(Step.class, this, ArduinoTracePackage.TRACE__ROOT_STEPS);
+ }
+ return rootSteps;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ public EList getStatesTrace() {
+ if (statesTrace == null) {
+ statesTrace = new EObjectContainmentEList(State.class, this, ArduinoTracePackage.TRACE__STATES_TRACE);
+ }
+ return statesTrace;
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_ANALOG_PINS:
+ return ((InternalEList>)getArduino_tracedAnalogPins()).basicRemove(otherEnd, msgs);
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES:
+ return ((InternalEList>)getArduino_tracedBooleanVariables()).basicRemove(otherEnd, msgs);
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_DIGITAL_PINS:
+ return ((InternalEList>)getArduino_tracedDigitalPins()).basicRemove(otherEnd, msgs);
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_INTEGER_VARIABLES:
+ return ((InternalEList>)getArduino_tracedIntegerVariables()).basicRemove(otherEnd, msgs);
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_SHARED_RESOURCES:
+ return ((InternalEList>)getArduino_tracedSharedResources()).basicRemove(otherEnd, msgs);
+ case ArduinoTracePackage.TRACE__ROOT_STEPS:
+ return ((InternalEList>)getRootSteps()).basicRemove(otherEnd, msgs);
+ case ArduinoTracePackage.TRACE__STATES_TRACE:
+ return ((InternalEList>)getStatesTrace()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ArduinoTracePackage.TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE:
+ return getArduino_Delay_Execute_Sequence();
+ case ArduinoTracePackage.TRACE__ARDUINO_IF_EXECUTE_SEQUENCE:
+ return getArduino_If_Execute_Sequence();
+ case ArduinoTracePackage.TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ return getArduino_ModuleAssignment_Execute_Sequence();
+ case ArduinoTracePackage.TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE:
+ return getArduino_Project_Setup_Sequence();
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ return getArduino_VariableAssignment_Execute_Sequence();
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE:
+ return getArduino_VariableDeclaration_Execute_Sequence();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_ANALOG_PINS:
+ return getArduino_tracedAnalogPins();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES:
+ return getArduino_tracedBooleanVariables();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_DIGITAL_PINS:
+ return getArduino_tracedDigitalPins();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_INTEGER_VARIABLES:
+ return getArduino_tracedIntegerVariables();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_SHARED_RESOURCES:
+ return getArduino_tracedSharedResources();
+ case ArduinoTracePackage.TRACE__ROOT_STEPS:
+ return getRootSteps();
+ case ArduinoTracePackage.TRACE__STATES_TRACE:
+ return getStatesTrace();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ArduinoTracePackage.TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE:
+ getArduino_Delay_Execute_Sequence().clear();
+ getArduino_Delay_Execute_Sequence().addAll((Collection extends Arduino_Delay_Execute>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_IF_EXECUTE_SEQUENCE:
+ getArduino_If_Execute_Sequence().clear();
+ getArduino_If_Execute_Sequence().addAll((Collection extends Arduino_If_Execute>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ getArduino_ModuleAssignment_Execute_Sequence().clear();
+ getArduino_ModuleAssignment_Execute_Sequence().addAll((Collection extends Arduino_ModuleAssignment_Execute>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE:
+ getArduino_Project_Setup_Sequence().clear();
+ getArduino_Project_Setup_Sequence().addAll((Collection extends Arduino_Project_Setup>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ getArduino_VariableAssignment_Execute_Sequence().clear();
+ getArduino_VariableAssignment_Execute_Sequence().addAll((Collection extends Arduino_VariableAssignment_Execute>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE:
+ getArduino_VariableDeclaration_Execute_Sequence().clear();
+ getArduino_VariableDeclaration_Execute_Sequence().addAll((Collection extends Arduino_VariableDeclaration_Execute>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_ANALOG_PINS:
+ getArduino_tracedAnalogPins().clear();
+ getArduino_tracedAnalogPins().addAll((Collection extends TracedAnalogPin>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES:
+ getArduino_tracedBooleanVariables().clear();
+ getArduino_tracedBooleanVariables().addAll((Collection extends TracedBooleanVariable>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_DIGITAL_PINS:
+ getArduino_tracedDigitalPins().clear();
+ getArduino_tracedDigitalPins().addAll((Collection extends TracedDigitalPin>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_INTEGER_VARIABLES:
+ getArduino_tracedIntegerVariables().clear();
+ getArduino_tracedIntegerVariables().addAll((Collection extends TracedIntegerVariable>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_SHARED_RESOURCES:
+ getArduino_tracedSharedResources().clear();
+ getArduino_tracedSharedResources().addAll((Collection extends TracedSharedResource>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__ROOT_STEPS:
+ getRootSteps().clear();
+ getRootSteps().addAll((Collection extends Step>)newValue);
+ return;
+ case ArduinoTracePackage.TRACE__STATES_TRACE:
+ getStatesTrace().clear();
+ getStatesTrace().addAll((Collection extends State>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ArduinoTracePackage.TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE:
+ getArduino_Delay_Execute_Sequence().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_IF_EXECUTE_SEQUENCE:
+ getArduino_If_Execute_Sequence().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ getArduino_ModuleAssignment_Execute_Sequence().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE:
+ getArduino_Project_Setup_Sequence().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ getArduino_VariableAssignment_Execute_Sequence().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE:
+ getArduino_VariableDeclaration_Execute_Sequence().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_ANALOG_PINS:
+ getArduino_tracedAnalogPins().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES:
+ getArduino_tracedBooleanVariables().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_DIGITAL_PINS:
+ getArduino_tracedDigitalPins().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_INTEGER_VARIABLES:
+ getArduino_tracedIntegerVariables().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_SHARED_RESOURCES:
+ getArduino_tracedSharedResources().clear();
+ return;
+ case ArduinoTracePackage.TRACE__ROOT_STEPS:
+ getRootSteps().clear();
+ return;
+ case ArduinoTracePackage.TRACE__STATES_TRACE:
+ getStatesTrace().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ *
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ArduinoTracePackage.TRACE__ARDUINO_DELAY_EXECUTE_SEQUENCE:
+ return arduino_Delay_Execute_Sequence != null && !arduino_Delay_Execute_Sequence.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_IF_EXECUTE_SEQUENCE:
+ return arduino_If_Execute_Sequence != null && !arduino_If_Execute_Sequence.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_MODULE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ return arduino_ModuleAssignment_Execute_Sequence != null && !arduino_ModuleAssignment_Execute_Sequence.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_PROJECT_SETUP_SEQUENCE:
+ return arduino_Project_Setup_Sequence != null && !arduino_Project_Setup_Sequence.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_ASSIGNMENT_EXECUTE_SEQUENCE:
+ return arduino_VariableAssignment_Execute_Sequence != null && !arduino_VariableAssignment_Execute_Sequence.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_VARIABLE_DECLARATION_EXECUTE_SEQUENCE:
+ return arduino_VariableDeclaration_Execute_Sequence != null && !arduino_VariableDeclaration_Execute_Sequence.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_ANALOG_PINS:
+ return arduino_tracedAnalogPins != null && !arduino_tracedAnalogPins.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_BOOLEAN_VARIABLES:
+ return arduino_tracedBooleanVariables != null && !arduino_tracedBooleanVariables.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_DIGITAL_PINS:
+ return arduino_tracedDigitalPins != null && !arduino_tracedDigitalPins.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_INTEGER_VARIABLES:
+ return arduino_tracedIntegerVariables != null && !arduino_tracedIntegerVariables.isEmpty();
+ case ArduinoTracePackage.TRACE__ARDUINO_TRACED_SHARED_RESOURCES:
+ return arduino_tracedSharedResources != null && !arduino_tracedSharedResources.isEmpty();
+ case ArduinoTracePackage.TRACE__ROOT_STEPS:
+ return rootSteps != null && !rootSteps.isEmpty();
+ case ArduinoTracePackage.TRACE__STATES_TRACE:
+ return statesTrace != null && !statesTrace.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //TraceImpl
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/util/ArduinoTraceAdapterFactory.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/util/ArduinoTraceAdapterFactory.java
new file mode 100644
index 00000000..24fb9cb0
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/util/ArduinoTraceAdapterFactory.java
@@ -0,0 +1,120 @@
+/**
+ */
+package arduinoTrace.util;
+
+import arduinoTrace.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ *
+ * The Adapter Factory for the model.
+ * It provides an adapter createXXX
method for each class of the model.
+ *
+ * @see arduinoTrace.ArduinoTracePackage
+ * @generated
+ */
+public class ArduinoTraceAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ *
+ *
+ * @generated
+ */
+ protected static ArduinoTracePackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ *
+ *
+ * @generated
+ */
+ public ArduinoTraceAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ArduinoTracePackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ *
+ * This implementation returns true
if the object is either the model's package or is an instance object of the model.
+ *
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the createXXX
methods.
+ *
+ *
+ * @generated
+ */
+ protected ArduinoTraceSwitch modelSwitch =
+ new ArduinoTraceSwitch() {
+ @Override
+ public Adapter caseTrace(Trace object) {
+ return createTraceAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the target
.
+ *
+ *
+ * @param target the object to adapt.
+ * @return the adapter for the target
.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link arduinoTrace.Trace Trace }'.
+ *
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ *
+ * @return the new adapter.
+ * @see arduinoTrace.Trace
+ * @generated
+ */
+ public Adapter createTraceAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ *
+ * This default implementation returns null.
+ *
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //ArduinoTraceAdapterFactory
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/util/ArduinoTraceSwitch.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/util/ArduinoTraceSwitch.java
new file mode 100644
index 00000000..ab84249d
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/arduinoTrace/util/ArduinoTraceSwitch.java
@@ -0,0 +1,110 @@
+/**
+ */
+package arduinoTrace.util;
+
+import arduinoTrace.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ *
+ * The Switch for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the caseXXX
method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ *
+ * @see arduinoTrace.ArduinoTracePackage
+ * @generated
+ */
+public class ArduinoTraceSwitch extends Switch {
+ /**
+ * The cached model package
+ *
+ *
+ * @generated
+ */
+ protected static ArduinoTracePackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ *
+ *
+ * @generated
+ */
+ public ArduinoTraceSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ArduinoTracePackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ *
+ *
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls caseXXX
for each class of the model until one returns a non null result; it yields that result.
+ *
+ *
+ * @return the first non-null result returned by a caseXXX
call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ArduinoTracePackage.TRACE: {
+ Trace trace = (Trace)theEObject;
+ T result = caseTrace(trace);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'Trace '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'Trace '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseTrace(Trace object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of 'EObject '.
+ *
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ *
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of 'EObject '.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //ArduinoTraceSwitch
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/org/gemoc/arduino/arduino/trace/tracemanager/ArduinoTraceEngineAddon.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/org/gemoc/arduino/arduino/trace/tracemanager/ArduinoTraceEngineAddon.java
new file mode 100644
index 00000000..0d78ac65
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/org/gemoc/arduino/arduino/trace/tracemanager/ArduinoTraceEngineAddon.java
@@ -0,0 +1,25 @@
+package org.gemoc.arduino.arduino.trace.tracemanager;
+
+import fr.inria.diverse.trace.gemoc.traceaddon.AbstractTraceAddon;
+import fr.inria.diverse.trace.gemoc.api.IStepFactory;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+public class ArduinoTraceEngineAddon extends AbstractTraceAddon {
+
+ @Override
+ public fr.inria.diverse.trace.gemoc.api.IGemocTraceManager constructTraceManager(Resource exeModel,
+ Resource traceResource) {
+ return new ArduinoTraceManager(exeModel, traceResource);
+ }
+
+ private ArduinoTraceStepFactory factory = null;
+
+ @Override
+ public IStepFactory getFactory() {
+ if (factory == null)
+ factory = new ArduinoTraceStepFactory();
+ return factory;
+ }
+
+}
\ No newline at end of file
diff --git a/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/org/gemoc/arduino/arduino/trace/tracemanager/ArduinoTraceManager.java b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/org/gemoc/arduino/arduino/trace/tracemanager/ArduinoTraceManager.java
new file mode 100644
index 00000000..ba63d47c
--- /dev/null
+++ b/dev/language_workbench_concurrency_demo/org.gemoc.arduino.arduino.trace/src/org/gemoc/arduino/arduino/trace/tracemanager/ArduinoTraceManager.java
@@ -0,0 +1,1111 @@
+package org.gemoc.arduino.arduino.trace.tracemanager;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import fr.inria.diverse.trace.api.IValueTrace;
+import fr.inria.diverse.trace.api.impl.GenericValueTrace;
+
+public class ArduinoTraceManager implements fr.inria.diverse.trace.gemoc.api.IGemocTraceManager {
+
+ private arduinoTrace.Trace traceRoot;
+ private Resource executedModel;
+
+ private Map exeToTraced;
+
+ private arduinoTrace.States.State lastState;
+ private List traces;
+
+ private Resource traceResource;
+ private Deque