Converted SLG ROS2 transformers to Java - step 1
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/AbstractSLGTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/SLGBaseTransformer.java
similarity index 60%
rename from load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/AbstractSLGTransformer.java
rename to load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/SLGBaseTransformer.java
index 689b8ab..bd19384 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/AbstractSLGTransformer.java
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/SLGBaseTransformer.java
@@ -13,11 +13,18 @@
package org.eclipse.app4mc.slg.commons.m2t;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
import com.google.inject.Inject;
-public abstract class AbstractSLGTransformer {
+public abstract class SLGBaseTransformer {
@Inject Properties properties;
@@ -30,4 +37,17 @@
return value.toString();
}
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ return new HashMap<>();
+ }
+
+ public List<String> getSrcFiles() {
+
+ return getCache().values().stream()
+ .map(TranslationUnit::getSrcFile)
+ .sorted()
+ .distinct()
+ .collect(Collectors.toList());
+ }
+
}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/ActivityGraphItemTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/ActivityGraphItemTransformer.xtend
index 165fb9f..481fe3a 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/ActivityGraphItemTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/ActivityGraphItemTransformer.xtend
@@ -24,14 +24,14 @@
import org.eclipse.app4mc.amalthea.model.LabelAccess
import org.eclipse.app4mc.amalthea.model.RunnableCall
import org.eclipse.app4mc.amalthea.model.Ticks
-import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer
import org.eclipse.app4mc.slg.commons.m2t.generators.TicksTranslationUnit
import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
@Singleton
-class ActivityGraphItemTransformer extends AbstractSLGTransformer {
+class ActivityGraphItemTransformer extends SLGBaseTransformer {
static final Logger LOG = LoggerFactory.getLogger(typeof(ActivityGraphItemTransformer))
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/AmaltheaModel2TextTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/AmaltheaModel2TextTransformer.xtend
index d7adf76..ab1fbec 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/AmaltheaModel2TextTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/AmaltheaModel2TextTransformer.xtend
@@ -19,13 +19,13 @@
import org.eclipse.app4mc.amalthea.model.Amalthea
import org.eclipse.app4mc.slg.config.ConfigModel
import org.eclipse.app4mc.slg.config.util.ConfigurationFileLoader
-import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer
import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore
import org.eclipse.emf.ecore.resource.ResourceSet
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
-class AmaltheaModel2TextTransformer extends AbstractSLGTransformer {
+class AmaltheaModel2TextTransformer extends SLGBaseTransformer {
static final Logger LOG = LoggerFactory.getLogger(typeof(AmaltheaModel2TextTransformer))
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/BaseTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/BaseTransformer.xtend
deleted file mode 100644
index c9ddf2b..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/BaseTransformer.xtend
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers
-
-import java.util.ArrayList
-import java.util.HashMap
-import java.util.HashSet
-import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
-
-abstract class BaseTransformer extends AbstractSLGTransformer {
-
- abstract def HashMap<ArrayList<?>, ? extends TranslationUnit> getCache()
-
- def getSrcFiles() {
- val uniqueSrcFiles = new HashSet<String>();
- getCache().values.forEach[uniqueSrcFiles.add(it.srcFile)]
- return uniqueSrcFiles
- }
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/InstrumentationTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/InstrumentationTransformer.xtend
index bc1f65d..0b1a096 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/InstrumentationTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/InstrumentationTransformer.xtend
@@ -16,10 +16,10 @@
package org.eclipse.app4mc.slg.commons.m2t.transformers
import com.google.inject.Inject
-import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer
import org.eclipse.app4mc.transformation.util.OutputBuffer
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
-class InstrumentationTransformer extends AbstractSLGTransformer {
+class InstrumentationTransformer extends SLGBaseTransformer {
@Inject OutputBuffer outputBuffer
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/LabelTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/LabelTransformer.xtend
index 12dac4b..f255906 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/LabelTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/LabelTransformer.xtend
@@ -20,11 +20,12 @@
import java.util.ArrayList
import java.util.HashMap
import org.eclipse.app4mc.amalthea.model.Label
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit
import org.eclipse.app4mc.transformation.util.OutputBuffer
@Singleton
-class LabelTransformer extends SynteticTransformer<LabelTranslationUnit> {
+class LabelTransformer extends SLGBaseTransformer {
@Inject OutputBuffer outputBuffer
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/RunnableTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/RunnableTransformer.xtend
index 4a5c5f6..6de04ac 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/RunnableTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/RunnableTransformer.xtend
@@ -18,11 +18,12 @@
import com.google.inject.Inject
import com.google.inject.Singleton
import org.eclipse.app4mc.amalthea.model.Runnable
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableTranslationUnit
import org.eclipse.app4mc.transformation.util.OutputBuffer
@Singleton
-class RunnableTransformer extends SynteticTransformer<RunnableTranslationUnit> {
+class RunnableTransformer extends SLGBaseTransformer {
@Inject OutputBuffer outputBuffer
@Inject ActivityGraphItemTransformer psCallGraphItemTransformer
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/SynteticTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/SynteticTransformer.xtend
deleted file mode 100644
index fd2d623..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/SynteticTransformer.xtend
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers
-
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
-
-abstract class SynteticTransformer<T extends TranslationUnit> extends BaseTransformer {
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TaskTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TaskTransformer.xtend
index d778a19..c0a66bd 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TaskTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TaskTransformer.xtend
@@ -19,11 +19,12 @@
import com.google.inject.Singleton
import org.eclipse.app4mc.amalthea.model.Component
import org.eclipse.app4mc.amalthea.model.Task
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
import org.eclipse.app4mc.slg.commons.m2t.generators.TaskTranslationUnit
import org.eclipse.app4mc.transformation.util.OutputBuffer
@Singleton
-class TaskTransformer extends BaseTransformer {
+class TaskTransformer extends SLGBaseTransformer {
@Inject OutputBuffer outputBuffer
@Inject RunnableTransformer runnableTransformer
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksTransformer.xtend
index e5f7846..1bf7269 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksTransformer.xtend
@@ -20,11 +20,12 @@
import java.util.ArrayList
import java.util.List
import org.eclipse.app4mc.amalthea.model.Ticks
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
import org.eclipse.app4mc.slg.commons.m2t.generators.TicksTranslationUnit
import org.eclipse.app4mc.transformation.util.OutputBuffer
@Singleton
-class TicksTransformer {
+class TicksTransformer extends SLGBaseTransformer {
@Inject OutputBuffer outputBuffer
@Inject TicksUtilsTransformer ticksUtilsTransformer
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksUtilsTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksUtilsTransformer.xtend
index 92831f6..abac359 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksUtilsTransformer.xtend
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/TicksUtilsTransformer.xtend
@@ -18,13 +18,14 @@
import com.google.inject.Inject
import com.google.inject.Singleton
import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation
-import org.eclipse.app4mc.slg.config.ConfigModel
import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer
import org.eclipse.app4mc.slg.commons.m2t.generators.TicksUtilsTranslationUnit
+import org.eclipse.app4mc.slg.config.ConfigModel
import org.eclipse.app4mc.transformation.util.OutputBuffer
@Singleton
-class TicksUtilsTransformer extends SynteticTransformer<TicksUtilsTranslationUnit> {
+class TicksUtilsTransformer extends SLGBaseTransformer {
@Inject OutputBuffer outputBuffer
@Inject CustomObjectsStore customObjsStore
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxBaseSettings.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxBaseSettings.java
index a66f578..3d24e3b 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxBaseSettings.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxBaseSettings.java
@@ -32,11 +32,13 @@
static final String INC_EXT = ".h";
static final String INC_FOLDER = "/_inc/";
+ public static final String OTHER_TYPE = "OTHER";
+
public static void initializeOutputBuffer(OutputBuffer buffer, String outputFolder) {
buffer.initialize(outputFolder);
buffer.configureFiletype(SRC_TYPE, SRC_EXT, "// This code is auto-generated\n\n", null);
buffer.configureFiletype(INC_TYPE, INC_EXT, "// This code is auto-generated\n\n#pragma once\n\n", null);
- buffer.configureFiletype("OTHER", "", "", "");
+ buffer.configureFiletype(OTHER_TYPE, "", "", "");
}
}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
index d4b7835..d99aa63 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
@@ -14,7 +14,7 @@
package org.eclipse.app4mc.slg.linux.transformers.sw;
import org.eclipse.app4mc.amalthea.model.Ticks;
-import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer;
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer;
import org.eclipse.app4mc.slg.commons.m2t.SLGTranslationUnit;
import org.eclipse.app4mc.slg.linux.generators.LinuxTicksGenerator;
@@ -22,7 +22,7 @@
import com.google.inject.Singleton;
@Singleton
-public class LinuxTicksTransformer extends AbstractSLGTransformer {
+public class LinuxTicksTransformer extends SLGBaseTransformer {
@Inject private LinuxTicksUtilsTransformer ticksUtilsTransformer;
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/artefacts/ROS2GoogleGuiceModule.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/artefacts/ROS2GoogleGuiceModule.java
index 6444c94..c6f27eb 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/artefacts/ROS2GoogleGuiceModule.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/artefacts/ROS2GoogleGuiceModule.java
@@ -20,10 +20,10 @@
import org.eclipse.app4mc.slg.commons.m2t.transformers.LabelTransformer;
import org.eclipse.app4mc.slg.commons.m2t.transformers.RunnableTransformer;
import org.eclipse.app4mc.slg.commons.m2t.transformers.TaskTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.RosActivityGraphItemTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.RosLabelTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.RosRunnableTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.RosTaskTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosActivityGraphItemTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosLabelTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosRunnableTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosTaskTransformer;
import com.google.inject.AbstractModule;
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessStimulusGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessStimulusGenerator.xtend
new file mode 100644
index 0000000..b196482
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessStimulusGenerator.xtend
@@ -0,0 +1,83 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.generators
+
+class RosInterProcessStimulusGenerator {
+
+ // Suppress default constructor
+ private new() {
+ throw new IllegalStateException("Utility class");
+ }
+
+ static def String toPackageXML(RosIpStimulusTranslationunit tu) '''
+ <?xml version="1.0"?>
+ <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
+ <package format="3">
+ <name>«tu.moduleName»</name>
+ <version>0.0.0</version>
+ <description>TODO: Package description</description>
+ <maintainer email="fixedterm.Patrick.Will@de.bosch.com">wlp8fe</maintainer>
+ <license>TODO: License declaration</license>
+
+ <build_depend>rosidl_default_generators</build_depend>
+
+ <exec_depend>rosidl_default_runtime</exec_depend>
+
+ <member_of_group>rosidl_interface_packages</member_of_group>
+
+ <buildtool_depend>ament_cmake</buildtool_depend>
+
+ <test_depend>ament_lint_auto</test_depend>
+ <test_depend>ament_lint_common</test_depend>
+
+ <export>
+ <build_type>ament_cmake</build_type>
+ </export>
+ </package>
+
+
+
+ '''
+
+ static def String toCMake() '''
+
+ cmake_minimum_required(VERSION 3.5)
+ project(�ipUnit.moduleName�)
+
+
+ if(NOT CMAKE_C_STANDARD)
+ set(CMAKE_C_STANDARD 99)
+ endif()
+
+ # Default to C++14
+ if(NOT CMAKE_CXX_STANDARD)
+ set(CMAKE_CXX_STANDARD 14)
+ endif()
+ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+
+ add_compile_options(-Wall -Wextra -Wpedantic)
+ endif()
+ find_package(ament_cmake REQUIRED)
+
+
+ find_package(rosidl_default_generators REQUIRED)
+ rosidl_generate_interfaces(${PROJECT_NAME}
+ "srv/�Utils.toIdlCompliantName(ipUnit.moduleName)�.srv"
+ )
+ ament_package()
+ '''
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosModel2TextTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosModel2TextGenerator.xtend
similarity index 64%
rename from load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosModel2TextTransformer.xtend
rename to load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosModel2TextGenerator.xtend
index 217bdb9..cba4ccf 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosModel2TextTransformer.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosModel2TextGenerator.xtend
@@ -11,7 +11,7 @@
* Robert Bosch GmbH - initial API and implementation
*/
-package org.eclipse.app4mc.slg.ros2.transformers
+package org.eclipse.app4mc.slg.ros2.generators
import com.google.inject.Inject
import com.google.inject.Singleton
@@ -31,102 +31,14 @@
import org.eclipse.app4mc.slg.commons.m2t.transformers.AmaltheaModel2TextTransformer
import org.eclipse.app4mc.slg.commons.m2t.transformers.TicksUtilsTransformer
import org.eclipse.app4mc.slg.ros2.generators.RosAmlTranslationUnit
+import org.eclipse.app4mc.slg.ros2.transformers.common.RosTagTransformer
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosLabelTransformer
import org.eclipse.app4mc.transformation.util.OutputBuffer
@Singleton
-class RosModel2TextTransformer extends AmaltheaModel2TextTransformer {
+class RosModel2TextGenerator {
- @Inject OutputBuffer outputBuffer
- @Inject RosTagTransformer tagTransformer
- @Inject TicksUtilsTransformer ticksUtilsTransformer
- @Inject RosLabelTransformer labelTransformer
-
- var label = false;
- var ticks = false;
- var interprocess = false;
- var channelSend = false;
- var performance_measurement = false;
-
- override void transform(Amalthea model, String outputFolder) {
-
- this.outputBuffer.initialize(outputFolder)
- this.outputBuffer.configureFiletype("SRC", ".cpp", "// This code is auto-generated\n\n", null);
- this.outputBuffer.configureFiletype("INC", ".h", "// This code is auto-generated\n\n", null);
- this.outputBuffer.configureFiletype("OTHER", "", "", "");
-
- var Set<String> services = new HashSet<String>()
- var Set<String> nodes = new HashSet<String>()
-
- model?.commonElements?.tags.forEach [ tag |
-
- // instance to know which node published a message
- tagTransformer.transform(tag, model)
- ]
-
- /* extract information needed for top-level CMake file */
- /* find runnables that use service files and use the tag to set the dependencies */
- for (Task t : model?.swModel?.tasks) {
- var stimuli = t.stimuli.get(0)
-
- for (Tag tg : t.tags) {
- nodes.add(tg.name)
- }
-
- // check if task has interprocess stimulus, if so task is service callback
- if (stimuli instanceof InterProcessStimulus) {
- services.add(stimuli.name + '_service')
- } else {
- // search for InterProcessTrigger
- for (ActivityGraphItem r : t.activityGraph.items) {
- if (r instanceof RunnableCall) {
- if ((r?.runnable?.customProperties?.get('measure_performance') as BooleanObject)?.value) {
- performance_measurement = true
- }
- for (ActivityGraphItem aci : r.runnable.activityGraph.items) {
- if (aci instanceof LabelAccess) {
- label = true;
- }
- if (aci instanceof Ticks) {
- ticks = true;
- }
- if (aci instanceof InterProcessTrigger) {
- interprocess = true;
- }
- if (aci instanceof ChannelSend) {
- channelSend = true;
- }
- }
- }
- }
- }
- }
-
- // create CMake files
- // TransformerTicksUtils
- ticksUtilsTransformer.createCMake()
-
- // TransformerLabel
- labelTransformer.createCMake()
-
- // create aml if neccessary --> Side effect !!!
- new RosAmlTranslationUnit(outputBuffer);
-
- // tasks, containing only runnables
- outputBuffer.appendTo("OTHER", 'CMakeLists.txt', toCmake(nodes, services).toString)
-
- // create package.xml for ROS environment
- outputBuffer.appendTo("OTHER", 'package.xml', toPackageXml(services).toString())
-
- // create build script
- outputBuffer.appendTo("OTHER", 'build.sh', toBuildScript(services).toString())
-
- // create launch file
- outputBuffer.appendTo("OTHER", 'launch.py', toLaunchFile(nodes).toString())
-
- outputBuffer.finish
- }
-
- def toLaunchFile(Set<String> nodes) '''
+ static def String toLaunchFile(Set<String> nodes) '''
from launch import LaunchDescription
from launch_ros.actions import Node
@@ -142,7 +54,7 @@
])
'''
- def toBuildScript(Set<String> services) '''
+ static def String toBuildScript(Set<String> services) '''
«FOR service : services»
#building service «service»
@@ -157,7 +69,7 @@
'''
// TODO: define attributes via ConfigModel
- def toPackageXml(Set<String> services) '''
+ static def String toPackageXml(Set<String> services) '''
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
@@ -184,7 +96,7 @@
</package>
'''
- def toCmake(Set<String> tags, Set<String> services) '''
+ static def String toCmake(Set<String> tags, Set<String> services, boolean label, boolean ticks, boolean interprocess, boolean channelSend, boolean performance_measurement) '''
# CMakeLists for Nodes
cmake_minimum_required(VERSION 3.5)
project(amalthea_ros_model)
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagTranslationUnit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagTranslationUnit.java
index 7eaad3e..6c59402 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagTranslationUnit.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagTranslationUnit.java
@@ -21,7 +21,7 @@
import org.eclipse.app4mc.amalthea.model.Tag;
import org.eclipse.app4mc.amalthea.model.Task;
import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
-import org.eclipse.app4mc.slg.ros2.transformers.RosTaskTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosTaskTransformer;
import org.eclipse.app4mc.transformation.util.OutputBuffer;
public class RosTagTranslationUnit extends TranslationUnit {
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java
index d572e49..c2564a9 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java
@@ -32,9 +32,9 @@
import org.eclipse.app4mc.amalthea.model.Task;
import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit;
import org.eclipse.app4mc.slg.commons.m2t.generators.TaskTranslationUnit;
-import org.eclipse.app4mc.slg.ros2.transformers.RosInterProcessStimulusTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.RosLabelTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.RosRunnableTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.stimuli.RosInterProcessStimulusTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosLabelTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosRunnableTransformer;
import org.eclipse.app4mc.transformation.util.OutputBuffer;
public class RosTaskTranslationUnit extends TaskTranslationUnit {
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosActivityGraphItemTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosActivityGraphItemTransformer.xtend
deleted file mode 100644
index f3db0fc..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosActivityGraphItemTransformer.xtend
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.ActivityGraphItem
-import org.eclipse.app4mc.amalthea.model.ChannelSend
-import org.eclipse.app4mc.amalthea.model.InterProcessTrigger
-import org.eclipse.app4mc.slg.commons.m2t.transformers.ActivityGraphItemTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
-
-@Singleton
-class RosActivityGraphItemTransformer extends ActivityGraphItemTransformer {
-
- @Inject RosChannelSendTransformer channelSendTransformer
- @Inject RosInterProcessTriggerTransformer ipTransformer
-
- dispatch override TranslationUnit transform(ChannelSend cs) {
- return channelSendTransformer.transform(cs);
- }
-
- dispatch def TranslationUnit transform(InterProcessTrigger ip) {
- return ipTransformer.transform(ip)
- }
-
- dispatch override TranslationUnit transform(ActivityGraphItem ActivityGraphItem) {
- val message = '''/*[feature «ActivityGraphItem.class» in not supported]*/'''
- return new TranslationUnit("undefined", message, message, message)
- }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosBaseSettings.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosBaseSettings.java
new file mode 100644
index 0000000..f8d76e8
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosBaseSettings.java
@@ -0,0 +1,44 @@
+/**
+********************************************************************************
+* Copyright (c) 2021 Robert Bosch GmbH.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+*
+* Contributors:
+* Robert Bosch GmbH - initial API and implementation
+********************************************************************************
+*/
+
+package org.eclipse.app4mc.slg.ros2.transformers;
+
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+public class RosBaseSettings {
+
+ // Suppress default constructor
+ private RosBaseSettings() {
+ throw new IllegalStateException("Utility class");
+ }
+
+ static final String SRC_TYPE = "SRC";
+ static final String SRC_EXT = ".cpp";
+ static final String SRC_FOLDER = "/_src/";
+
+ static final String INC_TYPE = "INC";
+ static final String INC_EXT = ".h";
+ static final String INC_FOLDER = "/_inc/";
+
+ public static final String OTHER_TYPE = "OTHER";
+
+ public static void initializeOutputBuffer(OutputBuffer buffer, String outputFolder) {
+ buffer.initialize(outputFolder);
+ buffer.configureFiletype(SRC_TYPE, SRC_EXT, "// This code is auto-generated\n\n", null);
+ buffer.configureFiletype(INC_TYPE, INC_EXT, "// This code is auto-generated\n\n", null);
+ buffer.configureFiletype(OTHER_TYPE, "", "", "");
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosBaseTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosBaseTransformer.java
new file mode 100644
index 0000000..8a1b0f9
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosBaseTransformer.java
@@ -0,0 +1,63 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers;
+
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.INC_EXT;
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.INC_FOLDER;
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.INC_TYPE;
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.SRC_EXT;
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.SRC_FOLDER;
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.SRC_TYPE;
+
+import org.eclipse.app4mc.slg.commons.m2t.SLGTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+import com.google.inject.Inject;
+
+public abstract class RosBaseTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+
+ // Buffer handling
+
+ public boolean isIncFileEmpty(SLGTranslationUnit tu) {
+ return !outputBuffer.bufferExists(INC_TYPE, getIncModulePath(tu));
+ }
+
+ public boolean isSrcFileEmpty(SLGTranslationUnit tu) {
+ return !outputBuffer.bufferExists(SRC_TYPE, getSrcModulePath(tu));
+ }
+
+ public boolean incAppend(SLGTranslationUnit tu, String str) {
+ return outputBuffer.appendTo(INC_TYPE, getIncModulePath(tu), str);
+ }
+
+ public boolean srcAppend(SLGTranslationUnit tu, String str) {
+ return outputBuffer.appendTo(SRC_TYPE, getSrcModulePath(tu), str);
+ }
+
+ // Attributes derived from translation unit
+
+ public String getIncModulePath(SLGTranslationUnit tu) { return tu.getModulePath() + INC_FOLDER + tu.getModuleName(); }
+ public String getSrcModulePath(SLGTranslationUnit tu) { return tu.getModulePath() + SRC_FOLDER + tu.getModuleName(); }
+
+ public String getSrcFile(SLGTranslationUnit tu) { return tu.getModuleName() + SRC_EXT; }
+ public String getIncFile(SLGTranslationUnit tu) { return tu.getModuleName() + INC_EXT; }
+
+ public String getSrcPath(SLGTranslationUnit tu) { return tu.getModulePath() + SRC_FOLDER + getSrcFile(tu); }
+ public String getIncPath(SLGTranslationUnit tu) { return tu.getModulePath() + INC_FOLDER + getIncFile(tu); }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendTransformer.xtend
deleted file mode 100644
index 8c8826a..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendTransformer.xtend
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.ChannelSend
-import org.eclipse.app4mc.slg.ros2.generators.RosChannelSendTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosChannelSendTransformer {
-
- @Inject OutputBuffer outputBuffer
- @Inject RosChannelSendUtilsTransformer channelSendUtilTransformer
-
- def RosChannelSendTranslationUnit transform(ChannelSend cs) {
-
- val tuIp = channelSendUtilTransformer.generate(cs)
- return new RosChannelSendTranslationUnit(outputBuffer, tuIp, cs)
- }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendUtilsTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendUtilsTransformer.xtend
deleted file mode 100644
index 482b413..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendUtilsTransformer.xtend
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.ChannelSend
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SynteticTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosChannelSendUtilsTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosChannelSendUtilsTransformer extends SynteticTransformer<RosChannelSendUtilsTranslationUnit> {
-
- @Inject OutputBuffer outputBuffer
-
- def RosChannelSendUtilsTranslationUnit generate(ChannelSend cs) {
- return generateIntern(cs) // hash according to class not instance
- }
-
- def create new RosChannelSendUtilsTranslationUnit(outputBuffer, cs) generateIntern(ChannelSend cs) {
- }
-
- override getCache() { return this._createCache_generateIntern }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessStimulusTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessStimulusTransformer.xtend
deleted file mode 100644
index 9f81595..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessStimulusTransformer.xtend
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.InterProcessStimulus
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SynteticTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosIpStimulusTranslationunit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosInterProcessStimulusTransformer extends SynteticTransformer<RosIpStimulusTranslationunit> {
-
- @Inject OutputBuffer outputBuffer
-
- RosIpStimulusTranslationunit ipUnit
-
- def RosIpStimulusTranslationunit transform(InterProcessStimulus ip) {
- ipUnit = new RosIpStimulusTranslationunit(outputBuffer, ip)
- outputBuffer.appendTo("OTHER", ipUnit.makeFilePath.toString(), "CMakeLists.txt")
- outputBuffer.appendTo("OTHER", "services/" + ipUnit.moduleName + "/CMakeLists.txt", toCMake())
- outputBuffer.appendTo("OTHER", "services/" + ipUnit.moduleName + "/package.xml", toPackageXML())
- return ipUnit
- }
-
- def String toPackageXML() '''
- <?xml version="1.0"?>
- <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
- <package format="3">
- <name>«ipUnit.moduleName»</name>
- <version>0.0.0</version>
- <description>TODO: Package description</description>
- <maintainer email="fixedterm.Patrick.Will@de.bosch.com">wlp8fe</maintainer>
- <license>TODO: License declaration</license>
-
- <build_depend>rosidl_default_generators</build_depend>
-
- <exec_depend>rosidl_default_runtime</exec_depend>
-
- <member_of_group>rosidl_interface_packages</member_of_group>
-
- <buildtool_depend>ament_cmake</buildtool_depend>
-
- <test_depend>ament_lint_auto</test_depend>
- <test_depend>ament_lint_common</test_depend>
-
- <export>
- <build_type>ament_cmake</build_type>
- </export>
- </package>
-
-
-
- '''
-
- def String toCMake() '''
-
- cmake_minimum_required(VERSION 3.5)
- project(�ipUnit.moduleName�)
-
-
- if(NOT CMAKE_C_STANDARD)
- set(CMAKE_C_STANDARD 99)
- endif()
-
- # Default to C++14
- if(NOT CMAKE_CXX_STANDARD)
- set(CMAKE_CXX_STANDARD 14)
- endif()
- if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-
- add_compile_options(-Wall -Wextra -Wpedantic)
- endif()
- find_package(ament_cmake REQUIRED)
-
-
- find_package(rosidl_default_generators REQUIRED)
- rosidl_generate_interfaces(${PROJECT_NAME}
- "srv/�Utils.toIdlCompliantName(ipUnit.moduleName)�.srv"
- )
- ament_package()
- '''
-
- override getCache() {
- throw new UnsupportedOperationException("TODO: auto-generated method stub")
- }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessTriggerTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessTriggerTransformer.xtend
deleted file mode 100644
index 1d2726c..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessTriggerTransformer.xtend
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.InterProcessTrigger
-import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessTriggerTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosInterProcessTriggerTransformer {
-
- @Inject OutputBuffer outputBuffer
- @Inject RosInterProcessTriggerUtilsTransformer ipUtilTransformer
-
- def RosInterProcessTriggerTranslationUnit transform(InterProcessTrigger ip) {
-
- val tuIp = ipUtilTransformer.generate(ip)
- return new RosInterProcessTriggerTranslationUnit(outputBuffer, tuIp, ip)
- }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessTriggerUtilsTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessTriggerUtilsTransformer.xtend
deleted file mode 100644
index f6a9bfe..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosInterProcessTriggerUtilsTransformer.xtend
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.InterProcessTrigger
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SynteticTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessTriggerUtilsTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosInterProcessTriggerUtilsTransformer extends SynteticTransformer<RosInterProcessTriggerUtilsTranslationUnit> {
-
- @Inject OutputBuffer outputBuffer
-
- def RosInterProcessTriggerUtilsTranslationUnit generate(InterProcessTrigger ip) {
- return generateIntern(ip) // hash according to class not instance
- }
-
- def create new RosInterProcessTriggerUtilsTranslationUnit(outputBuffer, ip)
- generateIntern(InterProcessTrigger ip) {
- }
-
- override getCache() {
- return this._createCache_generateIntern
- }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend
deleted file mode 100644
index 574672f..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers;
-
-import com.google.inject.Inject
-import org.eclipse.app4mc.amalthea.model.Label
-import org.eclipse.app4mc.slg.commons.m2t.transformers.LabelTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosLabelTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-class RosLabelTransformer extends LabelTransformer {
-
- @Inject OutputBuffer outputBuffer
-
- static final String LIB_NAME = "LABELS_LIB"
-
- override create new RosLabelTranslationUnit(outputBuffer, label)
- transform(Label label) {
- }
-
- override getCache() { return this._createCache_transform }
-
- override createCMake() {
- outputBuffer.appendTo("OTHER", RosLabelTranslationUnit.MAKEFILE_PATH, toCMake())
- }
-
- override String toCMake() '''
- # «LIB_NAME» ################################################################
- ####
- add_library(«LIB_NAME» STATIC
- «FOR srcFile : getSrcFiles()»
- «""» ${CMAKE_CURRENT_LIST_DIR}/_src/«srcFile»
- «ENDFOR»
- )
-
- target_include_directories(«LIB_NAME»
- PUBLIC ${CMAKE_CURRENT_LIST_DIR}/_inc
- )
- '''
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosModel2TextTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosModel2TextTransformer.java
new file mode 100644
index 0000000..9daca4d
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosModel2TextTransformer.java
@@ -0,0 +1,133 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers;
+
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.OTHER_TYPE;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.BooleanObject;
+import org.eclipse.app4mc.amalthea.model.ChannelSend;
+import org.eclipse.app4mc.amalthea.model.CommonElements;
+import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
+import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SWModel;
+import org.eclipse.app4mc.amalthea.model.Stimulus;
+import org.eclipse.app4mc.amalthea.model.Tag;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.Ticks;
+import org.eclipse.app4mc.amalthea.model.Value;
+import org.eclipse.app4mc.amalthea.model.util.ModelUtil;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.AmaltheaModel2TextTransformer;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.TicksUtilsTransformer;
+import org.eclipse.app4mc.slg.ros2.generators.RosAmlTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosModel2TextGenerator;
+import org.eclipse.app4mc.slg.ros2.transformers.common.RosTagTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosLabelTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosModel2TextTransformer extends AmaltheaModel2TextTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+ @Inject private RosTagTransformer tagTransformer;
+ @Inject private TicksUtilsTransformer ticksUtilsTransformer;
+ @Inject private RosLabelTransformer labelTransformer;
+
+ private boolean label = false;
+ private boolean ticks = false;
+ private boolean interprocess = false;
+ private boolean channelSend = false;
+ private boolean performance_measurement = false;
+
+ @Override
+ public void transform(final Amalthea model, final String outputFolder) {
+
+ RosBaseSettings.initializeOutputBuffer(this.outputBuffer, outputFolder);
+
+ Set<String> nodes = new HashSet<>();
+ Set<String> services = new HashSet<>();
+
+ CommonElements commonElements = ModelUtil.getOrCreateCommonElements(model);
+ SWModel swModel = ModelUtil.getOrCreateSwModel(model);
+
+ for (Tag tag : commonElements.getTags()) {
+ // instance to know which node published a message
+ tagTransformer.transform(tag, model);
+ }
+
+ /* extract information needed for top-level CMake file */
+ /* find runnables that use service files and use the tag to set the dependencies */
+
+ for (Task task : swModel.getTasks()) {
+
+ Stimulus stimulus = task.getStimuli().get(0); // Mc: Why only the first ?
+ for (final Tag tag : task.getTags()) {
+ nodes.add(tag.getName());
+ }
+
+ // check if task has interprocess stimulus, if so task is service callback
+ if ((stimulus instanceof InterProcessStimulus)) {
+ services.add(((InterProcessStimulus) stimulus).getName() + "_service");
+ } else {
+ // search for runnables called by task
+ for (Runnable run : SoftwareUtil.getRunnableList(task, null)) {
+ // check custom properties
+ Value perf = run.getCustomProperties().get("measure_performance");
+ if (perf instanceof BooleanObject && ((BooleanObject) perf).isValue()) {
+ performance_measurement = true;
+ }
+
+ // check activity graph
+ for (ActivityGraphItem item : run.getRunnableItems()) {
+ if (item instanceof LabelAccess) {
+ label = true;
+ }
+ if (item instanceof Ticks) {
+ ticks = true;
+ }
+ if (item instanceof InterProcessTrigger) {
+ interprocess = true;
+ }
+ if (item instanceof ChannelSend) {
+ channelSend = true;
+ }
+ }
+ }
+ }
+ }
+
+ this.ticksUtilsTransformer.createCMake();
+ this.labelTransformer.createCMake();
+ new RosAmlTranslationUnit(this.outputBuffer);
+ this.outputBuffer.appendTo(OTHER_TYPE, "CMakeLists.txt", RosModel2TextGenerator.toCmake(nodes, services, label,
+ ticks, interprocess, channelSend, performance_measurement));
+ this.outputBuffer.appendTo(OTHER_TYPE, "package.xml", RosModel2TextGenerator.toPackageXml(services));
+ this.outputBuffer.appendTo(OTHER_TYPE, "build.sh", RosModel2TextGenerator.toBuildScript(services));
+ this.outputBuffer.appendTo(OTHER_TYPE, "launch.py", RosModel2TextGenerator.toLaunchFile(nodes));
+ this.outputBuffer.finish();
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosRunnableTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosRunnableTransformer.xtend
deleted file mode 100644
index a096e98..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosRunnableTransformer.xtend
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import org.eclipse.app4mc.amalthea.model.Runnable
-import org.eclipse.app4mc.slg.commons.m2t.transformers.RunnableTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosRunnableTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-class RosRunnableTransformer extends RunnableTransformer {
-
- @Inject OutputBuffer outputBuffer
-
- @Inject RosActivityGraphItemTransformer psCallGraphItemTransformer
-
- override create new RosRunnableTranslationUnit(outputBuffer, psCallGraphItemTransformer, runnable)
- transform(Runnable runnable) {
- }
-
- override getCache() { return this._createCache_transform }
-
- override createCMake() {
- outputBuffer.appendTo("OTHER", RosRunnableTranslationUnit.makeFilePathStatic, toCMake())
- }
-
- override String toCMake() '''
- # «RosRunnableTranslationUnit.libName» ################################################################
- ####
- add_library(«RosRunnableTranslationUnit.libName» STATIC
- «FOR srcFile : getSrcFiles»
- «""» ${CMAKE_CURRENT_LIST_DIR}/_src/«srcFile»
- «ENDFOR»
- )
-
- target_include_directories(«RosRunnableTranslationUnit.libName»
- PUBLIC ${CMAKE_CURRENT_LIST_DIR}/_inc
- )
-
- target_include_directories(«RosRunnableTranslationUnit.libName»
- PUBLIC ${CMAKE_CURRENT_LIST_DIR}/../ticksUtils/_inc
- ${CMAKE_CURRENT_LIST_DIR}/../labels/_inc
- ${CMAKE_CURRENT_LIST_DIR}/../channelSendUtils/_inc
- )
-
- target_link_libraries(RUNNABLES_LIB
- PRIVATE LABELS_LIB TICKS_UTILS CHANNELSEND_UTILS
- )
- '''
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosTagTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosTagTransformer.xtend
deleted file mode 100644
index f2673dc..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosTagTransformer.xtend
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.Amalthea
-import org.eclipse.app4mc.amalthea.model.Tag
-import org.eclipse.app4mc.slg.commons.m2t.transformers.BaseTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosTagTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosTagTransformer extends BaseTransformer {
-
- @Inject OutputBuffer outputBuffer
- @Inject RosTaskTransformer rosTaskTransformer
-
- def create new RosTagTranslationUnit(outputBuffer, rosTaskTransformer, tag, model)
- transform(Tag tag, Amalthea model) {
- }
-
- override getCache() { return this._createCache_transform }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosTaskTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosTaskTransformer.xtend
deleted file mode 100644
index 96cbddf..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosTaskTransformer.xtend
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- *
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.ros2.transformers
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.Component
-import org.eclipse.app4mc.amalthea.model.Task
-import org.eclipse.app4mc.slg.commons.m2t.transformers.TaskTransformer
-import org.eclipse.app4mc.slg.ros2.generators.RosTaskTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class RosTaskTransformer extends TaskTransformer {
-
- @Inject OutputBuffer outputBuffer
- @Inject RosLabelTransformer rosTransformerLabel
- @Inject RosRunnableTransformer rosTransformerRunnable
- @Inject RosInterProcessStimulusTransformer ipStimulusTransformer
-
- override create new RosTaskTranslationUnit(outputBuffer, rosTransformerRunnable, rosTransformerLabel, ipStimulusTransformer, task, component)
- transform(Task task, Component component) {
- }
-
- override getCache() { return this._createCache_transform }
-
-}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/common/RosTagTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/common/RosTagTransformer.java
new file mode 100644
index 0000000..87de071
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/common/RosTagTransformer.java
@@ -0,0 +1,66 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.common;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Tag;
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosTagTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.transformers.sw.RosTaskTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosTagTransformer extends SLGBaseTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+ @Inject private RosTaskTransformer rosTaskTransformer;
+
+ private final HashMap<ArrayList<?>, RosTagTranslationUnit> cache = CollectionLiterals.newHashMap();
+
+ public RosTagTranslationUnit transform(final Tag tag, final Amalthea model) {
+ final ArrayList<?> key = CollectionLiterals.newArrayList(tag, model);
+ final RosTagTranslationUnit _result;
+ synchronized (cache) {
+ if (cache.containsKey(key)) {
+ return cache.get(key);
+ }
+ RosTagTranslationUnit tu = new RosTagTranslationUnit(this.outputBuffer,
+ this.rosTaskTransformer, tag, model);
+ _result = tu;
+ cache.put(key, _result);
+ }
+ _init_transform(_result, tag, model);
+ return _result;
+ }
+
+ private void _init_transform(final RosTagTranslationUnit it, final Tag tag, final Amalthea model) {
+ }
+
+ @Override
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ return this.cache;
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/stimuli/RosInterProcessStimulusTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/stimuli/RosInterProcessStimulusTransformer.java
new file mode 100644
index 0000000..cacf73b
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/stimuli/RosInterProcessStimulusTransformer.java
@@ -0,0 +1,52 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.stimuli;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessStimulusGenerator;
+import org.eclipse.app4mc.slg.ros2.generators.RosIpStimulusTranslationunit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosInterProcessStimulusTransformer extends SLGBaseTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+
+ private RosIpStimulusTranslationunit ipUnit;
+
+ public RosIpStimulusTranslationunit transform(final InterProcessStimulus ip) {
+ RosIpStimulusTranslationunit tu = new RosIpStimulusTranslationunit(this.outputBuffer,
+ ip);
+ this.ipUnit = tu;
+ this.outputBuffer.appendTo("OTHER", this.ipUnit.getMakeFilePath().toString(), "CMakeLists.txt");
+ this.outputBuffer.appendTo("OTHER", (("services/" + this.ipUnit.getModuleName()) + "/CMakeLists.txt"), RosInterProcessStimulusGenerator.toCMake());
+ this.outputBuffer.appendTo("OTHER", (("services/" + this.ipUnit.getModuleName()) + "/package.xml"), RosInterProcessStimulusGenerator.toPackageXML(ipUnit));
+ return this.ipUnit;
+ }
+
+ @Override
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ throw new UnsupportedOperationException("TODO: auto-generated method stub");
+ }
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosActivityGraphItemTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosActivityGraphItemTransformer.java
new file mode 100644
index 0000000..6356c7e
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosActivityGraphItemTransformer.java
@@ -0,0 +1,81 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import java.util.Arrays;
+
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.ChannelReceive;
+import org.eclipse.app4mc.amalthea.model.ChannelSend;
+import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.RunnableCall;
+import org.eclipse.app4mc.amalthea.model.Ticks;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.ActivityGraphItemTransformer;
+import org.eclipse.xtend2.lib.StringConcatenation;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosActivityGraphItemTransformer extends ActivityGraphItemTransformer {
+
+ @Inject private RosChannelSendTransformer channelSendTransformer;
+ @Inject private RosInterProcessTriggerTransformer ipTransformer;
+
+ @Override
+ protected TranslationUnit _transform(final ChannelSend cs) {
+ return this.channelSendTransformer.transform(cs);
+ }
+
+ protected TranslationUnit _transform(final InterProcessTrigger ip) {
+ return this.ipTransformer.transform(ip);
+ }
+
+ @Override
+ protected TranslationUnit _transform(final ActivityGraphItem ActivityGraphItem) {
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("/*[feature ");
+ Class<? extends org.eclipse.app4mc.amalthea.model.ActivityGraphItem> _class = ActivityGraphItem.getClass();
+ _builder.append(_class);
+ _builder.append(" in not supported]*/");
+ final String message = _builder.toString();
+ return new TranslationUnit("undefined", message, message, message);
+ }
+
+ @Override
+ public TranslationUnit transform(final ActivityGraphItem cs) {
+ if (cs instanceof ChannelReceive) {
+ return _transform((ChannelReceive) cs);
+ } else if (cs instanceof ChannelSend) {
+ return _transform((ChannelSend) cs);
+ } else if (cs instanceof LabelAccess) {
+ return _transform((LabelAccess) cs);
+ } else if (cs instanceof Ticks) {
+ return _transform((Ticks) cs);
+ } else if (cs instanceof InterProcessTrigger) {
+ return _transform((InterProcessTrigger) cs);
+ } else if (cs instanceof RunnableCall) {
+ return _transform((RunnableCall) cs);
+ } else if (cs != null) {
+ return _transform(cs);
+ } else {
+ throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(cs).toString());
+ }
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosChannelSendTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosChannelSendTransformer.java
new file mode 100644
index 0000000..6794357
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosChannelSendTransformer.java
@@ -0,0 +1,37 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import org.eclipse.app4mc.amalthea.model.ChannelSend;
+import org.eclipse.app4mc.slg.ros2.generators.RosChannelSendTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosChannelSendUtilsTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosChannelSendTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+ @Inject private RosChannelSendUtilsTransformer channelSendUtilTransformer;
+
+ public RosChannelSendTranslationUnit transform(final ChannelSend cs) {
+ final RosChannelSendUtilsTranslationUnit tuIp = this.channelSendUtilTransformer.generate(cs);
+ return new RosChannelSendTranslationUnit(this.outputBuffer, tuIp, cs);
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosChannelSendUtilsTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosChannelSendUtilsTransformer.java
new file mode 100644
index 0000000..eb8b2b9
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosChannelSendUtilsTransformer.java
@@ -0,0 +1,67 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.app4mc.amalthea.model.ChannelSend;
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosChannelSendUtilsTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+@Singleton
+public class RosChannelSendUtilsTransformer extends SLGBaseTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+
+ private final HashMap<ArrayList<?>, RosChannelSendUtilsTranslationUnit> cache = CollectionLiterals
+ .newHashMap();
+
+ public RosChannelSendUtilsTranslationUnit generate(final ChannelSend cs) {
+ return this.generateIntern(cs); // hash according to class not instance
+ }
+
+ public RosChannelSendUtilsTranslationUnit generateIntern(final ChannelSend cs) {
+ final ArrayList<?> key = CollectionLiterals.newArrayList(cs);
+ final RosChannelSendUtilsTranslationUnit _result;
+ synchronized (cache) {
+ if (cache.containsKey(key)) {
+ return cache.get(key);
+ }
+ RosChannelSendUtilsTranslationUnit _rosChannelSendUtilsTranslationUnit = new RosChannelSendUtilsTranslationUnit(
+ this.outputBuffer, cs);
+ _result = _rosChannelSendUtilsTranslationUnit;
+ cache.put(key, _result);
+ }
+ _init_generateIntern(_result, cs);
+ return _result;
+ }
+
+
+ private void _init_generateIntern(final RosChannelSendUtilsTranslationUnit it, final ChannelSend cs) {
+ }
+
+ @Override
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ return this.cache;
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosInterProcessTriggerTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosInterProcessTriggerTransformer.java
new file mode 100644
index 0000000..508ce20
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosInterProcessTriggerTransformer.java
@@ -0,0 +1,37 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
+import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessTriggerTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessTriggerUtilsTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosInterProcessTriggerTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+ @Inject private RosInterProcessTriggerUtilsTransformer ipUtilTransformer;
+
+ public RosInterProcessTriggerTranslationUnit transform(final InterProcessTrigger ip) {
+ final RosInterProcessTriggerUtilsTranslationUnit tuIp = this.ipUtilTransformer.generate(ip);
+ return new RosInterProcessTriggerTranslationUnit(this.outputBuffer, tuIp, ip);
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosInterProcessTriggerUtilsTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosInterProcessTriggerUtilsTransformer.java
new file mode 100644
index 0000000..941606f
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosInterProcessTriggerUtilsTransformer.java
@@ -0,0 +1,69 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
+import org.eclipse.app4mc.slg.commons.m2t.SLGBaseTransformer;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessTriggerUtilsTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosInterProcessTriggerUtilsTransformer extends SLGBaseTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+
+ private final HashMap<ArrayList<?>, RosInterProcessTriggerUtilsTranslationUnit> cache = CollectionLiterals
+ .newHashMap();
+
+ public RosInterProcessTriggerUtilsTranslationUnit generate(final InterProcessTrigger ip) {
+ return this.generateIntern(ip); // hash according to class not instance
+ }
+
+ public RosInterProcessTriggerUtilsTranslationUnit generateIntern(final InterProcessTrigger ip) {
+ final ArrayList<?> key = CollectionLiterals.newArrayList(ip);
+ final RosInterProcessTriggerUtilsTranslationUnit _result;
+ synchronized (cache) {
+ if (cache.containsKey(key)) {
+ return cache.get(key);
+ }
+ RosInterProcessTriggerUtilsTranslationUnit tu = new RosInterProcessTriggerUtilsTranslationUnit(
+ this.outputBuffer, ip);
+ _result = tu;
+ cache.put(key, _result);
+ }
+ _init_generateIntern(_result, ip);
+ return _result;
+ }
+
+ private void _init_generateIntern(final RosInterProcessTriggerUtilsTranslationUnit it,
+ final InterProcessTrigger ip) {
+ }
+
+ @Override
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ return this.cache;
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosLabelTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosLabelTransformer.java
new file mode 100644
index 0000000..474ef14
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosLabelTransformer.java
@@ -0,0 +1,102 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import com.google.inject.Inject;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.LabelTransformer;
+import org.eclipse.app4mc.slg.ros2.generators.RosLabelTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+public class RosLabelTransformer extends LabelTransformer {
+ @Inject
+ private OutputBuffer outputBuffer;
+
+ private static final String LIB_NAME = "LABELS_LIB";
+
+ @Override
+ public LabelTranslationUnit transform(final Label label) {
+ final ArrayList<?> key = CollectionLiterals.newArrayList(label);
+ final RosLabelTranslationUnit _result;
+ synchronized (_createCache_transform) {
+ if (_createCache_transform.containsKey(key)) {
+ return _createCache_transform.get(key);
+ }
+ RosLabelTranslationUnit tu = new RosLabelTranslationUnit(this.outputBuffer, label);
+ _result = tu;
+ _createCache_transform.put(key, _result);
+ }
+ _init_transform(_result, label);
+ return _result;
+ }
+
+ private final HashMap<ArrayList<?>, LabelTranslationUnit> _createCache_transform = CollectionLiterals.newHashMap();
+
+ private void _init_transform(final RosLabelTranslationUnit it, final Label label) {
+ }
+
+ @Override
+ public HashMap<ArrayList<?>, LabelTranslationUnit> getCache() {
+ return this._createCache_transform;
+ }
+
+ @Override
+ public boolean createCMake() {
+ return this.outputBuffer.appendTo("OTHER", RosLabelTranslationUnit.MAKEFILE_PATH, this.toCMake());
+ }
+
+ @Override
+ public String toCMake() {
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("# ");
+ _builder.append(RosLabelTransformer.LIB_NAME);
+ _builder.append(" ################################################################");
+ _builder.newLineIfNotEmpty();
+ _builder.append("####");
+ _builder.newLine();
+ _builder.append("add_library(");
+ _builder.append(RosLabelTransformer.LIB_NAME);
+ _builder.append(" STATIC");
+ _builder.newLineIfNotEmpty();
+ {
+ List<String> _srcFiles = this.getSrcFiles();
+ for (final String srcFile : _srcFiles) {
+ _builder.append("\t${CMAKE_CURRENT_LIST_DIR}/_src/");
+ _builder.append(srcFile);
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append(")");
+ _builder.newLine();
+ _builder.newLine();
+ _builder.append("target_include_directories(");
+ _builder.append(RosLabelTransformer.LIB_NAME);
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t ");
+ _builder.append("PUBLIC ${CMAKE_CURRENT_LIST_DIR}/_inc");
+ _builder.newLine();
+ _builder.append(")\t");
+ _builder.newLine();
+ return _builder.toString();
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosRunnableTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosRunnableTransformer.java
new file mode 100644
index 0000000..e8e55b1
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosRunnableTransformer.java
@@ -0,0 +1,134 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.RunnableTransformer;
+import org.eclipse.app4mc.slg.ros2.generators.RosRunnableTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+
+public class RosRunnableTransformer extends RunnableTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+ @Inject private RosActivityGraphItemTransformer psCallGraphItemTransformer;
+
+ private final HashMap<ArrayList<?>, RunnableTranslationUnit> cache = CollectionLiterals.newHashMap();
+
+ @Override
+ public RunnableTranslationUnit transform(final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+ final ArrayList<?> key = CollectionLiterals.newArrayList(runnable);
+ final RosRunnableTranslationUnit _result;
+ synchronized (cache) {
+ if (cache.containsKey(key)) {
+ return cache.get(key);
+ }
+ RosRunnableTranslationUnit tu = new RosRunnableTranslationUnit(this.outputBuffer,
+ this.psCallGraphItemTransformer, runnable);
+ _result = tu;
+ cache.put(key, _result);
+ }
+ _init_transform(_result, runnable);
+ return _result;
+ }
+
+
+ private void _init_transform(final RosRunnableTranslationUnit it,
+ final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+ }
+
+ @Override
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ return this.cache;
+ }
+
+ @Override
+ public boolean createCMake() {
+ return this.outputBuffer.appendTo("OTHER", RosRunnableTranslationUnit.getMakeFilePathStatic(), this.toCMake());
+ }
+
+ @Override
+ public String toCMake() {
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("# ");
+ String _libName = RosRunnableTranslationUnit.getLibName();
+ _builder.append(_libName);
+ _builder.append(" ################################################################");
+ _builder.newLineIfNotEmpty();
+ _builder.append("####");
+ _builder.newLine();
+ _builder.append("add_library(");
+ String _libName_1 = RosRunnableTranslationUnit.getLibName();
+ _builder.append(_libName_1);
+ _builder.append(" STATIC");
+ _builder.newLineIfNotEmpty();
+ {
+ List<String> _srcFiles = this.getSrcFiles();
+ for (final String srcFile : _srcFiles) {
+ _builder.append("\t${CMAKE_CURRENT_LIST_DIR}/_src/");
+ _builder.append(srcFile);
+ _builder.newLineIfNotEmpty();
+ }
+ }
+ _builder.append(")");
+ _builder.newLine();
+ _builder.newLine();
+ _builder.append("target_include_directories(");
+ String _libName_2 = RosRunnableTranslationUnit.getLibName();
+ _builder.append(_libName_2);
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("PUBLIC ${CMAKE_CURRENT_LIST_DIR}/_inc");
+ _builder.newLine();
+ _builder.append(")");
+ _builder.newLine();
+ _builder.newLine();
+ _builder.append("target_include_directories(");
+ String _libName_3 = RosRunnableTranslationUnit.getLibName();
+ _builder.append(_libName_3);
+ _builder.newLineIfNotEmpty();
+ _builder.append("\t");
+ _builder.append("PUBLIC ${CMAKE_CURRENT_LIST_DIR}/../ticksUtils/_inc");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("${CMAKE_CURRENT_LIST_DIR}/../labels/_inc");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("${CMAKE_CURRENT_LIST_DIR}/../channelSendUtils/_inc");
+ _builder.newLine();
+ _builder.append(")");
+ _builder.newLine();
+ _builder.newLine();
+ _builder.append("target_link_libraries(RUNNABLES_LIB ");
+ _builder.newLine();
+ _builder.append("\t");
+ _builder.append("PRIVATE LABELS_LIB TICKS_UTILS CHANNELSEND_UTILS");
+ _builder.newLine();
+ _builder.append(")");
+ _builder.newLine();
+ return _builder.toString();
+ }
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosTaskTransformer.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosTaskTransformer.java
new file mode 100644
index 0000000..0819475
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/sw/RosTaskTransformer.java
@@ -0,0 +1,70 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ * *******************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.ros2.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.app4mc.amalthea.model.Component;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TaskTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.TaskTransformer;
+import org.eclipse.app4mc.slg.ros2.generators.RosTaskTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.transformers.stimuli.RosInterProcessStimulusTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RosTaskTransformer extends TaskTransformer {
+
+ @Inject private OutputBuffer outputBuffer;
+ @Inject private RosLabelTransformer rosTransformerLabel;
+ @Inject private RosRunnableTransformer rosTransformerRunnable;
+ @Inject private RosInterProcessStimulusTransformer ipStimulusTransformer;
+
+ private final HashMap<ArrayList<?>, TaskTranslationUnit> cache = CollectionLiterals.newHashMap();
+
+ @Override
+ public TaskTranslationUnit transform(final Task task, final Component component) {
+ final ArrayList<?> key = CollectionLiterals.newArrayList(task, component);
+ final RosTaskTranslationUnit _result;
+ synchronized (cache) {
+ if (cache.containsKey(key)) {
+ return cache.get(key);
+ }
+ RosTaskTranslationUnit _rosTaskTranslationUnit = new RosTaskTranslationUnit(this.outputBuffer,
+ this.rosTransformerRunnable, this.rosTransformerLabel, this.ipStimulusTransformer, task, component);
+ _result = _rosTaskTranslationUnit;
+ cache.put(key, _result);
+ }
+ _init_transform(_result, task, component);
+ return _result;
+ }
+
+ private void _init_transform(final RosTaskTranslationUnit it, final Task task, final Component component) {
+ }
+
+ @Override
+ public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+ return this.cache;
+ }
+
+}